- 자바 입출력 스트림은 데코레이터 패턴이다.
- 상속보다 유연한 구현 방식
- 데코레이터는 다른 데코레이터나 컴포넌트를 포함해야 한다.
- 지속적인 기능 추가/제거가 용이하다.
예를 들면, 커피라는 컴포넌트가 있고 이 커피를 조금씩 변화시켜줄 수 있는 데코레이터가 그 컴포넌트를 감싸고 있다.
라떼 데코레이터, 모카 데코레이터, 에스프레소 데코레이터 같은 게 있을 수 있다.
일단 데코레이터를 부르면 컴포넌트의 동작을 하고 특정 데코레이터가 가진 동작을 더해주는 개념이다.
public abstract class Coffee {
public abstract void brewing();
}
public class Americano extends Coffee {
@Override
public void brewing() {
System.out.println("americano");
}
}
public class Decorator extends Coffee {
Coffee coffee;
public Decorator(Coffee coffee) {
this.coffee = coffee;
}
@Override
public void brewing() {
coffee.brewing();
}
}
public class Latte extends Decorator {
public Lattee(Coffee coffee) {
super(coffee); // Decorator가 @NoArgsConstructor가 없어서 넣어야 함.
}
public void brewing() {
super.brewing();
System.out.print(" + milk ");
}
}
public class CoffeeTest {
public static void main(String[] args) {
Coffee americano = new Americano();
americano.brewing();
System.out.println();
Coffee latte = new Latte(americano);
latte.brewing();
}
}
// 출력 결과
americano
americano + milk
위와 같은 방식으로 커피라는 모체가 있고 커피에 추가 동작을 더해서 조금 변형된 커피를 만드는 데코레이터를 만들어 사용할 수 있다.
'Backend > JAVA' 카테고리의 다른 글
필터와 인터셉터 (0) | 2024.03.07 |
---|---|
디자인 패턴 (2) | 2024.03.07 |
JAVA의 Thread (0) | 2024.03.05 |
자바의 reduce() (0) | 2024.03.04 |
자바의 비선형 자료구조 (0) | 2024.03.04 |