• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

공통 코드를 추상 클래스로 올리라는 것의 해석

23.04.23 22:07 작성 조회수 275

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

안녕하세요. josephdev123님

우선 코드가 올바르게 작성되었습니다.

추상 클래스를 사용하면 인터페이스의 일부 장점을 활용하지 못할 수도 있습니다. 하지만 이 경우에는 인터페이스를 완전히 대체하는 것이 아니라 인터페이스와 함께 사용하고 있습니다. AbstractDecorator 추상 클래스는 Component 인터페이스를 구현하고 있기 때문에, 인터페이스의 장점을 계속 활용할 수 있습니다.

추상 클래스와 인터페이스를 함께 사용하면, 인터페이스의 장점과 추상 클래스의 장점을 동시에 활용할 수 있습니다. 인터페이스를 통해 다형성을 활용할 수 있고, 추상 클래스를 통해 중복 코드를 줄일 수 있습니다. 따라서 이 경우 의도한대로 설계한 것이 맞습니다.

감사합니다.

0

wsbyun님의 프로필

wsbyun

2023.05.17

proxy-start 프로젝트는 어디서 다운받나요?