DEV ℧ Developer Diary

[DesignPattern] 싱글톤 (Singleton)

싱글톤 (Singleton)

오직 한 개의 클래스 인스턴스만을 갖도록 보장하고, 이에 대한 전역적인 접근점을 제공합니다.

활용 방안

싱글톤은 다음과 같은 상황에 사용할 수 있다.

  • 클래스의 인스턴스가 오직 하나여야 함을 보장하고, 잘 정의된 접근점(accesspoint)으로 모든 사용자가 접근할 수 있도록 해야 할 때
  • 유일한 인스턴스가...

[EffectiveJava] item90 - 직렬화된 인스턴스 대신 직렬화 프록시 사용을 검토하라

이번 장 전반에서 이야기 했듯, Serializable을 구현하기로 결정한 순간 언어의 정상 메커니즘인 생성자 이외의 방법으로 인스턴스를 생성할 수 있게 된다.

이는 버그와 보안 문제가 일어날 가능성이 커진다는 뜻이다. 하지만 이 위험을 직렬화 프록시 패턴(serialization proxy pattern)을 이용하면 크게 줄 일 수 있다.

직렬화 프록시...

[EffectiveJava] item89 - 인스턴스 수를 통제해야 한다면 readResolve보다는 열거 타입을 사용하라

인스턴스 수를 통제하는 경우 대표적인 예시로 싱글톤 패턴을 들 수 있다.

public class Elvis { public static final Elvis INSTANCE = new Elvis(); private Elvis()...

[EffectiveJava] item88 - readObject 메서드는 방어적으로 작성하라

Item50에서는 불변인 날짜 범위 클래스를 만드는데 가변인 Date 필드를 이용했다.

방어적 복사를 사용하는 불변 클래스

public final class Period implements Serializable { private static final long serialVersionUID <span...

[EffectiveJava] item87 - 커스텀 직렬화 형태를 고려해보라

개발 일정에 쫓기는 상황에서는 API 설계에 노력을 집중하고 종종 다음 릴리스에서 제대로 다시 구현하고, 이번 릴리스에서는 그냥 동작만 하도록 만드는 경우가 있다.

직렬화 형태

먼저 고민해보고 괜찮다고 판단될 때만 기본 직렬화 형태를 사용하라. 기본 직렬화 영태는 유연성, 성능, 정확성 측면에서 신중히 고민한 후 합당할...