🤍 전 강의 25% 할인 중 🤍

2024년 상반기를 돌아보고 하반기에도 함께 성장해요!
인프런이 준비한 25% 할인 받으러 가기 >>

  • 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

Supplier의 한정적 와일드카드를 사용하는 이유에 대한 제 생각은 이렇습니다.

24.05.23 03:04 작성 24.05.23 03:42 수정 조회수 64

0

강의 너무 잘 듣고 있습니다. 제가 이해한 문맥이 맞는지 확인하고자 글 남깁니다!

 

선생님께서는 SpellChecker 생성자의 매개변수에 곧바로 람다 또는 메서드 참조를 사용하셨기에 강의에서는 드러나지 않았으나(혹은 매개변수에 람다식을 작성한 후 변수로 추출. 이 경우에는 Supplier<Dictionary> 타입으로 추출됨),

책에서는 Supplier 인터페이스의 반환 타입이 Dictionary의 하위 타입인 경우를 염두에 둔 것으로 여겨집니다.

 

예를 들어, Supplier<DefaultDictionary> 타입의 변수가 있어 해당 변수를 SpellChecker 생성자의 매개변수로 넘기거나 혹은 일반적인 상황은 아닐 수 있겠지만 Supplier<DefaultDictionary> 등의 하위 타입 Supplier를 구현(혹은 Dictinary 인터페이스를 상속 받는 하위 타입 인터페이스의 Supplier를 구현. Supplier<SubDictionary> 같은)하는 클래스를 매개변수로 넘기는 상황 등에서는 한정적 와일드카드를 사용해야 하기 때문에 책에서 한정적 와일드카드를 사용하라고 얘기한 것 같습니다.

 

즉, Supplier<Dictionary> 타입이 아니라 Supplier<DefaultDictionary>, Supplier<SubDictonary> 타입과 같이 지네릭 타입에 Dictionary 하위 타입이 오더라도 사용 가능하게끔 하기 위함인 것 같습니다. 그렇게 생각한 근거는 책에

"클라이언트는 자신이 명시한 타입(이 경우 Dictionary)의 하위 타입이라면 무엇이든 생성할 수 있는 팩터리를 남길 수 있다." - 30p

라고 쓰여 있었기 때문입니다.

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.05.25

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

쇼콜라끼삐또리님의 이해하신 내용은 정확합니다! 제네릭 타입에서 한정적 와일드카드(? extends SomeType)를 사용하는 주된 이유는 타입 안정성을 유지하면서도 더 유연한 타입의 사용을 가능하게 하는 것입니다. 따라서 Supplier<Dictionary> 대신 Supplier<? extends Dictionary>와 같이 선언함으로써 Dictionary의 어떤 하위 타입도 반환할 수 있는 Supplier를 사용할 수 있게 됩니다. 이러한 방식은 제네릭 타입의 다형성을 활용하는 좋은 예로, SpellChecker 생성자에 다양한 구현체를 유연하게 제공할 수 있게 해줍니다.

님이 언급한 책의 내용과 같이, 클라이언트가 Dictionary의 하위 타입을 생성할 수 있는 팩터리를 제공할 수 있도록 하기 위한 방법이 바로 한정적 와일드카드의 사용입니다. 이를 통해 SpellChecker와 같은 클래스는 Dictionary의 구체적인 구현 타입에 대해 더 유연하게 대응할 수 있게 됩니다.

님의 이해하신 바는 매우 정확하며, 이러한 개념은 자바의 제네릭을 활용하는 다양한 상황에서 매우 중요합니다. 좋은 질문과 함께 강의에 대한 열정을 보여주셔서 감사합니다. 더 궁금하신 점이 있으면 언제든지 질문해 주세요!

채널톡 아이콘