토막글
디자인 패턴(Design Pattern)
라큐브
2023. 3. 3. 13:20
생성(Creational)
- 객체 생성 에 관련된 패턴입니다.
- 객체 생성을 보다 효율적이고 확장성 있게 할 수 있는 방법을 고안합니다.
- 최소한의 객체를 생성하는데 초점을 둡니다.
싱글턴(Singleton)
- 실행하는 동안 객체 하나만 생성하고 접근하기 때문에 접근, 수정이 편리합니다.
- 모든 데이터를 전역으로 관리하여 쉽게 접근할 수 있습니다.
팩토리 메서드(Factory Methods)
- 객체를 생성할때 인스턴스(Instance)의 타입(Type)을 서브 클래스가 결정하도록 위임합니다.인터페이스와 동일한 역할
팩토리 메서드(Factory Methods) 구성 요소
- Product : 가장 기본이 되는 타입, 일반화 시킬 수 있는 가장 큰 분류
- Ex. 자동차, 동물, 식물
- ConcreteProduct - Product를 상속 받는 클래스
- Ex. 자동차 > 아반떼, 쏘나타
- Ex. 동물 > 사자, 호랑이, 고양이
- Ex. 식물 > 양배추, 양상추
- Creator - Product를 생성하는 메서드가 있는 클래스
- ConcreteCreator - Creator를 상속 받아 ConcreteProduct를 구현하는 메서드가 있는 클래스
빌더(Builder)
- 생성자의 가독성과 매개변수 수정 용이성 및 인자 불일치 방지를 위한 패턴입니다.
- 빌더(Builder)를 이용하여 생성자를 직관적으로 초기화 할 수 있도록 합니다.
프로토타입(Prototype)
- 매계 변수로 타입을 받아 기존에 생성된 객체를 이용하여 해당 타입의 객체를 생성합니다.
- Clone을 이용하여 객체를 생성합니다.
구조(Structural)
- 객체 합성(타입 일치) 에 관련된 패턴 입니다.
- 클래스나 객체를 조합해 더 큰 구조를 만드는 패턴 입니다.
- 서로 다른 타입을 같은 타입처럼 만들어 사용하는 방법에 초점을 둡니다.
어댑터(Adapter)
- 인터페이스 호환성 문제(Type이 다른) 때문에 같이 쓸 수 없는 클래스들을 연결해서 사용할 수 있게 만드는 것이 목적입니다.
컴포지트(Composite)
- 객체를 묶어 하나의 객체로 이용할 수 있습니다.
- 컴포넌트(Component)들을 합쳐놓은 것을 컴포지트(Composite)라 합니다.
- 각각의 클래스(컴포넌트)들 합쳐놓은 클래스(컴포지트)에서 모든 클래스를 관리할 수 있습니다.
- 컴포지트(Composite)는 클래스 계층(Hierarchy)화라고 할 수 있습니다.
데코레이터(Decorator)
- 내부를 수정하지 않고 기능 확장이 필요할 때 사용합니다.
- 데코레이션(Decoration)
- 피자에 토핑을 첨가(추가)하는 것을 의미합니다.메서드(피자)에 기능(토핑)을 추가하는 것을 의미합니다.
- 데코레이터 카페점
- 커피 원두에 우유를 첨가하고 모카를 첨가하니 모카라떼.
- Ex. 커피 원두 + 우유 + 모카
데코레이터(Decorator) 구성 요소
- 컴포넌트(Component) : 토핑에 의해 기능이 추가될 클래스(꾸며질 대상)
- 데코레이터(Decorator) : 공통 클래스의 구조를 전달하는 역할.
- 토핑으로 컴포넌트를 데코레이션(Decoration) 할 수 있게 만드는 역할.
- 토핑(Topping) : 데코레이터를 이용해 컴포넌트에 추가할 기능이 담긴 클래스
퍼사드(Facade)
- 복잡한 내부 로직을 감추고 클라이언트가 쉽게 접근할 수 있는 인터페이스를 제공합니다.
- 자판기에서 상품을 구매하기 위해 버튼을 누를 뿐 상품이 나오는 과정을 알 필요는 없습니다.
행위(Behavioral)
- 객체 책임 분배(결합 최소화) 에 관련된 패턴입니다.
- 객체 하나로 수행할 수 없는 작업을 여러 객체로 분배하여 결합도 최소화에 초점을 둡니다.
반복(Iterator)
- 컬렉션이나 객체 집합의 내부 구현 방법을 숨기면서 그 안에 있는 모든 원소에 순차적으로 접근할 수 있는 수단을 제공합니다.
반복(Iterator) 구성 요소
- Iterator
- 원소를 접근하고 순회하는 데 필요한 인터페이스(Ex. IEnumerator)를 제공합니다.
- IterableCollection
- Iterator 객체를 생성하는 인터페이스를 정의합니다.
- ConcreteIterator
- Iterator에 정의된 인터페이스를 구현하는 클래스 입니다.
- ConcreteCollection
- 해당 ConcreteIterator의 인스턴스(Instance)를 반환하는 Iterator 생성 인터페이스를 구현합니다.
옵저버(Observer)
- 기준(방송) 클래스 상태가 변하면 옵저버(리마인더)가 바라보고 있는(구독) 클래스에게 알려줍니다.
- 기준(방송) 클래스 객체 상태 변화 시 바라보고 있는(구독) 클래스의 상태도 자동으로 갱신 됩니다.
전략(Strategy)
- 같은 (추상)클래스를 상속하는 클래스 중 일부 클래스에만 필요한 기능이 추가될 때 사용하는 패턴 입니다.
- 같은 추상(상위) 클래스를 상속 받지만 구체적인 행위(동작)가 다를 경우 각각의 행위(동작)를 클래스로 만들어(캡슐화) 구체화 시킵니다.
- 추상(상위) 클래스에서는 상속받는 클래스에 따라 달라지는 메서드 매계 변수를 각각의 행위(동작)를 구체화한 클래스가 상속받는 인터페이스 타입으로 받도록합니다.
- 추상 클래스를 구체화하여 사용할때 클래스(객체)에 따라 달라지는 메서드 인자로 필요한 행위(동작)이 정의된 클래스를 넣어줍니다.
- 전략(Strategy) 패턴 :행동을 정의하고 캡슐화해서 각각의 행동이 추가될 때 유연하고 독립적으로 변경하여 사용할 수 있습니다.
- 클래스(객체)에 따라 코드를 유연하게 작성할 수 있는 것이 전략(Strategy) 패턴 입니다.
템플릿 메서드(Template Method)
- 상위 클래스에서 특정 동작의 템플릿(Template)만 정의해두고, 구체적인 단계의 동작 방법은 하위 클래스에서 재정의합니다.
반응형