OCJP (1Z0-851 / 2012-08-28 / Exam C) - 9 번
관련 이론 및 문법
(접근 제어 지시자 참고)
http://kkikkodev.tistory.com/96
(내부 클래스 참고)
http://kkikkodev.tistory.com/258
문제 의도
base 변수를 참조할 수 있는 객체의 클래스에 대한 설명으로 참인 것을 고르는 문제입니다.
답안
C
풀이 방법
이 문제는 접근 제어 지시자에 대한 문제입니다. 일단 소스코드를 살펴보면, 1 라인에 geometry 패키지 선언이 되어 있습니다. 3 라인에는 Hypotenuse 클래스가 정의되어 있고, 그 안의 6 라인에 InnerTriangle 클래스가 정의되어 있습니다. 4 라인에는 InnterTriangle 형 멤버 변수 it 를 선언 및 초기화하고 있습니다. InnerTriangle 클래스의 멤버 변수로는 int 형 base 와 height 가 있습니다.
문제에서 묻고자 하는 것은, Hypotenuse 클래스의 inner 클래스인 InnerTriangle 클래스의 멤버 변수인 base 에 접근 가능한 범위입니다. 일단, base 변수 자체는 public 이지만, 멤버 변수에 접근하려면, InnerTriangle 클래스 객체를 생성해야 하기 때문에, InnerTriangle 의 접근 제어 지시자가 중요합니다. 이는 default (= package) 이므로, 같은 패키지인 geometry 패키지 안에서만 InnerTriangle 이 visible 합니다. (InnerTriangle 을 생성할 수 있습니다.) InnerTriangle 의 바깥 클래스인 Hypotenuse 는 public 이므로, 패키지에 상관없이 visible 하지만, 그 안의 InnerTriangle 클래스는 default 이기 때문에, 같은 패키지만 가능하므로, 답안은 C 가 됩니다.
추가적으로, 4 번 라인의 it 변수를 통해서는 base 에 접근할 수 없다고 가정하고 이 문제를 풀도록 합니다. 이 문제는 멤버 변수 it 를 통한 base 의 접근 방식이 아닌, 외부에서, Hypotenuse 의 inner 클래스인 InnerTriangle 형 객체를 만들어서 base 에 접근하는 방식을 말하고 있기 때문입니다.