OCJP (1Z0-851 / 2012-08-28 / Exam C) - 7 번
관련 이론 및 문법
(has a / is a 참고)
http://kkikkodev.tistory.com/149
문제 의도
다음의 보기 중, 참인 것을 4 개 고르는 문제입니다.
A. Has-a 관계는 반드시 캡슐화되어야 합니다.
B. Has-a 관계는 상속을 통해 구현되어야 합니다.
C. Has-a 관계는 인스턴스 변수를 통해 구현될 수 있습니다.
D. Is-a 관계는 extends 키워드를 사용하여 구현될 수 있습니다.
E. Is-a 관계는 implements 키워드를 사용하여 구현될 수 있습니다.
F. 영화와 배우의 관계는 is-a 관계의 예시입니다.
G. 배열이나 컬렉션은 1 대 다 has-a 관계를 구현하는데 사용될 수 있습니다.
답안
C, D, E, G
풀이 방법
이 문제는, Has-a 관계와 Is-a 관계에 대한 문제입니다. 먼저, 보기 A 를 보면, Has-a 관계는 반드시 캡슐화되어야 한다고 하고 있습니다. 캡슐화라는 것은, 관련 있는 변수와 메소드를 하나의 클래스로 묶는 것을 말합니다. 하지만, Has-a 관계에서, 멤버 인스턴스 변수 중에, 꼭 그 클래스와 관련이 있지 않더라도 (클래스를 구성하는 속성이 아니더라도) 다른 필요성에 의해서 존재할 수도 있습니다. 따라서, Has-a 관계는 반드시 캡슐화 될 필요는 없기 때문에, 보기 A 는 답안 후보에서 제외합니다.
보기 B 를 보면, Has-a 관계는 상속을 통해 구현되어야 한다고 했는데, Has-a 관계는 상속이 아닌, 클래스 내의 멤버 인스턴스 변수를 통해 구현되므로, 이 또한 답안 후보에서 제외합니다.
보기 C 를 보면, Has-a 관계는 인스턴스 변수를 통해 구현될 수 있다고 하는데, 이는 맞는 말이므로, 답안이 됩니다.
보기 D 와 보기 E 를 보면, Is-a 관계는 extends 와 implements 키워드를 통해서 구현될 수 있다고 하는데, Is-a 관계는 상속을 통해서 구현되고, 상속은 extends 와 implements 키워드를 통해서 나타낼 수 있으므로 이 둘 모두, 답안이 됩니다.
보기 F 를 보면, 영화와 배우의 관계는 is-a 관계의 예시라고 하고 있는데, 영화와 배우의 관계가 상속 관계가 아니기 때문에, is-a 관계가 아니므로, 답안 후보에서 제외합니다. 차라리 영화와 배우는 has-a 관계가 더 어울립니다. (영화 has-a 배우)
보기 G 를 보면, 배열이나 컬렉션은 1 대 다 has-a 관계를 구현하는데 사용될 수 있다고 하는데, 한 클래스에서, 멤버 변수가 여러개 필요한 경우에 (1 대 다) 이를, 배열이나 컬렉션을 통해서 멤버 변수를 선언하면 되기 때문에, 이는 답안이 됩니다.
결과적으로, 답안은 C, D, E, G 가 됩니다.