명품 자바 프로그래밍 4장 이론문제
1. 자바의 클래스와 객체에 대한 설명 중 틀린 것은?
답 : 4번 (private 로 선언하는 것이 바람직하다)
2. 생성자에 대한 설명 중 틀린것은?
답 : 4번 (아무 값도 리턴하지 않는 것은 맞으나 return 문은 사용할 수 있음)
3. 다음 코드 중 오류가 있는 것은?
답 : 3번
4. 다음 코드에 대해 설명하는 문항 중 틀린 것은?
답 : 2번 (Book 객체가 아니라 객체에 대한 레퍼런스가 10개 만들어진다. 아래 그림 참고)
5. 다음 중 메소드 오버로딩에 실패한 사례는?
답 : 1번 (오버로딩은 매개변수 타입이 다르거나 갯수가 달라야하는데 1번은 이에 해당하지 않기에)
6. 다음 코드에 대해 답하라.
(1) this( )를 이용하여 생성자를 수정하라.
class TV {
int size;
String manufacturer;
public TV() {
this(32,"LG");
}
public TV(String manufacturer) {
this(32,manufacturer);
}
public TV(int size, String manufacturer) {
this.size = size;
this.manufacturer = manufacturer;
System.out.println(size+"인치 "+manufacturer);
}
}
(2) new TV( );와 new TV("삼성");을 실행하면 실행 결과는 각각 무엇인가?
답 : 32인치 LG
32인치 삼성
(3) 65인치 "삼성"TV객체를 생성하는 코드를 적어라.
답 : new TV(65,"삼성");
(4) this( )를 이용하는 장점은 무엇인가?
답 : 같은 클래스 내의 생성자에서 다른 생성자를 호출하여 사용 가능하게 한다.
7. 다음 클래스에서는 컴파일 오류가 있다. 오류 부분을 지적하고 오류를 수정할 수 있는 방법을 모두 제시하라. 그리고 그 중 객체 지향 프로그래밍에 가장 적합한 방법을 설명하라.
답 : aPerson.age = 17; 부분
이유 : age 변수는 접근지정자가 private이기에 같은 패키지에 있는 클래스여도 접근할 수 없는데 접근하였기 때문에
수정 방법
class Power{
private int age;
public int getAge() {
return age;
}
public void setAge(int age)
{
this.age = age;
}
}
getAge 메소드를 통해 age 를 출력하고 생성하고 setAge 메소드를 통해 age 값을 초기화 및 변경할 수 있다.
8. 다음 코드를 객체 지향 프로그래밍 관점에서 바람직한 코드로 수정하라.
(1) 생성자를 이용하여 수정하라.
class Power{
private int kick;
private int punch;
public Power(int kick, int punch) {
this.kick = kick;
this.punch = punch;
}
public class Example {
public static void main(string[] args){
Power robot = new Power(10,20);
}
}
(2) 생성자 대신 메소드를 추가하여 수정하라.
class Power{
private int kick;
private int punch;
public getA(int kick, int punch){
this.kick = kick;
this.punch = punch;
}
public class Example {
public static void main(string[] args){
Power robot = new Power();
robot.getA(10,20);
}
}
9. 다음은 객체 소멸에 대한 설명이다. 보기에서 빈칸에 적절한 말을 삽입하라.
자바에서는 객체를 임의로 소멸시킬 수 없으며, 이것은 개발자에게 매우 다행한 일이다. 참조하는 레퍼런스가 하나도 없는 객체 를 가비지라고 판단하고 이를 가용 메모리로 자동 수집하는 가비지 컬렉션을 진행시킨다. 응용프로그램에서 자바 플랫폼에게 이 과정을 지시하고자 하면 System.gc(); 코드를 호출하면 된다. |
10. 다음 코드가 실행될 때 가비지가 발생하는가? 만일 발생한다면 발생하는 위치와 과정을 설명하라.
(1) 답 : 가비지가 발생한다.
for 문에서 n=0 일 때는 가비지가 생기지 않지만 n=1,n=2,n=3...을 거듭할 수록 가비지가 발생하며 for문이 다 실행된 후에는 레퍼런스 s는 Hello9 가 있는 객체를 참조하게 되어 그 전에 있던 Hello0부터 Hello8까지 모두 가비지가 된다.
(2) 답 : 가비지가 발생하지 않는다.
11. 다음 클래스에서 멤버 함수의 사용이 잘못된 것은?
답 : 4번 ( static 함수인 g() 함수가 non-static인 getB() 함수를 리턴하기 때문에)
12. 다음 코드에서 잘못된 문장은?
답 : 1번 (변수 x는 non-static 변수이기 때문에 객체가 생성되지 않으면 접근할 수 없다.)
13. 다음 소스에 틀린 부분이 있는지 판단하라. 만일 있다면 수정하라.
답 : int sum = f(2,4); 부분 (non-static 메소드에 접근할 수 없으므로)
수정 : public int f 부분을 public static int f 로 수정해야한다.
14. 다음 코드에는 final과 관련하여 3가지 잘못된 것이 있다. 잘못된 내용을 설명하라.
답 :
1. Rect 클래스가 final 클래스이므로 상속이 불가능하지만 class SpecialRect extends Rect 에서 상속받는 걸로 나온다.
2. 변수 x 는 final 로 선언되어 상수가 되지만 f() 함수에서 x++; 를 하는 건 잘못 되었다.
3. f() 함수는 final 함수이므로 오버라이딩이 불가하지만 SpecialRect 클래스에서 오버라이딩을 하였다.