데코레이터 패턴(Decorator Pattern)
데코레이터 패턴은 동일한 클래스의 다른 개체의 동작에 영향을 주지 않고 정적 또는 동적으로 개별 개체에 동작을 추가할 수 있는 디자인 패턴입니다.
이 패턴은 비헤이비어가 포함된 특수 래퍼 개체 안에 이러한 개체를 배치하여 개체에 새 동작을 연결하는 것과 관련된 구조적 패턴입니다.
데코레이터 패턴의 핵심 포인트 및 이점
- 데코레이터 패턴을 사용하면 구조를 변경하지 않고 객체에 새로운 기능을 추가할 수 있습니다.
- 런타임에 동작을 동적으로 추가하고 제거할 수 있기 때문에 상속 기반 접근 방식보다 더 유연합니다.
- 데코레이터를 함께 연결하여 복잡하고 복합적인 동작을 제공할 수 있습니다.
- 패턴은 클래스가 확장에는 열려 있지만 수정에는 닫혀 있는 개방-폐쇄 설계 원칙을 따릅니다.
- 패턴을 사용하면 동일한 개체에 다양한 동작 조합을 적용할 수 있으므로 보다 유연하고 적응 가능한 솔루션을 제공합니다
데코레이터 패턴 사용 예시 : Java의 입력/출력 스트림
기본 스트림 클래스(예: InputStream 및 OutputStream)는 바이트 읽기 및 쓰기를 위한 기본 기능을 제공합니다.
반면, 데코레이터 클래스(예: BufferedInputStream 및 DataInputStream)는 각각 버퍼링 및 데이터 형식 지정과 같은 추가 기능을 제공합니다.
개발자는 기본 스트림 주위에 하나 이상의 데코레이터를 래핑하여 기본 스트림의 구조를 변경하지 않고도 스트림에 새로운 동작을 쉽게 추가할 수 있습니다.
InputStream in = new FileInputStream("example.txt"); // base stream
in = new BufferedInputStream(in); // decorator 1: add buffering
in = new DataInputStream(in); // decorator 2: add data formatting
DataInputStream 데코레이터는 스트림에서 기본 데이터 유형을 읽기 위한 추가 기능을 제공하는 반면 BufferedInputStream 데코레이터는 버퍼링을 제공하여 성능을 향상시킵니다.
데코레이터 패턴을 사용하면 기본 스트림의 기능을 변경하지 않고도 이러한 동작을 쉽게 추가할 수 있습니다.
부족한 점이나 잘못 된 점을 알려주시면 시정하겠습니다 :>
728x90
'Computer Science > 디자인패턴' 카테고리의 다른 글
Service (0) | 2023.07.12 |
---|---|
Repository (0) | 2023.07.12 |
생성자 VS 빌더 패턴 (0) | 2023.07.05 |
Builder 패턴 (0) | 2023.07.05 |
단일 책임 원칙(Single Responsibility Principle, SRP) (0) | 2023.05.18 |