JAVA/명품 JAVA Programming

[(개정판 4판) 명품 JAVA Programming] 4장 이론 문제

최옥구 2023. 1. 27. 23:00
반응형

1. 자바의 클래스와 객체에 대한 설명 중 틀린 것은? - 4번

 

2. 생성자에 대한 설명 중 틀린 것은? - 4번

 

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

 

4. 다음 코드에 대해 설명하는 문항 중 틀린 것은? 

Book book[] = new Book[10];

- 2번 / book 객체가 10개 만들어진 것이 아니라, 객체를 넣기 위한 배열을 선언한 것이다. 객체 배열을 완성하기 위해서는 각 배열에 객체를 넣어주어야 한다.

 

5. 다음 중 메소드 오버로딩에 실패한 사례는? - 1번 /  입력받는 변수의 개수와 타입이 일치한다. 따라서 오버로딩을 할 수 없다.

 

6. 다음 코드에 대해 답하라. 

class TV{
	private int size;
	private String manufacturer;
	public TV() {
		size = 32;
		manufacturer = "LG";
		System.out.println(size + "인치" + manufacturer);
	}
	public TV(String manufacturer) {
		this.size = 32;
		this.manufacturer = manufacturer;
		System.out.println(size + "인치" + manufacturer);
    }
	public TV(int size, String manufacturer) {
		this.size = size;
		this.manufacturer = manufacturer;
		System.out.println(size + "인치" + manufacturer);
	}
}

(1) this()를 이용하여 생성자를 수정하라.

class TV{
	private int size;
	private 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 객체를 생성하는 코드를 적어라.

TV tv = new TV(65, "삼성");

 

(4) this()를 이용하는 장점은 무엇인가?

- 반복되는 생성자 함수를 사용할 수 있어서 중복 프로그램 재작성의 노고를 줄일 수 있다. 

 

7. 다음 클래스에는 컴파일 오류가 있다. 오류 부분을 지적하고 오류를 수정할 수 있는 방법을 모두 제시하라. 그리고 그중 객체지향 프로그래밍에 가장 적합한 방법을 설명하라. 

class Person{
	private int age;
}	
public class Example{
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Person person = new Person();
		aPerson.age = 17;
	}
}

- Person 클래스의 age는 private으로 선언되어있어, 외부에서 호출을 하거나 값을 변경할 수 없다. 따라서 객체 지향 프로그래밍의 캡슐화를 유지하면서 필드를 사용하기 위해서는 public으로 선언된 메서드를 사용하여 거쳐가면 된다. 

class Person{
	private int age;
	
	public void ageChange(int age) {
		this.age = age;
	}
}	

public class Example{
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Person aPerson = new Person();
		aPerson.ageChange(17);
	}
}

 

반응형

 

8. 다음 코드를 객체 지향 프로그래밍 관점에서 바람직한 코드로 수정하라.

class Power{
	private int kick;
	private int punch;
	
	public void setKick(int kick) {
		this.kick = kick;
	}
	public void setPunch(int punch) {
		this.punch = punch;
	}
}

public class Example{
	public static void main(String[] args) {
		Power robot = new Power();
		robot.setKick(10);
		robot.setPunch(20);
	}
}

 

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

- 소멸시킬 , 다양한, 레퍼런스, 가비지, 가비지 컬렉션, System.gc()

 

10. 다음 코드가 실행될 때 가비지가 발생하는가? 만일 발생했다면 발생하는 위치와 과정을 설명하라. 

(1) 가비지가 발생한다. 반복문이 실행되면서 Hello1, Hello2 . . . 이렇게 String s에 대입되는 문자열이 달라지면서 이전의 문자열은 가비지가 된다.

(2) c가 "aa"를 가리키고있기 때문에 가비지가 발생하지 않는다. 

 

11. 다음 클래스에서 멤버 함수의 사용이 잘못된 것은?

- 4번 / static 메소드는 non-static 메서드를 멤버로 가질 수 없다. 그 반대는 가능하다. 

 

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

- 1번 / non-static 필드와 멤버는 클래스 이름을 통해 호출할 수 없다. 반드시 객체를 생성 후 호출해야 한다. 그 이유는 객체가 생성되어야 필드와 멤버가 생성되기 때문이다. 반면 static은 프로그램 실행과 동시에 생성되기 때문에 상관이 없다.

 

13. 다음 소스에 틀린 부분이 있는지 판단하라. 만일 있으면 수정하라. 

class Test{
	public int f(int a, int b) {
		return a + b;
	}
	public static void main(String[] args) {
		Test test = new Test();
		int sum = test.f(2, 4);
	}
}

 

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

- final로 선언된 class는 상속될 수 없고, final로 선언된 함수는 오버라이딩 될 수 없으며, final로 선언된 변수는 상수를 뜻한다. 즉 선언된 후 값을 바꿀 수 없다. 코드를 보면 x++가 있는데 이는 상수의 값을 바꾸겠다는 뜻으로 말이 되지 않는다. 

 

15. 가비지와 가비지 컬렉션은 표준 C나 C++에는 없는 자바 언어의 독특한 특성이다. 가비지가 무엇인지, 자바에서는 왜 가비지 컬렉션이 필요한지, 가비지 컬렉션이 개발자에게 주는 장점과 단점이 무엇인지 설명하라

- 가비지는 메모리에는 저장되어있지만, 더 이상 사용하지 않는 쓰레기값을 말한다. C와 C++에서는 delete 키워드로 개발자가 더 이상 사용하지 않는 메모리를 명시적으로 제거해주어야 한다. 만약 이를 놓치고 쌓이게 되면 메모리 누수가 발생하여 프로그램이 무거워지거나 심한 경우 강제 종료될 수 있다. 자바에서는 이를 자동으로 처리해 줌으로써 개발자가 중점적으로 신경 써야 할 문제 하나를 덜어준 셈이다. 다만 가바지 컬렉션이 실시간으로 이루어지는 것이 아니라, JVM의 판단 하에 컬렉션을 몰아서 진행하기 때문에 프로그램이 잠깐 정지할 수 있다. 따라서 자바는 실시간 처리에는 적합하지 않을 수 있다는 단점이 있다. 

 

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

  default public protected private
같은 패키지 클래스 O O O X
다른 패키지 클래스 X O X X
반응형