관련 이론 및 문법

(TreeSet 클래스 참고)

http://kkikkodev.tistory.com/119


(Comparable 인터페이스 참고)

http://kkikkodev.tistory.com/166


문제 의도

한 프로그래머가 TreeSet 에 대해서 Drink 객체의 add 작업을 반복하고, 각 Drink 객체의 이름을 출력합니다. 출력 결과를 고르는 문제입니다. 


답안

B


풀이 방법

Drink 클래스는 Comparable 인터페이스를 상속하고 있고, 멤버 변수로는 String 형 name 을 가지고 있습니다. 또한, Comparable 인터페이스에 있는 compareTo 추상 메소드를 overriding 하고 있습니다. 하지만, compareTo 메소드는 무조건 0 만 반환하도록 overriding 했습니다.


그리고, 밑 부분의 코드를 살펴보면, 2 개의 Drink 객체를 생성합니다. (one, two 라는 인스턴스 변수로) 그 후에, one 의 멤버 변수 name 에는 "Coffee" 를 대입하고, two 의 멤버 변수 name 에는 "Tea" 를 대입합니다. 그 다음, TreeSet 객체를 생성합니다. (set 이라는 인스턴스 변수로) 이 set 에 one 객체를 add 합니다. 객체를 TreeSet 에 추가할 때, 객체의 compareTo 메소드를 호출하여 반환값이 0 이 나오면, 이 객체는 TreeSet 에 이미 존재하는 것으로 간주하여, TreeSet 에 추가하지 않게 됩니다. 


Drink 클래스의 compareTo 메소드는 무조건 0 을 반환하도록 되어 있습니다. 따라서, 처음에 one 객체를 추가할 때는, 일단, TreeSet 에 객체가 하나도 없기 때문에 비교 대상이 없으므로, 추가가 됩니다. 그 다음에, two 객체를 add 할 때는, one 객체와 같은 객체인지 비교를 하게 되는데 (compareTo 메소드를 호출하여) 결과는 무조건 0 이 반환되므로, 같은 객체로 간주하여, two 객체를 TreeSet 에 추가하지 못하게 됩니다. TreeSet 에는 one 객체만 존재하게 되고, 결과적으로, TreeSet 의 모든 Drink 객체들의 name 을 출력해보면, one 객체의 name 인 "Coffee" 만 출력되게 되어, 답안은 B 가 됩니다.


by kkikkodev 2016. 11. 12. 22:34