다음 Java 프로그램의 실행 결과를 쓰시오.
class Printer {
void print(Integer value) { System.out.print("A" + value); }
void print(Object value) { System.out.print("B" + value); }
void print(Number value) { System.out.print("C" + value); }
}
public class Main {
static class Collection<T> {
T value;
Collection(T value) { this.value = value; }
void print() { new Printer().print(value); }
}
public static void main(String[] args) {
new Collection<>(0).print();
}
}모범답안
B0
풀이와 판단 근거
Collection을 만들 때 T는 Integer로 추론된다. 하지만 제네릭은 타입 소거를 사용하므로 Collection 내부의 T는 컴파일 과정에서 상한인 Object로 다뤄진다.
print 메서드 안에서 오버로딩을 결정할 때 value의 컴파일 시점 타입이 Object이기 때문에 print(Object)가 선택된다. 이 때문에 B0이 최종 출력에 나타난다.
자주 틀리는 지점
- 연산자 우선순위나 재귀 반환 순서를 생략하고 눈에 보이는 값만 바로 계산함
- 값 전달·참조 전달, 오버라이딩·오버로딩 또는 배열과 포인터의 차이를 혼동함
- 출력의 공백·줄바꿈·대소문자를 무시해 B0와 다른 형식으로 작성함
자동 판정 방식
한글·영문 동의어와 문항별 필수 개념을 확인하며, 정답 단어가 부정되거나 반대 개념과 함께 쓰이면 자동 정답으로 확정하지 않습니다. 부분점수는 ITPASSLAB의 학습용 예상 점수입니다.