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

Hanwool Cho님의 프로필 이미지
Hanwool Cho

작성한 질문수

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

문제와 풀이2

제네릭 메서드

작성

·

228

0

영한님 좋은 강의 올려주셔서 감사합니다.

제가 문제와 풀이 강의를 들으면서 든 의문이 있어서 커뮤니티 글을 봤는데 저와 비슷한 질문을 하신 분이 계시더라고요.

근데 그분의 코드를 보면서 질문이 생겼습니다.

 

static <T extends Shuttle> void printV1(T shuttle)

static <T extends BioUnit> void printV1_1(Shuttle<T> shuttle)

 

위 두 코드의 차이가 뭔가요?

제가 생각하기엔 첫번째 코드의 T는 Shuttle<Marine> 이고

두번째 코드의 T는 Marine인데 맞는건가요?

 

답변 1

0

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

Hanwool Cho님의 질문에 대해 유사한 질문 링크를 찾아봤습니다.

굳이 out으로 안하고 해도 되지 않을까 싶어서요에서 baileypark님이 유사한 의문을 가지고 계셨습니다. 본문에서는 ShuttleBioUnit을 활용하여 제네릭을 적용하는 방법에 대해 물으셨고, Shuttle<T>Shuttle<? extends BioUnit> 사용의 차이에 대해 질문하셨습니다. 답변에서는 학습하시는 분들이 직접적으로 코드를 이해할 수 있도록 설명하는 방향으로 접근한 것으로 설명되어 있습니다.

하나의 경우는 Shuttle의 제네릭 타입을 확정하여 Shuttle 내에서 특정 타입(예: Marine)을 다루고자 할 때 사용될 것 같고, 다른 하나는 BioUnit을 상속받는 어떤 타입이든 Shuttle에 전달할 수 있도록 하는 유연한 방식으로 해석됩니다.

Hanwool Cho님의 질문에 대해 더 구체적으로 말씀드리면, 첫 번째 코드의 TShuttle 혹은 Shuttle을 상속받은 모든 타입들을 나타내며, 두 번째 코드에서의 TShuttle<T>에서 TBioUnit을 상속받는 어떤 타입(Marine 등)을 가리킵니다. 따라서 직접 비교하자면, 첫 번째 코드는 Shuttle 타입 자체에 제한을 두는 반면, 두 번째 코드는 Shuttle이 다루는 내부 타입에 제한을 두는 차이가 있습니다.

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

Hanwool Cho님의 프로필 이미지
Hanwool Cho

작성한 질문수

질문하기