데코레이터 패턴(Decorator Pattern)이란?
기존의 객체에 새로운 기능을 동적으로 추가할 수 있도록 하는 패턴입니다. 이 패턴은 상속보다 유연한 구조를 제공하며, 객체의 변경 없이 새로운 기능을 추가할 수 있게 한다.
데코레이터 패턴의 핵심 구성요소
1. 컴포넌트(Component): 실제로 기능을 추가하고자 하는 객체를 나타낸다. 데코레이터 패턴에서는 인터페이스나 추상 클래스로 정의된다.
2. 컨크리트 컴포넌트(Concrete Component): Component를 구현한 구체적인 클래스로, 실제로 추가 기능이 필요한 객체이다.
3. 데코레이터(Decorator): 실제로 새로운 기능을 추가하는 역할을 한다. 이는 Component를 상속하며, 내부에 다른 Component를 포함한다. 데코레이터의 서브클래스는 추가적인 기능을 정의하고, 필요에 따라 메서드 호출을 위임할 수 있다.
4. 컨크리트 데코레이터(Concrete Decorator): 실제로 새로운 기능을 추가하는 데코레이터의 구체적인 클래스이다. 이 클래스는 추가적인 기능을 구현하고, 필요에 따라 메서드 호출을 위임한다.
데코레이터 패턴의 특징
1. 유연한 확장: 데코레이터 패턴은 상속보다 유연한 구조를 제공한다. 새로운 기능을 추가하려면 새로운 데코레이터를 만들고 기존 객체에 데코레이터를 추가하기만 하면 된다. 이는 상속을 사용하지 않고도 객체의 동작을 확장할 수 있음을 의미한다.
2. 단일 책임 원칙(SRP) 준수: 각 데코레이터는 특정한 책임을 갖는다. 이로써 객체의 클래스 계층 구조를 피하고, 각 객체는 하나의 책임만 가지도록 할 수 있다. 이는 코드의 유지보수성을 향상시킨다.
3. 클래스의 열림/닫힘 원칙(OCP) 준수: 새로운 기능을 추가하려면 기존 클래스를 수정하지 않고도 가능하다. 클래스는 열려 있지만(기능을 추가할 수 있음), 수정하지 않고도(닫혀 있음) 새로운 기능을 추가할 수 있다.
4. 순서에 무관한 조합: 여러 데코레이터를 조합할 때, 그 순서에 따라 기능이 달라지지 않는다. 각 데코레이터는 독립적으로 동작하며, 순서에 무관하게 조합될 수 있다.
5. 객체 인스턴스마다 다른 조합 가능: 동일한 데코레이터를 사용하여 다양한 조합을 만들 수 있다. 이는 객체 인스턴스마다 필요한 기능을 선택적으로 추가할 수 있게 한다.
6. 기본 컴포넌트와 데코레이터는 동일한 인터페이스를 공유: 기본 컴포넌트와 데코레이터는 동일한 인터페이스를 공유하므로 클라이언트는 실제 객체가 기본 컴포넌트인지 데코레이터인지 구분하지 않고도 사용할 수 있다.
'SOFTWARE DESIGN PATTERN' 카테고리의 다른 글
[SOFTWARE DESIGN PATTERN] 06 커맨드 패턴(Command Pattern) (0) | 2023.11.26 |
---|---|
[SOFTWARE DESIGN PATTERN] 05 싱글턴 패턴(Singleton Pattern) (0) | 2023.11.26 |
[SOFTWARE DESIGN PATTERN] 04 팩토리 패턴(Factory Pattern) (0) | 2023.11.26 |
[SOFTWARE DESIGN PATTERN] 02 옵저버 패턴(Observer Pattern) (0) | 2023.11.26 |
[SOFTWARE DESIGN PATTERN] 01 전략 패턴(Strategy Pattern) (0) | 2023.11.26 |