공통 코드를 추상 클래스로 올리라는 것의 해석
511
投稿した質問数 1
첫 번째 질문은
'섹션 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
안녕하세요. josephdev123님
우선 코드가 올바르게 작성되었습니다.
추상 클래스를 사용하면 인터페이스의 일부 장점을 활용하지 못할 수도 있습니다. 하지만 이 경우에는 인터페이스를 완전히 대체하는 것이 아니라 인터페이스와 함께 사용하고 있습니다. AbstractDecorator 추상 클래스는 Component 인터페이스를 구현하고 있기 때문에, 인터페이스의 장점을 계속 활용할 수 있습니다.
추상 클래스와 인터페이스를 함께 사용하면, 인터페이스의 장점과 추상 클래스의 장점을 동시에 활용할 수 있습니다. 인터페이스를 통해 다형성을 활용할 수 있고, 추상 클래스를 통해 중복 코드를 줄일 수 있습니다. 따라서 이 경우 의도한대로 설계한 것이 맞습니다.
감사합니다.
어드바이스 순서 디폴트 기준이 궁금합니다.
0
52
1
AspectV1 예제를 @Configuration 수동 등록으로도 가능한가요?
0
78
2
구체 클래스를 상속받아 확장한 형태도 클래스패턴/데코레이터 패턴이라고 칭하나요?
0
52
1
TraceTemplate 을 미리 빈으로 등록해서 사용할때 이렇게 설정하는게 맞는건가요?
0
53
1
Decorator 에서 추상메서드로 뺄때 질문 있습니다.
0
56
1
대상 클래스에 기본 생성자가 없을 때
0
74
1
스프링 부트 버전 4.0 aop 의존성 명칭 변경
1
350
2
final 키워드 사용 관련 질문
0
76
1
안녕하세요
0
64
1
ThradLocal 실무 사례
0
97
2
실무에서의 동시성 문제
0
62
1
로그 등 부가 기능에 대한 테스트코드
0
50
1
ProceedingJoinPoint와 MethodInvocation에 대하여
0
67
1
실무 멀티스레딩에 대한 궁금증
0
69
1
안녕하세요 질문있습니다
0
44
1
AspectV3 aop 실행 순서 문의 드립니다
0
38
1
MDC vs AOP 중에 고민중입니다.
0
74
1
순환참조
0
158
2
this를 단독으로 사용할때랑 파라미터 바인딩 할때 차이
0
77
1
빈 후처리에 등록 질문 있습니다.
0
75
1
AppConfig 설정하는 설명중에 이해가 안되는게 있습니다.
0
88
1
ThreadLocal을 지역변수로 선언하면 remove가 필요할까요?
0
117
2
@Aspect 어노테이션으로 생성된 Advisor의 Bean 저장 여부
0
67
1
ThreadLocal 사용시 부작용이 있을수 있을까요? (ThreadLocal.remove()를 잘한다고 해도..)
0
73
2

