자바 인터페이스를 사용한 데코레이터 패턴 활용 예제===
데코레이터 패턴은 객체의 기능을 동적으로 확장할 수 있는 디자인 패턴 중 하나입니다. 이 패턴을 활용하면 기존 클래스를 수정하지 않고도 새로운 기능을 추가할 수 있습니다. 자바에서 데코레이터 패턴을 구현할 때는 인터페이스를 사용하는 것이 가장 일반적입니다. 이번 글에서는 자바 인터페이스를 사용한 데코레이터 패턴의 이해와 구현 방법, 그리고 예제를 소개하겠습니다.
자바 인터페이스를 사용한 데코레이터 패턴 이해
데코레이터 패턴은 객체의 기능을 동적으로 확장하는 패턴입니다. 이 패턴을 사용하면 기존 클래스의 수정 없이도 새로운 기능을 추가할 수 있습니다. 데코레이터 패턴을 사용하면 상속을 통해 기능을 확장하는 것보다 유연하게 기능을 추가할 수 있습니다. 또한, 데코레이터 패턴은 객체를 구성하는 방식으로 작동하기 때문에 객체 지향 설계 원칙에 부합합니다.
자바에서 데코레이터 패턴을 구현할 때는 인터페이스를 사용하는 것이 가장 일반적입니다. 데코레이터는 인터페이스를 구현하고, 데코레이트 대상이 되는 객체도 같은 인터페이스를 구현합니다. 이렇게 함으로써 데코레이터는 데코레이트 대상 객체를 감싸는 형태로 구현됩니다.
디자인 패턴을 활용한 데코레이터 패턴 구현 방법
데코레이터 패턴은 인터페이스를 사용하기 때문에 구현 방법은 간단합니다. 우선, 데코레이트 대상이 되는 객체와 데코레이터 인터페이스를 정의합니다. 그리고 데코레이터 인터페이스를 구현한 데코레이터 클래스를 만듭니다. 이때, 데코레이터 클래스는 데코레이트 대상 객체를 감싸는 형태로 구현됩니다. 데코레이터 클래스는 데코레이터 인터페이스를 구현하고, 생성자에서 데코레이트 대상 객체를 받아서 감싸는 형태로 작성합니다.
자바 인터페이스를 활용한 데코레이터 패턴 예제 소개
데코레이터 패턴의 예제로는 커피 주문 시스템이 있습니다. 예를 들어, 기본적인 커피는 아메리카노입니다. 이때, 샷을 추가하거나 시럽을 추가하는 등의 옵션을 선택할 수 있습니다. 이런 경우 데코레이터 패턴을 사용해서 커피 객체를 구성하면 좋습니다.
다음은 커피 객체를 구성하는 예제 코드입니다.
public interface Coffee {
String getDescription();
double cost();
}
public class Americano implements Coffee {
public String getDescription() {
return "아메리카노";
}
public double cost() {
return 2.0;
}
}
public abstract class CoffeeDecorator implements Coffee {
protected Coffee coffee;
public CoffeeDecorator(Coffee coffee) {
this.coffee = coffee;
}
public String getDescription() {
return coffee.getDescription();
}
public double cost() {
return coffee.cost();
}
}
public class ShotDecorator extends CoffeeDecorator {
public ShotDecorator(Coffee coffee) {
super(coffee);
}
public String getDescription() {
return coffee.getDescription() + ", 샷 추가";
}
public double cost() {
return coffee.cost() + 1.0;
}
}
public class SyrupDecorator extends CoffeeDecorator {
public SyrupDecorator(Coffee coffee) {
super(coffee);
}
public String getDescription() {
return coffee.getDescription() + ", 시럽 추가";
}
public double cost() {
return coffee.cost() + 0.5;
}
}
public class CoffeeTest {
public static void main(String[] args) {
Coffee coffee = new Americano();
coffee = new SyrupDecorator(coffee);
coffee = new ShotDecorator(coffee);
System.out.println(coffee.getDescription() + ": " + coffee.cost());
}
}
위 코드는 인터페이스를 사용해서 데코레이터 패턴을 구현한 예제입니다. Americano 클래스는 Coffee 인터페이스를 구현하고 있습니다. ShotDecorator와 SyrupDecorator 클래스는 CoffeeDecorator 클래스를 상속받아서 Coffee 인터페이스를 구현하고 있습니다. CoffeeTest 클래스에서는 데코레이터 패턴을 사용해서 커피 객체를 구성하고 출력합니다.
===OUTRO:===
이번 글에서는 자바 인터페이스를 사용한 데코레이터 패턴의 이해와 구현 방법, 그리고 예제를 소개했습니다. 데코레이터 패턴은 객체의 기능을 동적으로 확장할 수 있는 디자인 패턴 중 하나입니다. 데코레이터 패턴을 사용하면 기존 클래스를 수정하지 않고도 새로운 기능을 추가할 수 있습니다. 자바에서 데코레이터 패턴을 구현할 때는 인터페이스를 사용하는 것이 가장 일반적입니다. 데코레이터 패턴을 활용하면 유연하게 기능을 추가할 수 있으며, 객체 지향 설계 원칙에 부합합니다.