관련 이론 및 문법

(import 참고)

http://kkikkodev.tistory.com/181


문제 의도

Geodetics 클래스의 DIAMETER 멤버에 정상적으로 접근할 수 있는 보기를 2 개 고르는 문제입니다.


답안

A, C


풀이 방법

소스코드를 보면, 가장 위에, com.sun.scjp 로 패키지 선언이 되어 있고, 그 안에, Geodetics 라는 클래스가 정의되어 있습니다. 클래스 안에는 DIAMETER 라는 이름의 멤버 상수가 있습니다. (public static final)


보기 A 를 보면, import com.sun.scjp.Geodetics; 문을 통해서, 이 문장 밑에서 Geodetics 클래스를 사용할 시에는, 패키지명을 생략해도 된다고 하고 있습니다. 그리고, 또 다른 클래스인 TerraCarta 클래스 안의 halfway 메소드에서 return Geodetics.DIAMETER / 2.0; 문장을 통해서, Geodetics 클래스를 사용할 시에는, 패키지명을 생략하였고, 그 안의 DIAMETER 멤버 상수에 접근할 때는, static 이기 때문에, 클래스명인 Geodetics.DIAMETER 로 접근하였습니다. 따라서 이는 올바르기 때문에, 답안 후보가 됩니다.


보기 B 를 보면, import static com.sun.scjp.Geodetics; 문을 통해 Geodetics 클래스를 static 으로 간주하고, 이 밑에서 이 클래스를 사용할 때에는 패키지명을 생략해도 된다고 하고 있습니다. 하지만, Geodetics 클래스는 static 클래스가 아니므로, 답안 후보에서 제외합니다.


보기 C 를 보면, import static com.sun.scjp.Geodetics.*; 문을 통해 Geodetics 클래스 안의 모든 것들을 static 으로 간주하고, 이 밑에서 Geodetics 클래스 안의 모든 것들을 사용할 때는, 패키지명 뿐만 아니라, Geodetics 클래스명도 생략해도 된다는 것입니다. 그 다음에, 또 다른 클래스인 TerraCarta 클래스가 있고, 그 안에 halfway 메소드에서, return DIAMETER / 2.0; 문을 통해서, 패키지명 + 클래스명 생략후 바로 DIAMETER 로 접근하여 사용하고 있으므로 이는 올바르기 때문에 답안 후보가 됩니다. (DIAMETER 는 static 멤버이기도 합니다.)


보기 D 를 보면, package com.sun.scjp; 문을 통해 그 밑의 TerraCarta 클래스를 Geodetics 클래스와 같은 패키지로 묶고 있습니다. 같은 패키지 안에 있더라도, 클래스가 다르면, "클래스명.static 멤버" 의 형태로 접근을 해야 하는데, return DIAMETER / 2.0; 문처럼 바로 접근하고 있기 때문에, 답안 후보에서 제외합니다. 


따라서, 답안은 A 와 C 가 됩니다.


by kkikkodev 2015. 8. 28. 14:06