반응형

2025/04 4

[디자인 패턴의 아름다움] ch 8.1 ~ 8.7

p. 3888.1.6절에서 guava event bus를 사용하여 UserController 클래스를 다시 구현했다 하지만 UserController 클래스는 여전히 스레드 풀을 생성하고 옵서버를 등록하는 등 옵서버 패턴과 관련된 비지니스와 관련 없는 코드가 많이 남아 있다. 이 UserController 클래스를 어떻게 더 개선할 수 있을지 생각해보자. EventBusConfigurator 등의 모듈에서 옵서버를 등록한다.EventDispatcher 같은 추상 인터페이스를 정의하고 GuavaEventDispatcher 구현체를 실제 UserController 에서 사용하도록 한다. p. 390read() 함수는 데이터를 읽는 전 과정을 정의하는 템플릿 메서드로, 하위 클래스별로 정의된 추상 메서드를 ..

독서 2025.04.27

[디자인 패턴의 아름다움] ch 7.5 ~ ch 7.7

p. 348어댑터 패턴과 퍼사드 패턴의 공통점은 설계가 좋지 않은 인터페이스를, 사용하기 용이한 인터페이스로 만든다는 점이다. 내가 이해하기로 퍼사드 패턴은 여러 서브시스템을 묶어 클라이언트에 노출할 단일, 간결한 인터페이스를 제공한다.그래서 어댑터 패턴과는 다르게 좋지 않은 설계에만 사용하는 패턴은 아닌 것으로 보인다.퍼사드는 단순히 부실한 설계를 감추는 꼼수가 아니라, 건전한 계층화와 관심사 분리를 위한 패턴이라고 생각한다. p. 348복합체 패턴은 주로 트리 구조의 데이터를 처리하는 데 사용된다. Q. 실제 개발을 하면서 트리 구조의 자료 구조를 생성하고 복합체 패턴을 활용해보신 적이 있는지? 회계 시스템에 사용해본다면..?계정과목 계층 구조계정과목 (Asset, Liability, Equity ..

독서 2025.04.20

[디자인 패턴의 아름다움] ch 7.1 ~ ch 7.4

정리구조 디자인 패턴 : 특정 응용 프로그램 시나리오의 문제를 해결하는 데 사용되는 클래스나 객체의 고전적인 구조 1. 프록시 패턴 : 원본 클래스에 연관 없는 기능을 추가할 때 사용2. 데커레이터 패턴 : 원본 클래스와 관련이 있거나 향상된 기능을 추가할 때 사용3. 어댑터 패턴 : 코드 호환성 문제를 해결하는 데 사용4. 브리지 패턴 : 합성의 폭발 문제를 해결하는 데 사용5. 퍼사드 패턴 : 인터페이스 설계에 사용6. 복합체 패턴 : 트리 구조로 나타낼 수 있는 데이터에 사용7. 플라이웨이트 패턴 : 재사용 문제를 해결  찾아본 내용 클래스 로더 (p. 318) 1. 클래스 하나당 클래스 로더는 하나인가? 2. Spring 애플리케이션당 클래스 로더는 몇 개인가? 기본적인 경우 (Spring Boo..

독서 2025.04.13

[디자인 패턴의 아름다움] ch 6. 생성 디자인 패턴

A. 싱글턴, 명령어 재정렬p. 257CPU 명령이 재정렬되면 IdGenerator 클래스의 객체가 new 예약어를 통해 instance 멤버 변수가 지정된 후, 초기화가 이루어지기 전에 다른 스레드에서 이 객체를 사용하려고 할 수 있다. 이 문제를 해결하려면 volatile 키워드를 인스턴스 멤버 변수에 추가하여 명령어 재정렬을 방지하면 된다. 명령어 재정렬과 싱글턴의 안전한 초기화 1. 문제 제기: 멀티스레드 환경에서의 싱글턴 초기화 문제 싱글턴 패턴은 애플리케이션 전체에서 인스턴스를 하나만 유지해야 할 때 사용된다.하지만 멀티스레드 환경에서는 인스턴스를 생성하는 과정에서 예상치 못한 문제가 발생할 수 있다.대표적인 예는 다음과 같다public class Singleton { private st..

독서 2025.04.06
반응형