DEV ℧ Developer Diary

[DesignPattern] 프로토타입 (Prototype)

프로토타입 (Prototype)

원영이 되는(prototypical) 인스턴스를 사용하여 생성할 객체의 종류를 명시하고, 이렇게 만든 견본을 복사해서 새로운 객체를 생성합니다.

활용 방안

프로토타입 패턴은 생성, 복합, 표현 방법에 독립적인 제품을 만들고자 할 때 쓴다.

  • 인스턴스화할 클래스를 런타임에 지정할 때
  • 제품 클래스 계통과 병렬적으로 만드는 팩토리...

[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...