ExecutorService와 ForkJoinPool는 Java에서 멀티 스레드를 관리하는 데 사용되는 두 가지 주요 클래스로 각기 다른 목적과 특성을 가지고 있습니다. 아래에서 두 클래스의 용도를 설명하겠습니다.ExecutorService멀티 쓰레드 작업을 관리하고 실행하는 인터페이스Executor를 상속하여 작업을 실행할 책임까지 담당하고 주로 스레드 풀에서 작업을 처리TheadPoolExecutor가 대표적인 구현체로 이 인터페이스는 여러 가지 기능을 통해 멀티스레드 작업을 효율적으로 처리작업 후 shutdown 호출되기 전까지 계속해서 다음 작업을 대기하기 때문에 반드시 shutdown을 호출비동기 작업 기능submit: Runnable이나 Callable 작업을 제출하고 작업이 완료된 후 Fut..

ConcurrentLinkedQueue와 LinkedBlockingQueue는 모두 큐(Queue) 자료구조로, 멀티스레드 환경에서 사용되는 안전한 큐 구현체입니다. 두 클래스는 각각의 특징에 따라 서로 다른 사용 사례에 적합합니다. 아래에서 각각에 대해 설명드리겠습니다.ConcurrentLinkedQueueNon-blocking Queue, Lock-free, CAS(Compare and Swap) 방식 동작하여 여러 스레드가 동시에 큐에 접근 가능큐에 꺼낼 원소가 없다면 즉시 리턴하여 다른 일을 수행생산자- 소비자 패턴에서 소비자가 많고 생산자가 하나인 경우 적합CAS(Compare and Swap)Non-blocking 알고리즘에서 주로 사용되는 원자적 연산으로 멀티 스레드 환경에서 동시성 문제를 ..

과거 레거시 시스템을 리팩터링 할 때, 문자열 변경 작업이 빈번하게 발생하면서 성능 문제가 발생했던 적이 있습니다. 당시에는 String 클래스가 사용되고 있었는데, 이 클래스는 불변 객체이기 때문에 문자열이 변경될 때마다 새로운 객체를 생성하는 특성으로 인해 메모리 사용량이 증가하고 처리 속도가 느려지는 문제가 있었습니다. 이를 해결하기 위해 StringBuffer 클래스를 도입하여 기존 객체를 수정하는 방식으로 작업을 처리했고, 이를 통해 성능 문제를 효과적으로 해결할 수 있었습니다. 당시에는 속도 개선이라는 결과에만 초점을 맞췄지만, 지금은 그 원리와 동작 방식에 대해 더 깊이 이해하고자 합니다.문자열 클래스의 특성과 동작 원리1. String불변 객체로, 문자열 변경 시 새로운 객체가 생성되어 기..
우선순위 큐우선순위 큐 (Priority Queue)는 요소들이 우선순위에 따라 처리되는 자료구조입니다. 기본적으로 큐와 비슷하게 동작하지만, 큐는 FIFO 방식으로 작동하는 반면, 우선순위 큐는 요소들이 삽입된 순서와 상관없이 우선순위가 높은 요소가 먼저 처리됩니다. Java에서 우선순위 큐는 PriorityQueue 클래스를 통해 제공됩니다. 이 클래스는 내부적으로 최소 힙을 사용하여 요소들을 정렬하며, 기본적으로 요소들의 자연 순서(예: 숫자는 오름차순, 문자열은 알파벳 순)로 정렬됩니다. 커스텀 우선순위가 필요하면 Comparator를 사용하여 정의할 수 있습니다.우선순위 큐 특징1. 요소를 삽입할 때 우선순위에 따라 자동 정렬됩니다.2. 기본적으로 최솟값을 먼저 반환합니다.3. O(1)로 우선순..
탐욕법은 문제를 해결할 때 현재 단계에서 가장 최선의 선택을 반복적으로 수행하여, 전체 최적해(Optimal solution)에 도달하려고 하는 알고리즘입니다.탐욕법의 핵심 개념1. 탐욕 선택 속성현재 단계에서 가장 최선의 선택을 함으로써 최적해를 구할 수 있는 속성.탐욕적 선택이 전체 문제에 영향을 미치지 않고 독립적이어야 함.2. 최적 부분 구조문제의 최적해가 부문 문제의 최적해로 구성되어야 함.동적 계획법(DP)에서도 사용되는 개념으로, 탐욕범의 필수 조건 중 하나.탐욕법의 장단점장점단순성과 효율성: 구현이 쉽고, 문제를 빠르게 해결할 수 있음.속도: 동적 계획법이나 완전 탐색 보다 일반적으로 더 빠름.단점최적해 보장 불가: 모든 경우에서 최적해를 보장하지 않음.문제에 대한 제약 조건 필요: 탐욕 ..

https://school.programmers.co.kr/learn/courses/30/lessons/154539 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr처음 문제를 봤을 때 중첩된 반복문으로 해결할 수 있을 거라 생각함. 코드 해설첫 번째 반복문에서 각 요소를 순회하고, 두 번째 반복문에서 해당 요소의 뒤에 있는 값들과 비교하여 첫 번째로 큰 값을 찾습니다. "다음 큰 수"를 찾을 때마다 두 번째 반복문을 종료하고, 결과를 저장합니다. 작성했던 코드class Solution { public int[] solution(int[] numbers) { int[] answer = n..
최대공약수두 개 이상의 자연수의 공통된 약수 중 가장 큰 공약수를 바로 최대공약수라고 한다.예를 들면 12와 8의 최대공약수12의 약수: 1, 2, 3, 4, 6, 128의 약수: 1, 2, 4, 8두 수의 최대공약수는 4이다. 숫자가 3개 이상인 경우1. 모든 수를 동시에 반드시 나눌 수 있는 수로 나눈다.2. 더 이상 동시에 나눌 수 없으면 끝.3. 왼쪽 공약수를 모두 곱한다.최소공배수두 개 이상의 자연수의 공통된 배수 중 가장 작은 값을 의미한다.예를 들면 12와 8의 최소공배수12의 배수: 12, 24, 36, 48,...8의 배수: 8, 16, 24, 32, 40, 48,...두 수의 공통된 배수는 24, 48,...두 수의 최소공배수는 24이다. 숫자가 3개 이상인 경우1. 서로소가 아닌 수가..
- Total
- Today
- Yesterday
- Built-in Functions
- Upper
- index
- Lower
- Python
- function
- counter
- operators
- bool
- combinations
- Lambda
- If
- isalpha
- permutations
- find
- zip
- Method
- isdigit
- for
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |