인프런 커뮤니티 질문&답변

Jinyoung Choi님의 프로필 이미지
Jinyoung Choi

작성한 질문수

이펙티브 자바 완벽 공략 2부

강의 소개

아이템19 - 구체 클래스가 표준 인터페이스를 구현하지 않았는데 상속을 금지하면 사용하기에 상당히 불편해진다.

해결된 질문

작성

·

346

·

수정됨

1

안녕하세요 강사님! 이펙티브 자바 강의 재밌게 수강하고 있습니다. 항상 감사드립니다. 책의 내용 중 하나가 도저히 이해가 되지 않아 질문 드립니다!

[아이템19]
"구체 클래스가 표준 인터페이스를 구현하지 않았는데 상속을 금지하면 사용하기에 상당히 불편해진다. 이런 클래스라도 상속을 꼭 허용해야겠다면 합당한 방법이 있다."
에서 "사용하기에 상당히 불편해진다." 가 무얼 뜻하는지 잘 모르겠습니다. 그리고 상속을 금지했는데, 허용한다? 라는 말도 잘 이해가 가지 않습니다!

제가 이해하기로는
1. "구체 클래스가 표준 인터페이스를 구현하지 않았는데 상속을 금지하면 사용하기에 상당히 불편해진다. :
표준 인터페이스를 구현하지 않은 클래스는 내부 동작을 예측하기가 쉽지 않다. 또한 확장이나 변경이 제한적이다. 상속을 금지하게되면 더 제한적이게 된다.
2. "이런 클래스라도 상속을 꼭 허용해야겠다면 합당한 방법이 있다." :
위와 같이 제한적인 불편함이 싫다면 상속을 허용하고 내부메서드에서 자기의 재정의 가능 메서드를 호출하는 코드를 제거하는데, 그 중 하나의 방법이 'private 도우미 메서드' 방법을 사용하라.

라는 뜻일까요?
맞다면 아래와 같은 상황일까요?

1. 이전 릴리스에서는 표준 인터페이스를 구현하지 않고 상속도 금지한 구체클래스였다.
2. 다음 릴리스때 이 구체클래스를 확장해야겠다고 판단했고, 상속을 허용하기로 했다.

답변 2

1

백기선님의 프로필 이미지
백기선
지식공유자

네 정리하신 내용이 맞습니다. 저도 그렇게 이해했어요. 인터페이스를 구현하지 않았는데, 상속까지 막혀있다면 해당 클래스를 재사용해서 무언가 확장하거나 변경하는게 어려워 지겠죠. OCP (확장에 열려있고, 변경에 닫혀있는 원칙)을 준수하는 이상적인 클래스를 만드는 방법에 대한 설명으로 이해할 수 있습니다.

Jinyoung Choi님의 프로필 이미지
Jinyoung Choi
질문자

감사합니다! :)

0

안녕하세요, 인프런 AI 인턴이에요. 강의를 재밌게 수강하고 계셔서 다행입니다. “구체 클래스가 표준 인터페이스를 구현하지 않았는데 상속을 금지하면 사용하기에 상당히 불편해진다”는 문장은 구체 클래스가 특정 인터페이스를 구현하지 않았을 때, 이 클래스를 상속받아 사용하기가 불편해진다는 의미입니다. 구체 클래스가 표준 인터페이스를 구현하지 않았을 경우, 이 클래스를 사용하는 쪽에서는 내부 동작을 예측하기가 어렵고, 확장이나 변경이 제한적일 수 있기 때문에 사용하기가 불편할 수 있습니다.

또한 “이런 클래스라도 상속을 꼭 허용해야겠다면 합당한 방법이 있다”는 문장은 구체 클래스가 표준 인터페이스를 구현하지 않았을 때, 상속을 할 수 없는 경우 사용자가 편리하게 사용할 수 있도록 상속을 허용하는 방법이 있다는 의미입니다. 자세한 내용은 책의 내용을 참고하시면 좋을 것 같습니다. 여기서는 상세한 방법에 대해 설명드리기 어렵습니다.

감사합니다! 더 궁금한 점이 있다면 언제든지 물어보세요.

Jinyoung Choi님의 프로필 이미지
Jinyoung Choi

작성한 질문수

질문하기