JAVA/JAVA 문제풀이

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

공부 기록장 2023. 7. 4. 20:14

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 클래스에서 오버라이딩을 하였다.