출세한 익룡님의 면접 결과

-10

총점

3

질문 수

0

좋아요

18

조회수

종합 평가

제네릭의 기본 목적(다양한 타입을 다루는 함수 작성)과 사용 시 타입을 명시해야 한다는 핵심 사용법은 일관되게 파악하고 계십니다. 컴파일 타임 타입 검사의 의미, 즉 Object 방식과 비교했을 때 런타임 오류(ClassCastException)를 사전에 방지하는 메커니즘에 대한 설명이 빠져 있었습니다. Java 제네릭의 타입 소거(type erasure) 개념과 컴파일 타임 vs 런타임 타입 검사의 차이를 정리한 뒤, Object 기반 컬렉션과 제네릭 컬렉션에서 ClassCastException이 각각 언제 발생하는지 코드 예시로 비교해 보시길 권장합니다.

질문별 상세 분석

커뮤니티 공개
Q1C

제네릭은 무엇이며 언제 사용하나요?

응답 내용

제네릭은 어떤 타입이나 올 수 있음을 나타낼 때 사용하는 것으로 다양한 파라미터나 리턴 값을 갖는 함수를 제작할 때 사용합니다

AI 피드백

제네릭을 "다양한 타입을 받는 함수나 클래스를 만들 때 사용한다"는 핵심 방향은 맞게 짚으셨습니다. 다만 "어떤 타입이나 올 수 있음을 나타낸다"는 표현은 `Object`나 `any` 타입과의 차이를 흐리게 만드는데, 제네릭의 핵심은 **타입 안전성(type safety)을 유지하면서** 재사용성을 높이는 것입니다. 즉, `List<T>`처럼 컴파일 타임에 타입이 결정되어 잘못된 타입 삽입 시 컴파일 오류가 발생하는 반면, `Object`를 쓰면 런타임 캐스팅 오류 위험이 생긴다는 트레이드오프를 함께 설명하면 훨씬 강한 답변이 됩니다. 보완 예시로는 "제네릭은 타입 파라미터를 통해 컴파일 타임에 타입 검사를 수행하므로, `List<String>`에 `Integer`를 넣으면 컴파일 오류가 발생해 런타임 ClassCastException을 방지할 수 있습니다"처럼 구체적인 상황을 들어 설명해 보시길 권장합니다.

Q2C

제네릭이 Object 타입을 사용하는 것과 비교해 타입 안전성을 어떻게 보장하나요?

응답 내용

함수를 사용할 때 미리 어떤 타입의 객체를 사용할지 표시해야 합니다

AI 피드백

함수 사용 시 타입을 미리 지정해야 한다는 방향은 맞게 짚으셨습니다. 다만 핵심인 "컴파일 타임 타입 체크"가 빠져 있어 Object 타입과의 차별점이 명확히 드러나지 않았습니다. Object를 사용하면 컴파일러가 타입을 검증하지 못해 런타임에 ClassCastException이 발생할 수 있지만, 제네릭은 컴파일 타임에 타입 불일치를 잡아주고 불필요한 형변환(casting)도 제거해 줍니다. 예를 들어 "제네릭을 사용하면 List<String>에 Integer를 넣으려 할 때 컴파일 오류가 발생해 런타임 오류를 사전에 방지할 수 있습니다"처럼 답변에 컴파일 타임 안전성과 타입 소거(type erasure) 개념을 연결해 보시면 더욱 완성도 높은 답변이 될 것입니다.

Q3D

제네릭의 타입 검사가 컴파일 타임에 이루어진다는 것이 구체적으로 어떤 의미인지 설명해주실 수 있나요?

응답 내용

함수에 제네릭으로 표현 했어도 사용할 때는 어떤 타입을 사용할지 명시해야 합니다

AI 피드백

타입을 명시해야 한다는 점은 맞지만, 질문의 핵심인 '컴파일 타임 검사'의 의미는 설명되지 않았습니다. 컴파일 타임 검사란, 코드를 실행하기 전 컴파일러가 타입 불일치를 감지해 오류를 발생시키는 것을 의미합니다. Object 타입을 사용하면 잘못된 캐스팅이 런타임에서야 ClassCastException으로 드러나지만, 제네릭을 사용하면 예를 들어 List&lt;String&gt;에 Integer를 넣으려 할 때 컴파일러가 즉시 오류를 잡아줍니다. 다음에는 "컴파일 타임에 타입 불일치를 잡아 런타임 ClassCastException을 방지한다"는 문장을 중심으로 답변을 구성해 보시면 좋겠습니다.

커뮤니티 공유 안내

• 이 결과는 AI가 분석한 내용이며, 학습 목적으로 커뮤니티에 공유됩니다.

• 좋아요를 눌러 유용한 답변에 반응을 남겨보세요.

• 개인정보는 포함되지 않으며, 면접 연습 개선을 위한 참고 자료로 활용됩니다.