관련 이론 및 문법

(Collection 인터페이스 참고)

http://kkikkodev.tistory.com/381


(확장 for 문 참고)

http://kkikkodev.tistory.com/190


문제 의도

소스코드를 컴파일한 후 실행한 결과를 고르는 문제입니다.


답안

B


풀이 방법

소스코드를 실행하면, main 메소드가 실행됩니다. 확장 for 문이 실행되고, 그 안에서, get() 메소드 호출이 딱 한번만 실행됩니다. get 메소드를 호출하면, Collection 형으로 sorted 라는 변수를 선언함과 동시에, LinkedList 객체를 만들어서 가리키게 합니다. Collection 은 interface 이고, LinkedList 클래스는 Collection interface 를 상속하고 있으므로, Collection 형 인스턴스 변수로 LinkedList 객체를 가리킬 수 있습니다. 그 다음 줄에서, sorted.add("B"); sorted.add("C"); sorted.add("A"); 문장을 통해서, "B", "C", "A" 를 순서대로 추가합니다. Collection interface 의 add 메소드는 추상 메소드이므로, 실제로는 LinkedList 클래스의 add 메소드가 호출됩니다. LinkedList 의 add 메소드는 순서대로 뒤에 요소를 추가합니다. 따라서, sorted 에는, "B" -> "C" -> "A" 의 형태대로 데이터가 저장되어 있습니다. 그 다음, return sorted; 문장을 통해서, sorted 인스턴스 변수를 main 메소드쪽으로 반환합니다.


get() 의 반환값으로 "B" -> "C" -> "A" 형태의 Collection 이 넘어오게 됩니다. 첫 번째 요소인 String 형 "B" 요소를 가져와서 Object 형 obj 가 가리키게 합니다. (Object 는 모든 클래스의 부모 클래스이므로, 모든 객체를 가리킬 수 있습니다.) 그리고 화면에, obj 를 출력합니다. 첫 번째는, "B" 가 출력됩니다. 그 다음에, 확장 for 문은 다음 요소인 String 형 "C" 요소를 가져와서 Object 형 obj 가 가리키게 합니다. 그리고 화면에 이를 출력합니다. ("C" 출력) 마찬가지로, 마지막 요소인 "A" 까지 출력하고 for 문을 종료합니다.


결국, "B, C, A" 가 출력되어 답안은 B 가 됩니다.


by kkikkodev 2016. 11. 20. 17:10