Inflearn brand logo image

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

김규현님의 프로필 이미지
김규현

작성한 질문수

김영한의 실전 자바 - 중급 2편

제네릭 메서드 활용

타입 매개변수 추론 질문 드립니다.

작성

·

257

2

5:20 즈음에 AnimalMethod.bigger(cat, dog) 가 타입 추론이 불가능해 문제가 된다고 하셨는데, Cat과 Dog의 공통 조상인 Animal로 타입 추론이 되는 것 같아서 이게 맞는지 확인차 질문드립니다.

Animal animal = AnimalMethod.bigger(cat, dog);

답변 3

0

저도 궁금하여 찾아봤는데, 찾아본 내용 공유드립니다 !

 

dog, cat은 서로 다른 하위타입이지만, 컴파일러는 이들의 공통 상위 타입인 Animal로 추론합니다.

 

왜 이걸 허용했을까를 생각해봤는데,

AnimalMethod에서 제공하는 static 메서드이고, 유틸성이 있고, 동물이라는 추상적인 클래스이기 때문에 동물(강아지, 고양이)들의 크기, 즉 종류와 상관 없이 둘의 크기를 비교할 때도 사용되어야 하니까 허용한 것이 아닌가 생각해보았습니다 !

 

혹시 더 정확한 정보를 찾으시다면 공유 부탁드려요 ~~!

0

그럼 해당 경우에는 Animal 타입으로 추론되는건가요 ?

0

안녕하세요. 김규현님, 공식 서포터즈 David입니다.

강의에서는 Dog bigger = AnimalMethod.getBigger(dog, cat); 와 같이 반환되는 값의 타입을 Dog로 받고 있습니다. 그래서 Dog타입이 아닌 Cat타입을 넣으면 타입추론에 실패하게 됩니다.

반환 값으로 Dog을 선언하지 않고 AnimalMethod.getBigger(dog, cat)을 작성하면 이해하신대로 Animal로 추론하게 됩니다.

감사합니다.

김규현님의 프로필 이미지
김규현

작성한 질문수

질문하기