23.04.23 22:07 작성
·
409
2
첫 번째 질문은
'섹션 4'에 '데코레이터 패턴 - 예제 코드3' 편에서
김영한님이
private Component component;
TimeDecorator(Component component) {
this.component = component;
}
를 드래그하며 MessageDecorator에서와의 중복 코드이기 때문에 추상 클래스를 만들어서 올릴 수 있다고 하셨는데
추상 클래스를 아래와 같이 만들어주고
@Getter
@Setter
public abstract class AbstractDecorator implements Component {
private Component component;
AbstractDecorator(Component component) {
this.component = component;
}
}
MessageDecorator를 이렇게 수정해주면 되는걸까요?
@Slf4j
public class MessageDecorator extends AbstractDecorator{
public MessageDecorator(Component component) {
super(component);
}
@Override
public String operation() {
log.info("MessageDecorator 실행");
String result = super.getComponent().operation();
String decoResult = "**" + result + "**";
log.info("MessageDecorator 꾸미기 적용 전={}, 적용 후={}",result, decoResult);
return decoResult;
}
}
두 번째 질문은
추상클래스를 사용한다면 인터페이스의 장점을 활용하지 못할 것 같은데 이걸 의도하신 게 맞는지 궁금합니다.
감사합니다. 강의 잘 듣고 있습니다.
답변 2
1
2023. 04. 26. 22:37
안녕하세요. josephdev123님
우선 코드가 올바르게 작성되었습니다.
추상 클래스를 사용하면 인터페이스의 일부 장점을 활용하지 못할 수도 있습니다. 하지만 이 경우에는 인터페이스를 완전히 대체하는 것이 아니라 인터페이스와 함께 사용하고 있습니다. AbstractDecorator
추상 클래스는 Component
인터페이스를 구현하고 있기 때문에, 인터페이스의 장점을 계속 활용할 수 있습니다.
추상 클래스와 인터페이스를 함께 사용하면, 인터페이스의 장점과 추상 클래스의 장점을 동시에 활용할 수 있습니다. 인터페이스를 통해 다형성을 활용할 수 있고, 추상 클래스를 통해 중복 코드를 줄일 수 있습니다. 따라서 이 경우 의도한대로 설계한 것이 맞습니다.
감사합니다.
0