공통적으로 발생하는 문제에 대해서 재사용 가능한 해결책을 의미한다.
다른 상황에 맞게 사용될 수 있는 문제를 해결하는데 사용되는 템플릿임
디자인 패턴을 학습하면 확장성이 높고 유연한 개발이 가능해진다.
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 개발자 이야기- 디자인패턴이란?