java 15

동시성(명시적 락)

명시적 락(Explicit Lock)앞서 synchronized를 사용할 때 멀티 서버 환경에서의 동시성 제어 한계를 해결하기 위해서 나온 방법이 명시적 락이다. 애플리케이션 코드나 데이터베이스 쿼리에서 명확하게 락을 요청하여 특정 리소스에 대한 접근을 제어하는 방식이다.아래는 대표적인 명시적 락의 종류이다. 하나씩 살펴보자낙관적 락(Optimistic Lock)비관적 락(Pessimistic Lock)네임드 락(Named Lock)낙관적 락(Optimistic Lock)낙관적 락은 어플리케이션 레벨에서 동시성을 제어하는 방식으로 충돌이 발생할 것이라고 '낙관적'으로 가정하고, 실제로 충돌이 발생했을 때만 대응하는 방법이다. 데이터베이스에 대한 변경이 드물게 발생하고, 충돌 가능성이 낮은 환경에서 유용한..

개발/spring boot 2025.02.12

JPA

JPA란?JPA는 Java Persistence API의 약자로, 자바 진영의 ORM(Object Relational Mapping) 기술 표준입니다. 간단히 말해, 애플리케이션의 객체와 데이터베이스 사이에서 매핑 작업을 담당하여 개발자가 보다 객체지향적으로 데이터를 다룰 수 있도록 돕는 기술이다.ORM이란?Object Relational Mapping은 객체와 관계형 데이터베이스를 매핑하며 패러다임 불일치를 해결해주는 기술패러다임 불일치란?객체지향 프로그래밍은 상속, 다형성, 캡슐화 같은 개념에 중점을 두지만, 관계형 데이터베이스는 데이터 중심적이며 이러한 개념이 존재하지 않는다. 객체지향적인 부분과 데이터 중심에서의 차이를 '패러다임 불일치'라고 한다.  JPA는 자바 진영의 ORM API 표준 명세..

개발/JPA 2024.11.22

[백준] 1038 감소하는 수

https://www.acmicpc.net/problem/1038 풀이찾고자 하는 값은 N 번째 감소하는 수를 찾아내면 된다. N번째 감소하는 수를 찾는 법은 굉장히 간단하다. 1~9까지 각 숫자로 시작하는 경우에서 나올 수 있는 값들을 찾으면 된다. 예시를 들어보면 가장 큰 자릿수가 2라고 했을 때  2, 20, 21, 210 이런 값들을 구해 나가면 된다.  해당 값들은 재귀를 통해서 찾아낼 수 있다.  % 10을 하는 이유는 해당 값의 1의 자리 수 다음으로 올 수 있는 값의 범위를 알아야 하기 때문이다. 예시로 num = 543일 경우 1의 자리 3 다음으로 올 수 있는 경우는 0,1,2재귀(int num) { for(int i = 0; i  전체 코드import java.io.BufferedRe..

개발/PS 2024.11.02

[백준] 6236 용돈관리

https://www.acmicpc.net/problem/6236 6236번: 용돈 관리현우는 용돈을 효율적으로 활용하기 위해 계획을 짜기로 하였다. 현우는 앞으로 N일 동안 자신이 사용할 금액을 계산하였고, 돈을 펑펑 쓰지 않기 위해 정확히 M번만 통장에서 돈을 빼서 쓰기로www.acmicpc.net문제현우는 용돈을 효율적으로 활용하기 위해 계획을 짜기로 하였다. 현우는 앞으로 N일 동안 자신이 사용할 금액을 계산하였고, 돈을 펑펑 쓰지 않기 위해 정확히 M번만 통장에서 돈을 빼서 쓰기로 하였다. 현우는 통장에서 K원을 인출하며, 통장에서 뺀 돈으로 하루를 보낼 수 있으면 그대로 사용하고, 모자라게 되면 남은 금액은 통장에 집어넣고 다시 K원을 인출한다. 다만 현우는 M이라는 숫자를 좋아하기 때문에, ..

개발/PS 2024.02.16

[JAVA]JVM

JVM과 자바 어플리케이션 JVM은 자바 프로그램을 실행하기 위한 소프트웨어이다. 다시 말해 결국 JVM도 일종의 프로그램이다. 그렇기 때문에 자바 어플리케이션을 실행 시키면 우선 JVM이 OS로부터 메모리를 할당을 받는다. 이후 .java 파일의 소스 코드를 컴파일 하여 나오는 바이트 코드를 해석하고 실행하는 역할을 한다. public class Main { public static void main(String[] args) { Audio audio = new Audio(); } } class Audio { final static String color = "WHITE"; int volume; void volumeUp() { this.volume += 1; } void volumeDown() { th..

개발/java 2023.07.06

[JAVA]String

1.시작하기 전 동일성과 동등성 동일성은 비교하는 두 객체가 완전히 같은 것을 의미한다. 다시 말해 두 객체는 하나의 객체로 봐도 무방하다라는 뜻이며 해당 두 객체의 주소값은 같은 주소값을 가리킨다. 동등성은 두 객체가 가지고 있는 값은 같지만 서로 다른 객체라는 것을 의미한다. 쉽게 말하면 주소값은 다르지만 두 객체가 가지고 있는 값은 같다라고 볼 수 있다. 자바에서는 동일성을 확인하기 위해서는 == 을 사용하고 동등성을 확인하기 위해서는 equals 메소드를 사용한다. equals 메소드는 모든 객체들의 부모 객체인 Object 객체에서 구현하고 있으며 해당 메소드의 구현을 보면 == 을 사용하여 결과를 return 한다. 따라서 해당 메소드를 오버라이딩 하여 재정의 하지 않고 쓴다면 결국 동일성을 ..

개발/java 2023.07.04

[프로그래머스]프로세스(java)

https://school.programmers.co.kr/learn/courses/30/lessons/42587 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 대략 35분 정도 걸린거 같다^^... public int solution(int[] priorities, int location) { int answer = 0; //우선순위 큐 Queue prio = new LinkedList(); //위치 즉 location 큐 Queue idx = new LinkedList(); //우선순위 큐는 그대로 넣고, location은 순서대로 초기화 for (i..

개발/PS 2023.06.30

[프로그래머스]크레인 인형뽑기 게임(java)

https://school.programmers.co.kr/learn/courses/30/lessons/64061 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 스택을 활용한 문제이다. 참고로 다른 사람의 풀이 중에서는 List를 이용해서 푸신 분들도 있다. public static int solution(int[][] board, int[] moves) { int answer = 0; Stack bucket = new Stack(); //peek 시에 최초에는 아무것도 없기 때문에 0을 넣어줌 bucket.push(0); for (int move : m..

개발/PS 2023.06.29

[백준]괄호(java)

https://www.acmicpc.net/problem/9012 9012번: 괄호 괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 www.acmicpc.net 이 문제는 스택을 활용한 가아아아아아장 대표적인 문제다. 코드에 주석으로 각 라인이 어떤 것을 의미하는지 달아놨다, public static String solution(String str) { String result = "YES"; //스택 선언 Stack stack = new Stack(); for (char x : str.toCharArray()) { //해당..

개발/PS 2023.06.29