데코레이터 패턴

이승주·2024년 7월 3일
5

디자인 패턴이란?

공통적으로 발생하는 문제에 대해서 재사용 가능한 해결책을 의미한다.
다른 상황에 맞게 사용될 수 있는 문제를 해결하는데 사용되는 템플릿임

디자인 패턴을 학습하면 확장성이 높고 유연한 개발이 가능해진다.

GOF의 디자인 패턴은 3가지로 나뉜다 생성 패턴, 행위 패턴, 구조 패턴
오늘은 구조 패턴과 그 중 데코레이터 패턴을 알아보려고한다.


구조 패턴이란?

클래스와 객체를 더 큰 구조로 만들 수 있게 구성을 사용하는 패턴을 의미한다.
보통 규모가 있는 객체지향 프로그램을 구현할 경우 사용된다.

  • 독립적으로 개발한 클래스 라이브러리를 마치 하나인 것처럼 사용

  • 여러 인터페이스를 합성하여 서로 다른 인터페이스들의 통일된 추상을 제공

  • 인터페이스나 구현을 복합하는 것이 아니라 객체를 합성하는 방법을 제공


    데코레이터 패턴

    데코페이터 패턴은 뜻 그대로 기능을 마치 장식처럼 계속 추가할 수 있는 패턴이다.
    심지어 실행 중에 동적으로 기능을 변경 또는 확장을 할 수 있는 패턴이다.

    데코레이터 패턴의 핵심은 Composition과 다형성이다.

    Composition(구성)은 상속과 다르다.
    상속은 고정된 특성을 물려받는 것이고, 구성은 필요한 기능을 포함하여 유연하게 조합할 수 있는 방식
    상속: 부모 클래스를 오버라이딩해서 메소드를 재정의
    구성: 부모 클래스를 Private 변수로 가져와서 해당 기능을 사용

    상속과 구성에 자세한 내용은 이곳을 참고

    클래스 다이어그램 예시

    Strings는 문자열을 여러개 가지고 있는 클래스이며 장식 당하는 대상
    Decorator는 String을 장식할 클래스임
    Item 클래스를 통해서 Strings와 Decorator를 사용할 수 있게된다.

    실제 사용 사례

Item을 인터페이스를 통해 클래스를 구현한다면 기본적인 문자열로 이루어진 String 클래스에 Decorator 클래스 기능을 유연하게 확장할 수 있다.

SideDecorator 클래스는 문자열에 쌍따옴표
BoxDecorator 클래스는 문자열에 박스
LineNumberDecorator 클래스는 번호를 각각 추가할 수 있다

기능을 추가하고 싶으면 위와 같이 각 데코레이터 클래스를 추가해주면 된다.

참고 코드

Item 클래스

String 클래스

Decorator 클래스

LineNumberDecorator 클래스

사용 코드


참고 자료

GIS DEVELOPER- GoF의 Design Pattern - 15. Decorator <-- 다른 디자인 패턴에 대한 내용도 동영상으로 잘 정리해둠
Design Pattern : 구조 패턴(Structural Patterns)
SCB 개발자 이야기- 디자인패턴이란?

profile
반복되는 실수를 기록을 통해 줄여가보자!

0개의 댓글

관련 채용 정보