글
관련 이론 및 문법
(객체와 인스턴스 변수 참고)
http://kkikkodev.tistory.com/265
문제 의도
주어진 소스코드의 29 라인에 추가하였을 때, 100 을 출력하는 보기를 3 개 고르는 문제입니다.
답안
B, C, F
풀이 방법
소스코드를 먼저 보면, 총 3 개의 클래스가 정의되어 있습니다. (Inner, Outer, Gamma) Inner Class 에는 int 형 멤버 변수 x 가 있고, 이를 변경하는 setX 와 이를 반환하는 getX 메소드가 있습니다. Outer Class 에는, Inner 클래스형 멤버 인스턴스 변수 y 가 있고, 이를 변경하는 setY 와 이를 반환하는 getY 메소드가 있습니다. 마지막으로, Gamma 클래스에는 main 메소드가 있습니다.
프로그램이 실행되어, main 메소드가 실행됩니다. 24 라인에서는, Outer 형 인스턴스 변수 o 에 Outer 객체를 생성하여 가리키게 합니다. (현재 멤버 변수 y 는 null) 그리고 25 라인에서, Inner 형 인스턴스 변수 i 에 Inner 객체를 생성하여 가리키게 합니다. (현재 멤버 변수 x 는 0) 26 라인에서는 int 형 변수 n 에 10 을 넣습니다. 그 다음, 27 라인에서, i.setX(n); 문장을 통해서, i 객체의 멤버변수 x 에 10 을 저장합니다. 그리고, 28 라인에서 o.setY(i); 문을 통해서, o 객체의 멤버 변수 y 에 i 변수를 저장합니다. (o 객체의 멤버 변수인 y 는 i 와 같은 객체를 가리키게 됩니다.) 30 라인에서는, o.getY().getX() 를 화면에 출력하고 있습니다. 즉, o 객체의 멤버변수 y 인스턴스의 멤버변수인 x 변수를 가져와서 출력하는 것입니다. 28 라인까지는, o 객체의 멤버변수 y 인스턴스의 멤버 변수인 x 변수의 값이 10 이 됩니다.
이를 100 으로 변경하기 위해서, 29 라인에 추가되어야 할 보기들을 살펴보겠습니다.
먼저, A 문장을 보면, n = 100; 이 있는데, 실제로 i 나 o 객체를 변화시켜야 하는데, n 을 변경하고 있으니, 이는 결과에 아무런 영향도 미치지 않으므로 답안 후보에서 제외합니다.
B 는, i.setX(100); 문인데, i 객체의 멤버 변수인 x 를 100 으로 변경하고 있습니다. 현재 o 객체의 멤버 변수 y 와 main 메소드의 i 객체는 같은 객체를 가리키므로, i 객체의 멤버 변수 x 가 100 으로 바뀌면, o 객체의 멤버 변수 y 또한 같이 변화된 객체를 가리키게 됩니다. 따라서 답안 후보가 됩니다.
C 는, o.getY().setX(100); 문인데, o.getY() 문으로 o 객체의 y 멤버 변수를 가져와서 setX(100); 을 호출하는 것은 위 보기 B 와 같은 효과를 내므로, 답안 후보가 됩니다.
D 는, i = new Inner(); i.setX(100); 문인데, 현재 i 변수는 o 객체의 멤버 변수 y 와 같은데, i 에 새로운 Inner 객체를 생성하여, 그 멤버 변수 x 를 100 으로 변화시키면, i 는 새로운 객체를 가리키게 되고, o 객체의 멤버 변수 y 는 기존의 Inner 객체 (멤버 변수 x 값이 10) 를 가리키게 됩니다. 따라서 결과에 영향을 미치지 않으므로, 답안 후보에서 제외합니다.
E 는, o.setY(i); i = new Inner(); i.setX(100); 문인데, 첫 문장인 o.setY(i); 는 28 라인과 같고, 뒤의 i = new Inner(); 과 i.setX(100); 문장은 보기 D 와 같으므로, 결과적으로 영향을 미치지 않으므로, 답안 후보에서 제외합니다.
F 는, i = new Inner(); i.setX(100); o.setY(i); 문인데, 먼저 앞부분 2 문장인 i = new Inner(); 과 i.setX(100); 문은 보기 D 와 같습니다. (i 객체의 멤버 변수x 의 값은 100 으로 하여 새로 생성함) 그 다음에, o.setY(i); 문을 통해서 새로 생성된 객체 i 를 o 객체의 멤버 변수 y 에 대입하고 있습니다. (결과적으로, o 객체의 멤버변수가 바뀌게 됩니다.) 그러므로 답안 후보가 됩니다.
최종적으로, 100 을 출력하는 문장인 B, C, F 가 답안이 됩니다.
'4.1) OCJP > 1Z0-851 / 2012-08-28' 카테고리의 다른 글
| OCJP (1Z0-851 / 2012-08-28 / Exam B) - 40 번 (0) | 2015.09.03 |
|---|---|
| OCJP (1Z0-851 / 2012-08-28 / Exam B) - 39 번 (0) | 2015.09.03 |
| OCJP (1Z0-851 / 2012-08-28 / Exam B) - 38 번 (0) | 2015.09.03 |
| OCJP (1Z0-851 / 2012-08-28 / Exam B) - 37 번 (0) | 2015.09.03 |
| OCJP (1Z0-851 / 2012-08-28 / Exam B) - 36 번 (0) | 2015.09.03 |
| OCJP (1Z0-851 / 2012-08-28 / Exam B) - 34 번 (0) | 2015.09.02 |
| OCJP (1Z0-851 / 2012-08-28 / Exam B) - 33 번 (0) | 2015.09.02 |
| OCJP (1Z0-851 / 2012-08-28 / Exam B) - 32 번 (0) | 2015.09.02 |
| OCJP (1Z0-851 / 2012-08-28 / Exam B) - 31 번 (0) | 2015.09.02 |
| OCJP (1Z0-851 / 2012-08-28 / Exam B) - 30 번 (0) | 2015.09.02 |
RECENT COMMENT