인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

Teo님의 프로필 이미지

작성한 질문수

스프링 핵심 원리 - 고급편

템플릿 메서드 패턴 - 예제2

템플릿 메서드 패턴에 interface를 적용하면 장단점이 뭐가 있을까요?

작성

·

54

0


[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예

[질문 내용]
템플릿 메서드 패턴에서 추상 클래스로 템플릿과 구현해야 하는 메서드를 제공하고 있는데, interface를 이용해서 패턴을 제공하면 어떤 장단점이 있나요? interface의 default 키워드를 사용해서 템플릿을 제공한다고 하면, 기존 추상 클래스 방식과 비교했을 때 어떤 차이가 있고, 어떤 상황에서 더 유용할까요?
감사합니다!

답변 2

0

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. Teo님

디폴트 메서드는 주로 하위 호환을 유지하기 위한 목적으로 나온 것인데요. 자바 고급 3편에서 정리한 내용을 남겨드릴게요.

 

주의사항

1. 하위 호환성을 위한 최소한의 활용 – 불필요하게 디폴트 메서드를 남발하면 인터페이스 역할이 애매해지고 복잡해질 수 있음

2. 인터페이스 본연의 추상화 목적 유지 – 인터페이스는 여전히 계약(Contract) 역할에 충실해야 하며, 복잡한 로직은 클래스 쪽에 두는 것이 바람직

3. 다중 상속(충돌) 문제 – 여러 인터페이스에서 동일 시그니처의 디폴트 메서드가 있을 경우, 구현 클래스에서 반드시 충돌을 해결해야 함

4. 상태(state)를 두지 말 것 – 디폴트 메서드는 메서드 구현부만 제공하는 것이며, 인터페이스에 인스턴스 상태를 가지는 것은 지양

결국 디폴트 메서드는 인터페이스의 확장성을 높이면서도, 기존 코드와의 하위 호환성을 보장하기 위한 자바의 주요한 언어적 지원이다. 다만 이를 활용할 때는 인터페이스의 추상화 역할을 흐리지 않도록 주의 깊은 설계가 필요하다.

따라서 무분별한 사용은 지양하고, 가급적 간단한 공통 기본 동작이나 이미 사용 중인 인터페이스를 확장할 때만 제한적으로 사용하는 것이 좋다.

감사합니다.

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다. Teo님께서 질문해주신 내용에 대해 유사한 기존 답변을 찾아 공유드립니다.

템플릿 메서드 패턴에서 인터페이스를 사용하여 default 메서드를 사용할 경우와 추상 클래스를 사용하는 경우의 장단점은 다음과 같습니다:

  1. 인터페이스 사용 시의 장점:

    • 다중 상속의 유연성: Java에서 인터페이스 다중 구현이 가능하므로, 하나의 클래스가 여러 개의 인터페이스를 구현할 수 있습니다. 이는 템플릿 메서드를 다양한 클래스 구조에서 사용할 수 있게 해줍니다.
    • 추상화 레벨 증가: 인터페이스는 일반적으로 더 높은 수준의 추상화를 제공하므로, 특정 클래스 구현에 의존하지 않고도 동작을 정의할 수 있습니다.
  2. 추상 클래스 사용 시의 장점:

    • 상태 유지 및 공유 코드: 추상 클래스는 필드와 메서드를 가질 수 있어 하위 클래스가 공유할 공통 상태나 구현을 포함시킬 수 있습니다. 이는 상태를 유지해야 하는 경우 유용합니다.
    • 디폴트 구현의 용이성: 기본 구현을 제공하면서도 필요한 경우 하위 클래스에서 특정 메서드를 오버라이드할 수 있습니다.
  3. default 메서드를 사용한 인터페이스:

    • Java 8부터 인터페이스에 default 메서드를 정의하여 인터페이스도 기본 구현을 가질 수 있게 되었습니다. 이는 인터페이스를 확장할 때 모든 구현체를 변경하지 않고도 새로운 기능을 추가할 수 있게 해줍니다.
    • 하지만 여전히 상태를 직접 가지고 있지는 못하므로, 상태가 필요 없는 간단한 로직을 정의하는 데 주로 사용됩니다.

템플릿 메서드 패턴 | 인터페이스와 추상 클래스의 차이점에서 이와 관련된 논의가 진행된 바 있으니 참고하시면 좋겠습니다.

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

Teo님의 프로필 이미지

작성한 질문수

질문하기