분류 전체보기
-
[Java] 생산자-소비자 문제Java 2025. 4. 8. 22:48
1️⃣ 생산자-소비자 문제란?생산자-소비자 문제는 멀티스레드 환경에서 공유 자원을 두고 여러 작업이 협업할 때 발생하는 대표적인 동시성 문제이다.생산자는 데이터를 만들어 큐(버퍼)에 넣고, 소비자는 그 데이터를 꺼내어 처리한다.이 과정에서 발생하는 동시성 문제를 살펴보고, 그것을 해결하는 과정을 알아보자.2️⃣ 동기화 적용 ❌@Slf4jpublic class SharedBuffer { private final int capacity; // 생산자와 소비자가 공유하는 버퍼 private final Queue table = new ArrayDeque(); public SharedBuffer(int capacity) { this.capacity = capacity; } ..
-
[Java] volatile 예약어Java 2025. 2. 18. 22:31
volatile이란?volatile 예약어는 자바의 동시성 환경에서 변수의 가시성 문제를 해결하기 위해 사용되는 예약어이다. volatile의 특징1. 가시성 보장한 스레드가 volatile 변수를 변경하면, 다른 스레드가 즉시 변경된 값을 읽을 수 있다.CPU 캐시를 사용하지 않고, 메인 메모리(RAM)에서 직접 읽고 쓰기 때문이다.2. 원자성 미보장volatile은 읽기/쓰기는 안전하지만, 연산 등과 같은 복합 연산은 원자적으로 동작하지 않는다.예제 코드1. 가시성 문제volatile 없이 실행했을 때 가시성 문제 발생 가능!public class NoVolatileMain { private static boolean flag = false; public static void main(St..
-
[Java] record 예약어Java 2025. 2. 13. 21:51
record 예약어자바 14에서 처음 도입되고, 자바 16에서 정식 기능으로 추가된 예약어로, 불변 데이터 객체(immutable data objects)를 간편하게 선언할 수 있도록 지원하는 기능이다. record의 특징1. 자동으로 필드, 생성자(모든 필드 포함), Getter, equals(), hashCode(), toString() 제공2. record의 필드는 상수 (final)3. 일반적인 POJO 클래스와 비교했을 때 코드가 훨씬 간결함4. Serializable을 구현하여 직렬화 가능5. 상속 불가능 record 사용 예제public record User(String name, int age) {}public class RecordExample { public static void ..
-
[디자인 패턴] 데코레이터 패턴 (Decorator Pattern)Design Patterns 2025. 1. 31. 16:37
✅ 데코레이터 패턴이란?객체의 기능을 동적으로 확장할 수 있는 구조적 디자인 패턴이다.기존 코드 수정 없이 객체의 행동을 변경하거나 새로운 기능을 추가할 때 유용하다.상속 대신 구성(Composition)과 위임(Delegation)을 활용하여 기능을 확장하는 것이 핵심이다.✅ 핵심 개념1️⃣ ComponentComponent: 핵심 인터페이스로서, 기능의 기본 구조를 정의한다.Concrete Component: Component 인터페이스를 구현하는 구체 클래스이다.2️⃣ DecoratorDecorator: Compoent 인터페이스를 구현하는 추상 클래스이다. 실제 기능을 수행하지 않고 기존 Component를 감싼다.Concrete Decorator: Decorator 클래스를 상속하여 특정 기능을..
-
[디자인 패턴] 프록시 패턴 (Proxy Pattern)Design Patterns 2025. 1. 30. 23:34
✅ 프록시 패턴이란?어떤 객체에 대한 접근을 제어하기 위해 대리자 객체를 사용하는 디자인 패턴이다.원본 객체에 직접 접근하는 것이 아니라, 중간에 프록시 객체를 두어 요청을 처리하거나, 변경하는 방식으로 동작한다.대표적인 활용 사례접근 제어성능 향상: 지연 로딩, 캐싱Spring Framework의 AOP(Aspect-Oriented Programming)도 내부적으로 프록시 패턴을 사용하고 있다.✅ 핵심 개념Subject: 클라이언트가 사용하는 인터페이스 또는 추상 클래스RealSubject: 실제 동작을 수행하는 원본 객체Proxy: 원본 객체에 대한 접근을 제어하는 대리 객체. 클라이언트는 이 프록시 객체를 통해 RealSubject에 접근한다.의존 관계: Client → Proxy → RealSu..
-
[디자인 패턴] 템플릿 콜백 패턴 (Template Callback Pattern)Design Patterns 2025. 1. 30. 19:48
✅ 템플릿 콜백 패턴이란?반복적으로 사용되는 로직을 템플릿 메서드로 정의하고, 변경이 필요한 부분을 콜백 함수(람다, 익명 클래스, 인터페이스 구현 등)로 전달하는 패턴이다.즉, 고정된 템플릿(공통 로직)과 유연한 콜백(변경될 로직)을 분리하여 재사용성을 높이는 패턴이다.전략 패턴과 유사하지만, 전략을 메서드 파라미터(콜백)로 받는다는 점에서 차이가 있다.Spring Framework에서 JdbcTemplate, TransactionTemplate 등이 대표적인 예시이다.✅ 핵심 개념템플릿 메서드공통적인 흐름을 담당하는 메서드변동되는 특정 부분을 콜백으로 위임콜백변경이 필요한 부분을 담당익명 클래스, 람다식, 인터페이스 구현체 등 다양한 방식으로 제공 가능✅ 장단점장점코드 재사용성 증가: 반복되는 코드를..
-
[디자인 패턴] 전략 패턴 (Strategy Pattern)Design Patterns 2025. 1. 28. 22:49
✅ 전략 패턴이란?기능을 캡슐화하여 동적으로 기능을 선택할 수 있게 해주는 디자인 패턴이다.비슷한 작업을 수행하는 여러 기능이 있을 때, 이 기능들을 개별 클래스로 캡슐화하고, 실행 시점에 필요한 기능을 선택할 수 있도록 한다.✅ 핵심 개념캡슐화: 각 기능을 별도의 클래스로 분리유연성: 실행 시점에 행위를 선택, 변경 가능구성(Composition): 실행 클래스가 특정 기능을 직접 구현하지 않고, 해당 기능을 다른 클래스에서 위임 받아 실행✅ 구조Context: 클라이언트가 사용하는 객체로 전략(기능)을 실행한다.Strategy: 기능을 정의하는 인터페이스ConcreteStrategy: Strategy를 구현하는 구체적인 기능 클래스✅ 장단점장점개방-폐쇄 원칙(OCP) 준수: 기능을 추가하거나 변경해도..
-
[디자인 패턴] 템플릿 메서드 패턴 (Template Method Pattern)Design Patterns 2025. 1. 27. 20:48
✅ 템플릿 메서드 패턴이란?공통 기능을 상위 클래스에 정의하고 각자 상이한 기능은 하위 클래스가 결정하도록 하는 디자인 패턴템플릿이라는 뼈대를 상위 클래스에서 만들고, 세부적인 구현은 하위 클래스에서 하도록 강제하는 방식 ✅ 핵심 개념템플릿 메서드: 알고리즘의 큰 흐름(프로세스)을 정의하는 메서드이다. 상위 클래스에서 구현되며, 전체 구조를 고정한다.후크 메서드: 상위 클래스에서 구현된 메서드 중, 하위 클래스에서 세부 내용을 변경하거나 확장할 수 있도록 설계된 메서드이다. (기본 구현을 제공함)추상 메서드: 하위 클래스에서 반드시 구현해야 하는, 템플릿 메서드의 핵심 단계를 정의 ✅ 장단점장점코드 재사용성 증가: 알고리즘의 공통 부분(뼈대)을 상위 클래스에 정의하므로 코드의 중복이 줄어듦확장성: 새로운..