본문 바로가기
Languages/디자인패턴

[Java] 데코레이터(Decorator) 패턴

by yoon_seon 2023. 6. 11.

Decorator 패턴이란?

데코레이터 패턴이란 주어진 상황 및 용도에 따라 어떤 객체에 결합을 통해 기능을 동적으로 확장할 수 있게 해주는 패턴이다. 

Decorator는 '장식하다' 라는 뜻을 가지고 있다. Decorator 패턴은 객체를 점점 꾸미듯이 확장하는 패턴으로 예를 들어 햄버거를 만들 때 참깨빵을 넣고 순쇠고기를 넣고 소스, 양상추 등을 넣고 하듯 객체를 차례대로 만들도록 작성하도록 하는 패턴으로 이해하면 쉽다.

 

Decorator 패턴 예시

다음과 같은 log를 출력하는 프로그램이 있다.

 

먼저 main 메서드 로직을 보면 다음과 같다.

public static void main(String[] args) {
    new Scaffold(
            new FullBorder(
                    new SideBorder(
                            new FullBorder(
                                    new SideBorder(
                                            new TextWidget("decorator pattern")
                                    )
                            )
                    )
            )
    );
}
  • 하나하나씩 객체를 감싸면서 결과물을 완성한다. 
  • 기존 코드를 수정하지 않고 하나씩 감싸면서 완성할 수 있어서 객체를 유연하게 확장할 수 있다.
  • 코드의 재사용성을 높일 수 있다.
    • 위 코드에서는 (new SideBorder(), new FullBorder()을 재 사용하고 있다.

 

Decorator 패턴 정리

데코레이터 패턴은 객체를 감싸는 형태로 계층 구조를 형성하고, 각 데코레이터가 추가적인 기능을 제공하거나 동작을 수정할 수 있도록 하는 패턴으로 이를 통해 기존 객체의 동작을 유연하게 확장하고, 객체 간의 결합도를 낮추면서재사용성을 높일 수 있다.

데코레이터 패턴은 OCP원칙(개방-폐쇄 원칙)을 따르며, 기존 코드를 수정하지 않고도 새로운 동작을 추가하거나 수정할 수 있으므로 코드의 유지 보수성과 확장성을 향상 시키는 장점을 제공한다. 또한, 객체 간의 조합을 통해 다양한 기능을 구성할 수 있으므로 단일 객체에 비해 더 많은 유연성을 제공한다.

댓글