관련 이론 및 문법

(javac 참고)

http://kkikkodev.tistory.com/177


문제 의도

개발자가 Book 클래스를 만들때, Paper 클래스의 접근이 필요합니다. Paper 클래스는 myLib.jar 라고 불리는 JAR 안에 배포되어 있습니다. 보기중에서 개발자가 Book 클래스를 컴파일 하는 동안에 Paper 클래스를 사용하도록 허락해주는 것을 3 개 고르는 문제입니다.


답안

B, D, G


풀이 방법

보기 A 는 JAR 파일을 $JAVA_HOME/jre/classes/myLib.jar 처럼 옮긴다고 했는데 classes 폴더는 보통 library 파일이 아닌 class 파일이 위치하는 폴더이고, 게다가 jre 폴더 하위에 classes 폴더가 없으므로 이는 잘못된 말입니다. 따라서 답안 후보에서 제외합니다.


보기 B 는 JAR 파일을 $JAVA_HOME/jre/lib/ext/myLib.jar 처럼 옮긴다고 했는데 실제로 lib 폴더는 보통 JAVA 개발시 classpath 에 기본적으로 설정되는 폴더입니다. 또한 tomcat 을 활용해서 Java web application 개발시에도 jre/lib/ext 폴더의 라이브러리들을 참조하기 때문에, 이는 맞는 말입니다. 따라서 답안이 됩니다.


보기 C 는 JAR 파일을 /foo/myLib.jar 처럼 옮기고 classpath 환경변수에 /foo/myLib.jar/Paper.class 를 포함하도록 설정한다고 했는데 이는 잘못된 말입니다. 환경변수를 설정할때, 라이브러리 (myLib.jar) 안에 있는 Paper.class 파일을 풀어서 환경변수에 설정할 수 없고 라이브러리 자체로 설정해야 하기 때문에 답안 후보에서 제외합니다.


보기 D 는 JAR 파일을 /foo/myLib.jar 처럼 옮기고 classpath 환경변수를 /foo/myLib.jar 를 포함하도록 설정한다고 했는데 이는 맞는 말입니다. 환경변수 설정시 라이브러리 자체로 설정해야 하므로 이는 올바른 설정법이고, 이로 인해서 Book 클래스에서 Paper 클래스를 접근할 수 있게 되었으므로 답안이 됩니다.


보기 E 는 JAR 파일을 /foo/myLib.jar 처럼 옮기고 Book 클래스를 컴파일할 때 javac -cp /foo/myLib.jar/Paper Book.java 형태로 컴파일한다고 했는데 이는 잘못된 말입니다. javac 컴파일 옵션중에 -classpath 나 -cp 는 classpath 를 설정하는 옵션입니다. 따라서 /foo/myLib.jar/Paper 를 classpath 환경변수로 설정하는 것인데 라이브러리 안에는 접근할 수 없으므로 올바른 설정법이 아닙니다 그래서 답안 후보에서 제외합니다.


보기 F 는 JAR 파일을 /foo/myLib.jar 처럼 옮기고 Book 클래스를 컴파일할 때 javac -d /foo/myLib.jar Book.java 형태로 컴파일한다고 했는데 이는 잘못된 말입니다. -d 옵션은 컴파일한 결과물인 클래스 팡일을 생성할 폴더를 지정하는 옵션이므로 답안 후보에서 제외합니다.


보기 G 는 JAR 파일을 /foo/myLib.jar 처럼 옮기고 Book 클래스를 컴파일할 때 javac -classpath /foo/myLib.jar Book.java 형태로 컴파일한다고 했는데 이는 맞는 말입니다. -classpath 옵션을 통해서 /foo/myLib.jar 를 classpath 환경변수로 설정하고 Book 클래스에서는 myLib.jar 안에 있는 Paper 클래스를 참조할 수 있게 됩니다. 따라서 답안이 됩니다.


by kkikkodev 2016. 11. 13. 10:40