관련 이론 및 문법

(변수의 기본 초기화 값 참고)

http://kkikkodev.tistory.com/111


문제 의도

주어진 소스코드를 컴파일하여 실행한 결과를 고르는 문제입니다.


답안

D


풀이 방법

소스코드를 보면 크게 2 가지로 구분할 수 있습니다. 먼저 위쪽에 라인 번호가 적혀 있는 부분인 클래스 정의부가 있고, 그 아래, 실행문이 있습니다.


먼저 정의부를 살펴보면, 1 번 라인에, ClassA 가 정의되어 있고, 그 안에 methodA 가 있습니다. 8 번 라인에, ClassB 가 있고, 그 안에 멤버변수 classC 와 멤버 메소드 getValue 가 있습니다. 마지막으로, 15 번 라인에 ClassC 가 있고, 그 안에 멤버 변수 value 가 있고, 멤버 메소드 getValue 가 있습니다.


그러면, 실행문부터 살펴보면, ClassA a = new ClassA(); 문을 통해서, ClassA 형 객체를 생성하여 a 인스턴스 변수로 가리키게 합니다. 그리고, a.methodA(); 문을 호출하여, 2 번 라인의 methodA 로 제어권을 넘깁니다. 3 번 라인의 ClassB classB = new ClassB(); 문을 통해서, ClassB 형 객체를 만들어 classB 인스턴스 변수로 가리키게 합니다. 그리고, 4 번 라인에서, classB.getValue(); 문을 호출하여 제어권을 10 번 라인으로 넘기게 됩니다. 11 번 라인에서, return classC.getValue(); 문을 호출하려고 하는데, classC 는 따로 초기화된 적이 없는 String 형 멤버 변수이기 때문에, 기본적으로 null 로 초기화 되어 있을 것이고, null.getValue() 를 호출하려고 하다보니, NullPointerException 이 발생하게 됩니다.


따라서, 답안은 D 가 됩니다.


by kkikkodev 2015. 9. 2. 13:45