디자인패턴 5

GoF의 디자인 패턴. 생성패턴 5. 싱글턴

- 지난 글에 이어 생성패턴을 다뤄본다. 추상 팩토리 (Abstract Factory) 빌더 (Builder) 팩토리 메서드 (Factory Methods) 프로토타입 (Prototype) 싱글턴 (Singleton) 싱글턴 (Singleton) - 의도 단 한 개의 클래스 인스턴스를 갖도록 보장하고, 이에 대한 전역적인 접근점을 제공한다. - 동기 JDBC connection 관리하는 connection pool 등은 객체가 여러 개 생성되면 설정 값이 변경될 위험이 있다. 클래스 자신이 자기의 유일한 인스턴스로 접근하는 방법을 자체적으로 관리하도록 한다. - 활용성 클래스의 인스턴스가 단 하나임을 보장하고, 잘 정의된 접근점으로 모든 사용자가 접근할 수 있도록 해야 할 때 유일한 인스턴스가 서브클래싱..

GoF의 디자인 패턴. 생성패턴 4. 프로토타입

- 지난 글에 이어 생성패턴을 다뤄본다. 추상 팩토리 (Abstract Factory) 빌더 (Builder) 팩토리 메서드 (Factory Methods) 프로토타입 (Prototype) 싱글턴 (Singleton) 프로토타입 (Prototype) - 의도 생성할 객체의 원형(prototpye)을 만들고, 이렇게 만든 견본을 복사하여 새로운 객체 생성 - 동기 원형이 되는 클래스를 생성하고, 해당 클래스의 객체를 복제하여 새로운 객체를 만들어나가는 패턴이다. 클래스를 동일하게 유지하면서 내부의 값이나 구조를 바꿔가며 새로운 객체를 만들 수 있기 때문에 클래스의 개수를 줄일 수 있다. - 활용성 제품의 생성, 복합, 표현 방법에 독립적인 제품을 만들고자 할 때 쓰인다. 인스턴스화할 클래스를 런타임에 지정..

GoF의 디자인 패턴. 생성패턴 3. 팩토리 메서드

- 지난 글에 이어 생성패턴을 다뤄본다. 추상 팩토리 (Abstract Factory) 빌더 (Builder) 팩토리 메서드 (Factory Methods) 프로토타입 (Prototype) 싱글턴 (Singleton) 팩토리 메서드 (Factory Methods) - 의도 객체를 생성하기 위해 인터페이스를 정의하지만, 어떤 클래스의 인스턴스를 생성하지에 대한 결정은 서브클래스가 내리도록 한다. - 동기 객체를 "제조하는" 방법을 아는 연산을 분리한다. - 활용성 어떤 클래스가 자신이 생성해야 하는 객체의 클래스를 예측할 수 없을 때 생성할 객체를 기술하는 책임을 자신의 서브클래스가 지정했으면 할 때 객체 생성의 책임을 몇 개의 보조 서브클래스 중 하나에 위임, 어떤 서브클래스가 위임자인지에 대한 정보를 ..

GoF의 디자인 패턴. 생성패턴 2.빌더

- 지난 글에 이어 생성패턴을 다뤄본다. 추상 팩토리 (Abstract Factory) 빌더 (Builder) 팩토리 메서드 (Factory Methods) 프로토타입 (Prototype) 싱글턴 (Singleton) 빌더 (Builder) - 의도 복잡한 객체를 생성하는 클래스와 표현하는 클래스를 분리하여, 서로 다른 표현이라도 이를 생성할 수 있는 동일한 절차를 제공한다. - 동기 생성과 표현의 분리를 통한 책임 분리 - 활용성 복합 객체의 생성 알고리즘이 이른 합성하는 요소 객체들이 무엇인지 이들의 조립 방법에 독립적일 때 합성할 객체들의 표현이 서로 다르더라도 생성 절차에서 이를 지원해야 할 때 - 구조 - 참여자 Builder: Product 객체의 일부 요소를 생성하기 위한 추상 인터페이스 정..

GoF의 디자인 패턴. 서론

- 디자인 패턴 특정한 전후 관계에서 일반적 설계 문제를 해결하기 위해 상호교류하는 수정 가능한 객체와 클래스들에 대한 설명 "설계를 더 융통성있고, 모듈화하며, 재사용 가능하고, 이해하기 쉬운 것으로 만들 수 있는 통찰력" 이런 객체지향의 장점을 극대화 하는 것이 디자인 패턴이다. 각 디자인 패턴은 기존 환경 내에서 반복적으로 일어나는 문제들을 설명한 후, 그 문제들에 대한 해법의 핵심을 설명한다. 똑같은 방법으로 두 번 하지 않고, 이 해법을 100만 번 이상 재사용할 수 있다. - GoF(Gang of Fout) 에리히 감마(Erich Gamma), 리차드 헬름(Richard Helm), 랄프 존슨(Ralph Johnson), 존 블리시디스(John Vissides) 소프트웨어 개발 영역에서 디자인..