강의

멘토링

로드맵

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

Yeseul Lee님의 프로필 이미지
Yeseul Lee

작성한 질문수

코딩으로 학습하는 GoF의 디자인 패턴

default 기능이 있는 interface와 추상클래스의 차이

작성

·

13

0

interface에 default 메서드를 사용할 수 있음에 따라 추상 클래스와 동일한 용도로 사용될 수 있는 것처럼 보입니다. 업무 중에는 jdk 6 환경까지 컴파일되야 함을 감안하여 코드를 작성하다보니 해당 기능에 대해 아예 생각해본적이 없는데, 팩토리 강의를 듣던 중 default를 통해 interface가 추상 클래스처럼 사용되는걸 보니, jdk 8 이상의 환경, 특히 9에서는 private까지 지원되면 추상 클래스를 완전히 대체할 수 있는 것처럼 보입니다.

default 기능을 제공하는 interface와 추상 클래스에 차이가 있는지, 현장에서 interface의 default 기능이 적극적으로 사용되는지, 추상 클래스는 더이상 필요없는 것인지요.
기존에 해당 기능을 설명하는 글귀만 봤을 때는 interface를 변경할 때 레거시 코드의 수정없이 변경할 수 있는, 편의성을 위한 기능이라고만 이해하고 넘어갔는데, 적극적으로 사용되는 기능인지 궁금하네요

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

Yeseul Lee님께서 궁금해하시는 인터페이스의 default 메서드와 추상 클래스의 차이점에 대해 설명드리겠습니다.

인터페이스의 default 메서드는 JDK 8부터 도입되어 기존의 레거시 코드를 수정하지 않고도 인터페이스에 새로운 메서드를 추가할 수 있는 이점이 있습니다. 이는 메서드 구현의 기본 틀을 제공하지만, 상태(멤버 변수)를 가질 수 없다는 점에서 추상 클래스와는 차이가 있습니다.

추상 클래스는 상태(변수)를 가질 수 있으며, 이를 통해 더 복잡한 객체 상태 관리 및 메서드 구현을 제공할 수 있습니다. 따라서 상태 관리가 필요 없을 경우, 인터페이스에 default 메서드를 사용하는 것이 좋습니다.

또한 JDK 9부터는 인터페이스에 private 메서드를 사용할 수 있게 되면서, 인터페이스의 구현이 더욱 유연하게 되었지만, 추상 클래스만큼의 상태 관리는 여전히 어렵습니다.

현장에서는 이러한 default 메서드의 특성을 이해하고, 각 상황에 맞게 적절히 사용되고 있습니다. 추상 클래스가 완전히 대체되지는 않았으며, 서로의 강점에 따라 다르게 활용됩니다.

자세한 설명과 실사용 사례에 대한 포럼 글이나 기존 질문 답변을 참고하시면 더욱 도움이 될 것입니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

Yeseul Lee님의 프로필 이미지
Yeseul Lee

작성한 질문수

질문하기