본문 바로가기

자바/명품 자바 프로그래밍

명품 자바 프로그래밍 4장 이론 문제 / 2021.07.31

1. 자바의 클래스와 객체에 대한 설명 중 틀린 것은?
④ private으로 선언하는 것이 바람직하다.

2. 생성자에 대한 설명 중 틀린것은?
④ 생성자는 return 문을 사용할 수 있으나 값을 리턴해서는 안된다.

3. 다음 코드 중 오류가 있는 것은?


4. 다음 코드에 대해 설명하는 문항 중 틀린 것은?
② Book 객체에 대한 레퍼런스가 10개 만들어진다.

5. 다음 중 메소드 오버로딩에 실패한 사례는?
① 메소드 이름과 매개변수 개수, 타입이 모두 같으므로 메소드 오버로딩 실패
리턴 타입이 다른 건 상관없음.

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("삼성");을 실행하면 실행 결과는 각각 무엇인가?
new TV( ); = 32인치 LG
new TV("삼성"); = 32인치 삼성
(3) 65인치 "삼성"TV객체를 생성하는 코드를 적어라.
new TV(65, "삼성");
(4) this( )를 이용하는 장점은 무엇인가?
같은 클래스 내의 다른 생성자를 사용할 수 있다.

7. 다음 클래스에서는 컴파일 오류가 있다. 오류 부분을 지적하고 오류를 수정할 수 있는 방법을 모두 제시하라. 그리고 그 중 객체 지향 프로그래밍에 가장 적합한 방법을 설명하라.
int age가 private로 선언이 되어있기 때문에 aPerson.age = 17; 부분에서 오류가 발생한다.
이 경우에는 getter setter메서드를 이용해야 하는데

1
2
3
4
5
6
7
8
 
public int getAge() {
    return age;
}
 
public void setAge(int age) {
    this.age = age;
}
cs

메서드를 위 와 같이 정의하고, 오류가 발생한 부분을

1
aPerson.setAge(17);
cs

이렇게 바꾸어주면 된다.


8. 다음 코드를 객체 지향 프로그래밍 관점에서 바람직한 코드로 수정하라.
(1) 생성자를 이용하여 수정하라.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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(1020);
    }
}
cs


(2) 생성자 대신 메소드를 추가하여 수정하라.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Power{
    private int kick;
    private int punch;
    public void set(int kick, int punch) {
        this.kick = kick;
        this.punch = punch;
    }
}
 
public class Example{
    public static void main(String[] args) {
        Power robot = new Power();
        robot.set(1020);
    }
}
cs



9. 다음은 객체 소멸에 대한 설명이다. 보기에서 빈칸에 적절한 말을 삽입하라.
자바에서는 객체를 임의로 소멸시킬 수 없으며, 이것은 개발자에게 매우 다행한 일이다.
참조하는 레퍼런스가 하나도 없는 객체를 가비지라고 판단하고,
이를 가용 메모리로 자동 수집하는 가비지 컬렉션을 진행시킨다. 응용프로그램에서
자바 플랫폼에 이 과정을 지시하고자 하면 System.gc( ) 코드를 호출하면 된다.

10. 다음 코드가 실행될 때 가비지가 발생하는가? 만일 발생한다면 발생하는 위치와 과정을 설명하라.
(1) s = new String("Hello"+n); 에서 가비지가 발생한다.
for 문에서 n이 0일 때는 가비지가 발생하지 않지만, n이 1 ~ 9일 때 s는 새로운 String객체를 가리키게 되어 이전에
생성된 String객체는 가비지가 된다.
(2) 가비지가 발생하지않는다.

11. 다음 클래스에서 멤버 함수의 사용이 잘못된 것은?
④ static int g( ) { return getB(); }
g함수는 static인데 getB는 static함수가 아니므로 오류가 난다

12. 다음 코드에서 잘못된 문장은?
① non-static 멤버는 클래스 이름으로 접근할 수 없다.

13. 다음 소스에 틀린 부분이 있는지 판단하라. 만일 있다면 수정하라.
main함수가 static 타입이기때문에 함수 f를 호출하려면 f도 static 타입이여야함.
수정 : static public int f(int a, int b) { return a + b; }

14. 다음 코드에는 final과 관련하여 3가지 잘못된 것이 있다. 잘못된 내용을 설명하라.

1
2
3
4
5
6
7
8
9
10
11
12
final class  Rect{
    final protected int x = 5;
    final public void f() {
        x++// x가 final이므로 x값 변경 불가
        System.out.print(x);
    }
}
class SpecialRect extends Rect{ // Rect가 final이므로 상속 불가능
    public void f() {   // Rect의 f()가 final이므로 오버라이딩 불가
        System.out.print(super.x);
    }
}
cs


15. 가비지와 가비지 컬렉션은 표준 C나 C++에는 없는 자바 언어의 독특한 특성이다. 가비지란 무엇인지,
자바에서는 왜 가비지 컬렉션이 필요한지, 가비지 컬렉션이 개발자에게 주는 장점과 단점은 무엇인지 설명하라.
* 책 해설 참고
new 연산자를 이용하여 시스템으로부터 할당받아 사용하다 더 이상 사용하지 않는 객체나 배열 메모리를 가비지라 한다. 가비지가 많아지면 상대적으로 자바 가상 기계에서 응용프로그램에세 할당해 줄 수 있는 가용 메모리의 양이 줄어들어 자바 응용프로그램의 실행에 영향을 줄 수 있으므로 자바 가상 기계는 가용 공간이 일정 크기 이하로 줄어들게 되면 자동으로 가비지를 회수하여 가용 메모리 공간을 늘린다. 이러한 가비지 컬렉션 때문에 개발자는 할당받은 메모리를 반환하는 코딩 부담을 덜게 된다.

16. 다음 표를 완성하라. 멤버가 4가지 접근 지정자로 각각 선언되었을 때, 같은 패키지의 클래스와 다른 패키지의 클래스에서 이 멤버를 접근 할 수 있는지 O, X로 표기하라.