자바 5

[Spring] 동시성 문제

동시성 문제동일한 하나의 데이터에 여러 스레드가 동시에 접근하여 데이터를 동시에 제어할 때 나타나는 문제로, 하나의 세션이 데이터를 수정 중일 때, 다른 세션에서 수정 전의 데이터를 조회해 로직을 처리하면서 데이터의 정합성이 깨지는 문제 입니다. ex. 재고, 계좌잔액 등 동시성 문제 해결하기Synchronized스레드 동기화를 위해 자바에서 지원하는 기술하나의 공유자원에 동시에 접근하지 못하게 함스레드간 동기화를 시켜 공유되는 데이터가 Thread-safe 하게 함thread-safe ? 멀티 스레드 프로그래밍에서 어떤 함수나 변수, 객체가 여러 스레드로부터 동시에 접근이 이루어져도 프로그램의 실행에 문제가 없는 것public synchronized void decrease(Long id, int am..

Project/Java 2025.04.09

[JAVA] 퀵 정렬 (Quick Sort)

퀵 정렬은 피벗을 기준으로 두개의 부분리스트로 나누어 하나는 피벗보다 작은 값들의 부분리스트, 다른 하나는 피벗보다 큰 값들의 부분리스트로 정렬한 다음, 각 부분리스트에 대해 다시 재귀적으로 수행하여 정렬하는 방법이다. 1. 피벗을 하나 선택한다. 2. 피벗을 기준으로 양쪽에서 피벗보다 큰 값, 혹은 작은 값을 찾는다. 왼쪽에서부터는 피벗보다 큰 값을 찾고, 오른쪽에서 부터는 피벗보다 작은 값을 찾는다. 3. 양 방향에서 찾은 두 원소를 교환한다. 4. 왼쪽에서 탐색하는 위치와 오른쪽에서 탐색하는 위치가 엇갈리지 않을 대 까지 2번으로 돌아가 위 과정을 반복한다. 5. 엇갈린 기점을 기준으로 두 개의 부분리스트로 나누어 1번으로 돌아가 해당 부분리스트의 길이가 1이 아닐 때 까지 1번 과정을 반복한다. ..

Language/Java 2022.12.14

[JAVA] 삽입 정렬 (Insertion Sort)

삽입정렬은 2번째 원소부터 n번째 원소까지 차례로 해당 원소가 위치할 인덱스에 원소를 삽입하는 방식이다. 오름차순으로 정렬할 때, 삽입정렬은 2번째 원소부터 앞의 원소와 비교하는 과정을 통해 적절한 위치에 삽입하고 n번째 원소까지 이 방식을 반복하며 정렬을 진행한다. import java.util.Arrays; class InsertionSort { public static void main(String[] args) { int []arr = {3,7,6,8,4,5,0,2}; int temp; int prev; for (int i = 1; i < arr.length; i++) { //현재 선택된 원소의 값을 임시 변수에 저장 temp = arr[i]; //현재 원소를 기준으로 이전 원소를 탐색하기 위한 ..

Language/Java 2022.12.14

[JAVA] 선택정렬 (Selection Sort)

선택정렬은 한 번의 배열 탐색에서 가장 작은 원소의 위치를 찾고, 그 위치와 배열의 가장 첫 번째 원소부터 차례로 바꿔주는 방식을 사용하는 정렬 방식이다. (오름 차순) 오름차순으로 정렬할 때, 원소를 처음부터 탐색하면서 작은 수를 찾고 그 수를 배열의 첫 번째 원소와 자리를 변경한다. import java.util.Arrays; class SelectionSort { public static void main(String[] args) { int []arr = {3,4,6,8,7,5,0,2}; for(int i = 0; i < arr.length - 1; i++) { //arr.length -1: 마지막 요소는 자연스럽게 정렬됨 //현재 탐색에서 가장 앞의 원소를 초기 값으로 설정 int minInde..

Language/Java 2022.12.14

[JAVA] 거품 정렬 (Bubble Sort)

거품정렬은 두 개의 인접한 원소를 비교하여 정렬하는 방식이다. 정렬 방법 1. 앞에서부터 현재 원소와 바로 다음의 원소를 비교한다. 2. 현재 원소가 다음 원소보다 크면 원소를 교환한다. 3. 다음 원소로 이동하여 해당 원소와 그 다음원소를 비교한다. public class BubbleSort { public static void bubbleSort(int[] arr) { for (int i = 0; i arr[j+1]) { swap(arr, j, j+1); } } } } public static void swap(int[] arr, int src, int ta..

Language/Java 2022.12.09