해결된 질문
작성
·
46
1
안녕하세요. 문제를 풀다가 애매하다고 생각되는 부분이 있어서 질문드립니다.
퀴즈 4에서 b 를 보면,
b. push 메서드는 Any 타입의 값도 받을 수 있다.
라고 적혀있고, Stack 클래스는 런타임 시 T의 타입이 결정되기 때문에 Any가 들어올 수 없다고 설명주셨습니다.
다만 궁금한 부분은 Stack<Any>와 같이 런타임 시 T가 Any 타입으로 설정된다면 push 메서드도 Any 타입 값을 받을 수 있다고 봐야 할 꺼 같은데, 문제 의도가 "push 메서드는 T 타입의 값을 받아야한다" 이기 때문에 b 가 틀린 설명인지 궁금합니다.
결국 런타임 시점에 Stack에 어떤 타입이 적용되냐에 따라 Any 타입의 값을 받을 수도 있고, 안될 수도 있는 것 아닌가 해서요.
답변 2
1
안녕하세요. hyem5019님 예리한 질문 감사드립니다! 😄
저도 다시 한번 객관적으로 문제를 읽어보니 b번 지문이 다소 모호한 점이 있네요.ㅠㅠ
말씀하신 부분이 다 맞습니다.
"(만약 T가 Any였다면) push 메서드는 Any 타입의 값도 받을 수 있다." 라는 명제는 참입니다. 아무 제약 없이 해당 문장이 있기 때문에 b는 참일수도 거짓일수도 있었습니다.
다만 문제의 의도는 T 타입이라는 타입 파라미터를 이해하고 이 부분이 무엇으로 들어가냐에 따라 push 메서드가 받을 수 있는 값이 결정되는 것을 이해하는가를 알아보는 것이라서, 말씀대로의 의도가 맞습니다.
좋은 질문 주셔서 감사합니다. 추후에 문제집 업데이트를 하게 된다면 이런 부분 조금 다듬어보겠습니다.
0
안녕하세요, 인프런 AI 인턴입니다. hyem5019님!
질문해 주신 내용은 Kotlin의 제네릭 타입 시스템에 관한 흥미로운 질문이네요. Stack 클래스에서 제네릭 타입 T는 컴파일 시간에 특정 타입으로 고정되지만, 런타임에 실행될 때도 그 타입 제한을 받습니다. 따라서 push 함수는 설정된 T 타입의 값만 받아들일 수 있습니다.
선택된 타입이 Stack<Any>
인 경우에는, 그때에 한해서 Any
타입의 값이 들어올 수 있습니다. 이는 제네릭 타입 인스턴스화의 특징 때문입니다. 즉, 타입 파라미터를 Any
로 설정하면 push
메서드는 Any
타입의 값을 받을 수 있습니다. 반면에, Stack<String>
처럼 다른 타입을 사용하면 해당 타입의 값만 받아들일 수 있습니다. 그래서 옵션 b의 오류는 “무조건” Any
타입의 값이 들어올 수 있다고 설명된 부분에 있습니다.
이러한 맥락에서 본 문제의 의도는 Stack
클래스의 타입 파라미터 T
가 특정 타입으로 설정될 때의 제약을 이해하고 안내하기 위함입니다. push 메서드는 T 타입의 값을 받아야 한다
는 컨텍스트가 그 부분의 핵심이라고 볼 수 있습니다.
코틀린 제네릭에 대한 예시와 설명을 보시면 더 도움이 되실 수도 있습니다. 이미 알고 계신 부분이라면 양해 부탁드리고, 추가적으로 궁금한 점이 있으시면 주저하지 말고 질문해 주세요!
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
넵 답변 감사드립니다!