• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

상속과 위임 관계, 강의 내용과 관련해서 궁금한 내용이 있습니다.

22.01.25 20:54 작성 조회수 4.92k

0

안녕하세요.

항상 좋은 답변, 강의 해주셔서 감사합니다.

 

이번에는 상속과 위임 관계에 대해서 여쭤보고 싶은 것이 있어 글을 적게 되었습니다.

 

이번 강의에서는 추상 클래스를 상속 받는 형태로 구현을 했는데, '상속'을 받았기 때문에 부모 클래스의 변경에서 자유로울 수 없다고 하셨습니다. 이 부분까지는 이해가 갑니다! 왜냐하면 부모 클래스에서 변경된 부분이 있다면, 필요하다면 자식 클래스에서 구현을 해줘야 하는 것으로 이해하고 있기 때문입니다.

 

그런데 뒷쪽의 전략 패턴에서도(강의 듣고 왔어요!), Interface를 활용해 구현체를 만드는 형태였습니다. 크게 보면 결합이 약해졌다라고 이해를 할 수도 있겠는데... 마찬가지로 Interface에서 변경점이 있다면, 구현체에서도 변경점이 발생하는 것이 아닌가요? 예를 들어 interface에서 특정 메서드가 추가된다거나, 혹은 삭제된다거나 하면.. 구체에서 오버라이드 하지 않으면 안되는 상황일텐데요...! 

 

영한님께서 말씀하신.. 내용을 제가 머리가 나빠서 정확히 못 받아들이는 것 같은데.. 혹시 조금만 더 풀어서 설명해주실 수 있으실까요?

 

질문의 요지는...

상속 관계에서 부모 클래스가 변하면 자식 클래스에 영향을 준다.

인터페이스 - 구체 관계에서 인터페이스가 변하면 구현체에 영향을 준다.

 

위 두 관계에서 어떻게해서 전략 패턴이 좀 더 상속의 단점을 제거할 수 있다는 말씀이신지, 궁금합니다! 

 

항상 감사합니다.

좋은 하루 되세요! 

답변 1

답변을 작성해보세요.

2

David님의 프로필

David

2022.01.26

안녕하세요. 안상혁님, 공식 서포터즈 David입니다.

.
전략패턴 예제1편의 10:05~21에 말씀하신 부분이 핵심입니다.

 

상속을 사용하는 것은 부모와 자녀 클래스가 강하게 결합되는 것입니다.

상속의 경우 부모의 코드가 바뀌면 자녀 또한 영향을 받습니다. 상속이란 기능이 부모의 코드를 자녀가 그대로 물려받는 것이기 때문입니다.

템플릿 메서드 패턴은 이런 상속을 사용하기 때문에 상속의 특성을 그대로 가지고 있습니다.

추상 클래스 코드가 변경이 발생하면 추상 클래스를 상속하는 클래스는 변경이 발생한 코드를 그대로 물려받습니다. 그렇기 때문에 자녀에 명시하지 않은 부모의 메서드를 사용할 수 있는 것입니다.

 

여기서 차이가 발생합니다.

전략패턴은 전략(변하는 부분) 을 외부로부터 주입받아서 사용합니다.

excute()에서 어떤 변경이 발생하더라도 전략의 구현체들은 해당 변경과 무관합니다.

전략의 구현체들은 전략 인터페이스를 바라보고 있고, 컨텍스트 또한 전략 인터페이스를 바라보고 있기 때문입니다.

 

혹시나 잘 이해가 안 되신다면 상속의 특징을 조금 더 고민해보시면 좋을 것 같습니다.

.
감사합니다.