디자인 패턴 질문리스트

기술노트

1. 싱글톤 패턴이 멀티스레드 환경에서 가지는 문제점과 해결방안을 서술하시오.

⇒ 멀티스레드에서 싱글톤 패턴이 가지는 문제점으로는 두개 이상의 스레드에서 하나의 객체에 한해서 인스턴스를 얻기 위해 getInstance() 메서드에 접근할 경우 두개 이상의 인스턴스가 생성될 수 있습니다.

이를 해결하기 위해선 총 4가지 방법이 존재합니다.

1. 인스턴스를 미리 생성하는 방법이지만 불필요한 리소스 낭비가 발생합니다. 2. `getInstance()` 메서드를 동기화 하는 방법이지만 일반적으로 성능이 100배 정도 저하됩니다. 3. DCL(Double Check Locking) 기법을 사용하는 방법으로, 현재는 권고되지 않습니다. 4. LazyHolder 기법을 사용하는 것으로 동기화도 필요없으며, 자바 버전도 영향을 받지않는 방법입니다.Singleton 클래스의 getInstance() 메서드에서 LazyHolder.INSTANCE를 참조하는 순간 Class가 로딩되며 초기화가 진행됩니다. Class를 로딩하고 초기화하는 시점은 thread-safe를 보장하기 때문에 volatile이나 synchronized 같은 키워드가 없어도 됩니다.

java
class Singleton {
    private Singleton() {}

    public static Singleton getInstance() {
        return LazyHolder.INSTANCE;
    }

    private static class LazyHolder {
        private static final Singleton INSTANCE = new Singleton();
    }
}

1. 옵저버패턴을 이용할 경우 solid 원칙 중 어느 것을 준수할 수 있나요?

⇒ 개방 폐쇄 원칙과 단일책임 원칙을 가장 준수할 수 있습니다. 옵저버 패턴을 사용함으로서 값의 변화를 직접 지정하여 변경하는 것이 아니기에 기존의 코드에 수정이 일어나지 않으며, 단일 책임원칙또한 객체가 객체만의 정보를 가지고 있고 정보를 최신화하는 메서드만을 포함하기에 OCP와 SRP를 가장 잘 지킬 수 있습니다.

1. 전략 패턴에 대하여 서술해주세요

⇒ 전략 패턴은 알고리즘을 객체 단위로 캡슐화하는 디자인 패턴입니다. 해당 패턴에서 알고리즘은 인터페이스를 통해 정의 및 이용되고 해당 인터페이스를 따르는 클래스를 통해 구현됩니다. 해당 패턴을 통해서 사용자는 알고리즘을 필요에 따라 바꿔서 사용할 수 있게 됩니다. 전략 패턴은 객체지향 설계의 SOLID 원칙 중 개방 폐쇄 원칙(OCP)에 부합한 패턴입니다.

전략 패턴은 가교 패턴과 구조가 비슷하지만 목적에 차이가 있습니다. 가교 패턴이 추상과 구현의 분리를 통한 독립적 개발의 용이성에 중점을 둔다면 전략 패턴은 알고리즘의 캡슐화를 통한 알고리즘 변경의 유연성에 중점을 둡니다.