문제와 해답은 직접 작성한 것으로 오타가 있을 수도 있으며 해답역시 틀린 부분이 있을 수 있습니다. 틀린 부분에 대한 지적은 적극 수용하도록 하겠습니다. 문제를 먼저 풀어보시고 참고용으로만 봐주시길 바랍니다.



연습문제 4장

1. 자바의 클래스와 객체에 대한 설명 중 틀린 것은?
① 객체를 인스턴스라고도 부른다.
② 클래스는 객체를 생성하기 위한 틀이다.
③ 클래스는 필드와 메소드로 구성된다.
④ 클래스의 필드들은 private 보다는 public으로 선언하는 것이 바람직하다.
객체 지향에 위배되는 사항이다.


2. 생성자에 대한 설명 중 잘못된 것은?
① 한 클래스에 여러 개의 생성자가 있어도 된다.
② this()는 생성자에서 다른 생성자를 호출하는 코드이다.
③ 생성자에서는 this 레퍼런스를 사용할 수 없다.
④ 생성자는 객체 당 오직 한 번만 호출된다.


3. 다음 중 Circle 클래스의 배열 생성 문에서 오류가 없는 것은?
① Circle c[] = new Circle[]; Array initializer
② Circle []c = new Circle(); Type mismatch
③ Circle []c = new Circle[5];
④ Circle c[] = new Circle[5](); Type mismatch


4. 다음은 static 멤버에 대한 설명이다. 보기에서 빈칸에 적절한 말을 삽입하라.

static 멤버는 클래스 멤버라고도 불리며, 동일한 클래스의 모든 객체들에 의해 공유된다. static 멤머는 개체 레퍼런스나 클래스 이름으로도 접근할 수 있으며, 객체가 생성되기 전 프로그램이 시작될 때 생성되어 있다. 특히 static 메소드는 static 멤버들만 접근할 수 있고, this을(를) 사용할 수 없는 제약 사항이 있다.


5. 다음은 메소드 오버로딩이 성공한 사례인가, 실패한 사례인가?

1
2
3
4
5
class A {
    int x;
    void f(int x) {this.x = x; }
    int f(int x, int y) { return x*y; }
}

성공한 사례다. 메소드의 매개변수의 갯수가 다르기 때문이다.


6. 다음은 객체 소멸에 대한 설명이다. 보기에서 빈칸에 적절한 말을 삽입하라.

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


7. 다음 소스에 오류는 없지만, 객체 지향 프로그래밍 관점에서 바람직한 코드로 수정하라.

1
2
3
4
5
6
7
8
9
10
class Person {
    public int age;
}

public class Example {
    public static void main(String args[]) {
        Person a = new Person();
        a.age = 17;
    }
}

위 코드를 아래와 같이 변경

1
2
3
4
5
6
7
8
9
10
11
12
class Person {
    private int age;
    Person(int age) {
        this.age = age;
    }
}

public class Example {
    public static void main(String args[]) {
        Person a = new Person(17);
    }
}


8. 다음 프로그램의 실행 결과는 무엇인가?

1
2
3
4
5
6
7
8
9
10
11
12
13
class Number {
    int n;
    public Number(int n) { this.n = n; }
}

public class Example {
    static void plusTen(Number x) { x.n += 10; }
    public static void main(String args[]) {
        Number ob = new Number(5);
        plusTem(ob);
        system.out.println(ob.n);
    }
} 

15


9. 다음 Rectangle 클래스의 두 생성자를 this()가 없는 코드로 바꾸어라.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Rectangle {
    int w,h;
    Rectangle(int w, int h) {
        this.w = w; this.h = h;
    }
    Rectangle(int w) {
        this(w,2); // Change to a different code instead of the this()
        // My Answer : this.w = w; this.h = 2;
    }
    Rectangle() {
        this(1); // Change to a different code instead of the this()
        // My Answer : this.w = 1; this.h = 2;
    }
}


10. 다음 중 가비지가 발생하는 것은?(생략)
①②③


11. 다음 멤버 함수의 사용이 잘못된 것은?

1
2
3
4
5
6
7
8
public class StaticTest {
    static int a;
    static int getA() { return a; } // 1
    int b;
    int getB() { return b; } // 2
    int f() { return getA(); } // 3
    static int g() { return getB(); } // 4
}

④ : g()함수는 static이지만 getB()는 static으로 생성되지 않았기 때문


12. 다음 코드에서 잘못된 문장은?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class StaticSample {
    int x;
    static int y;
    static int f() { return y; }
}

public class UsingStatic {
    public static void main(Stirng [] args) {
        StaticSample.x = 5; // 1
        StaticSample.y = 10; // 2
        int tmep = StaticSample.f(); // 3
        StaticSample a = new StaticSample();
        temp = a.y; // 4
    }
}

① : 변수 x는 static이 아니므로 동적생성 후 사용해야 한다.


WRITTEN BY

배진오

소비적인 일보단 생산적인 일을 추구하며, 좋아하는 일을 잘하고 싶어합니다 :D
im@baejino.com