06장-디자인-패턴의-유형
6.1 패턴
디자인 패턴은 공통 설계 구조의 핵심 요소를 이름 짓고 추상화하여 재사용할 수 있는 객체지향 설계를 만드는 데 유용합니다.
또한 유용한 클래스와 인스턴스를 제공하여 각각의 역할과 협업, 책임의 분배를 실현합니다.
디자인 패턴은 어떤 문제를 해결하느냐에 따라 세가지 유형으로 분류됩니다.
생성 패턴
구조 패턴
행위 패턴
6.2 생성 패턴
주어진 상황에 적합한 객체를 생성하는 방법에 중점을 둡니다.
기본적인 객체 생성 방식은 프로젝트의 복잡성을 증가시킬 수도 있기에, 생성 패턴은 이 과정을 제어하여 문제를 해결하는 것을 목표로 합니다.
팩토리(factory): 인터페이스를 기반으로 여러 파생 클래스를 생성
추상(abstract): 구체적인 내부 구현 없이 여러 클래스가 상속받아 사용하는 인스턴스 생성
프로토타입(prototype): 복사 또는 복제에 사용되는 초기화된 인스턴스
싱글톤(singleton): 전역에서 접근 가능한 하나만의 인스턴스를 가진 클래스
빌더(builder): 객체를 생성하는 내부 구현 없이 여러 클래스가 상속받아 사용하는 인스턴스를 생성
6.3 구조 패턴
객체의 구성과 각 객체 간의 관계를 인식하는 방법에 중점을 둡니다. 시스템의 한 부분이 변경이 되더라도 다른 부분에는 영향이 가지 않도록 하며, 설계 목적에 맞지 않는 부분을 개선하는 데에도 도움이 됩니다.
데코레이터(decorator): 객체에 새로운 프로세스를 동적으로 추가
퍼사드(facade): 전체 시스템의 복잡한 부분을 숨기는 단일 클래스
플라이웨이트(flyweight): 여러 객체에 공통 상태를 공유하는 세분화된 인스턴스
프록시(proxy): 실제 객체를 대신하는 대체 객체
6.4 행위 패턴
시스템 내의 객체 간 커뮤니케이션을 개선하거나 간소화하는 방법에 중점을 둡니다.
커뮤니케이션 패턴을 감지하고 책임을 분배함으로써 커뮤니케이션의 유연성을 높이고, 객체의 행위를 추상화합니다.
이터레이터(iterator): 내부 구조를 모른 채 요소에 순차적으로 접근
중재자(mediator): 클래스끼리 서로 직접적으로 참조하지 않도록 중간에 간소화된 연결고리를 정리
관찰자(observer): 클래스간의 일관성을 보장하기 위해 여러 클래스에 변경사항을 알리는 방법
방문자(visitor): 클래스를 변경하지 않고도 새로운 작업을 추가하는 방법