inflearn logo
강의

Course

Instructor

Spring Core Principles - Advanced

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

511

josephdev123

1 asked

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;
    }
}

 

 

두 번째 질문은

추상클래스를 사용한다면 인터페이스의 장점을 활용하지 못할 것 같은데 이걸 의도하신 게 맞는지 궁금합니다.

 

감사합니다. 강의 잘 듣고 있습니다.

spring 디자인-패턴 추상클래스 중복코드

Answer 2

1

yh

안녕하세요. josephdev123님

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

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

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

감사합니다.

0

wsbyun

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

어드바이스 순서 디폴트 기준이 궁금합니다.

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