본문 바로가기
Oracle 1z0-808 Exam

Oracle 1z0-808 Exam 2024: Question #4

by Status Code 2024. 2. 18.

Oracle 1z0-808 Exam: Question #4 해설


질문 원본 내용

Consider the following code:

public static void main(String[] args) {
    Short s1 = 200;
    Integer s2 = 400;
    Long s3 = (long) s1 + s2; // line n1
    String s4 = (String) (s3 * s2); // line n2
    System.out.println("Sum is " + s4);
}

What is the result?
A. Sum is 600
B. Compilation fails at line n1.
C. Compilation fails at line n2.
D. A ClassCastException is thrown at line n1.
E. A ClassCastException is thrown at line n2.


질문 번역

다음은 Java 코드의 예시입니다:

public static void main(String[] args) {
    Short s1 = 200;
    Integer s2 = 400;
    Long s3 = (long) s1 + s2; // line n1
    String s4 = (String) (s3 * s2); // line n2
    System.out.println("Sum is " + s4);
}

코드를 실행했을 때 결과는 무엇일까요?

A. Sum is 600
B. line n1에서 컴파일 실패
C. line n2에서 컴파일 실패
D. line n1에서 ClassCastException 발생
E. line n2에서 ClassCastException 발생

정답: C. line n2에서 컴파일 실패

해설

이 코드를 분석해 보면 다음과 같습니다:

  • ShortInteger 객체를 사용하여 두 수를 더하는 연산을 수행합니다. Java에서는 덧셈 연산 시 ShortIntegerint 기본형으로 언박싱합니다. 이후 연산 결과는 Long 객체로 박싱됩니다. 따라서 line n1은 문제없이 컴파일됩니다.
  • line n2에서는 Long 객체 s3Integer 객체 s2를 곱하고 있습니다. 이 연산의 결과는 long 기본형 값이 됩니다. 그런데 여기서는 long 타입의 결과를 String으로 캐스팅하려고 하고 있습니다. 기본형 타입을 직접 String 객체로 캐스팅하는 것은 자바에서 허용되지 않으므로, 이 라인에서 컴파일 오류가 발생합니다.
  • long 타입을 String으로 변환하려면 String.valueOf() 메소드나 Long.toString() 같은 메소드를 사용하거나, 문자열 연결 연산을 사용해야 합니다. 예를 들어, "" + (s3 * s2)long 값을 String으로 변환합니다.
  • ClassCastException은 객체 타입 캐스팅이 잘못되었을 때 발생하는 런타임 예외이며, 이 경우에는 컴파일 단계에서 이미 오류가 발생하기 때문에 런타임에 도달하지 않습니다.

따라서 정답은 C. line n2에서 컴파일 실패입니다.

나머지 선택지에 대한 해설:

  • A. "Sum is 600"은 실제 연산 결과가 아닙니다. 연산은 정상적으로 수행되지만 결과를 String으로 변환하는 과정에서 오류가 발생합니다.
  • B. line n1에서 컴파일이 실패하는 것은 아닙니다. s1s2는 자동으로 언박싱되고 연산 후 long 타입의 결과가 Long 객체로 올바르게 박싱됩니다.
  • D와 E. ClassCastException은 잘못된 타입으로 객체를 캐스팅하려고 할 때 발생하는 런타임 예외입니다. 이 코드의 경우, 캐스팅 문제는 기본형 타입과 관련된 컴파일 타임 오류로 인해 발생합니다.

댓글