작성
·
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님이 유사한 의문을 가지고 계셨습니다. 본문에서는 Shuttle
과 BioUnit
을 활용하여 제네릭을 적용하는 방법에 대해 물으셨고, Shuttle<T>
와 Shuttle<? extends BioUnit>
사용의 차이에 대해 질문하셨습니다. 답변에서는 학습하시는 분들이 직접적으로 코드를 이해할 수 있도록 설명하는 방향으로 접근한 것으로 설명되어 있습니다.
하나의 경우는 Shuttle
의 제네릭 타입을 확정하여 Shuttle
내에서 특정 타입(예: Marine
)을 다루고자 할 때 사용될 것 같고, 다른 하나는 BioUnit
을 상속받는 어떤 타입이든 Shuttle
에 전달할 수 있도록 하는 유연한 방식으로 해석됩니다.
Hanwool Cho님의 질문에 대해 더 구체적으로 말씀드리면, 첫 번째 코드의 T
는 Shuttle
혹은 Shuttle
을 상속받은 모든 타입들을 나타내며, 두 번째 코드에서의 T
는 Shuttle<T>
에서 T
가 BioUnit
을 상속받는 어떤 타입(Marine
등)을 가리킵니다. 따라서 직접 비교하자면, 첫 번째 코드는 Shuttle
타입 자체에 제한을 두는 반면, 두 번째 코드는 Shuttle
이 다루는 내부 타입에 제한을 두는 차이가 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.