관련 이론 및 문법

(확장 for 문 참고)

http://kkikkodev.tistory.com/190


문제 의도

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


답안

C


풀이 방법

코드를 살펴보면, reverse 와 main 총 2 개의 메소드를 확인할 수 있습니다. reverse 메소드에서는, 매개변수로 List 형 매개변수 list 를 받아서, Collections.reverse(list); 문장을 통해서, list 를 역순으로 뒤집고, return list.iterator(); 문장을 통해서, list 의 iterator 를 반환합니다.


main 메소드가 실행되면, List list = new ArrayList(); 문장을 실행합니다. List 형 인스턴스 변수 list 에 ArrayList 형 객체를 생성하여 이를 가리키게 합니다. ArrayList 는 List 의 자식 클래스이므로, 부모형인 List 형 인스턴스 변수로 자식 객체를 가리킬 수 있는 것입니다. 그 다음 줄에서는, list.add("1"); list.add("2"); list.add("3"); 문장을 통해서, list 에 "1", "2", "3" 을 순서대로 추가하고 있습니다. 그 다음, for(Object obj: reverse(list)){...} 확장 for 문을 실행하려고 합니다.


확장 for 문의 콜론 우측 부분에는 배열이나, Iterable 인터페이스를 상속하고 있는 클래스 변수만 올 수 있습니다. 현재 코드에서는 reverse(list) 의 반환형인 Iterator 객체가 오는데, Iterator 인터페이스는 Iterable 인터페이스를 상속하고 있지 않기 때문에, 컴파일 에러가 발생하게 됩니다.


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


by kkikkodev 2016. 11. 20. 17:10