본문 바로가기
카테고리 없음

2023 정보처리기사 실기 1회 프로그래밍 문제 해설(17번, 20번)

by picker_life 2024. 3. 12.
반응형

2023 정보처리기사 실기 1회 17번

 

문제

17. 자바 코드 출력 값 작성.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
abstact class Vehicle {
 
    String name;
    abstract public String getName(String val);
 
    public String getName() {
            return "Vehicle name: " + name;
    }
}
 
 
 
class Car extends Vehicle {
 
    public Car(String val) {
            name=super.name=val;
    }
 
    public String getName(String val) {
            return "Car name:" + val;
    }
 
    public String getName(byte val[]) {
            return "Car name:" + val;
    }
}
 
 
public class Main {
 
    public static void main(String[] args) {
 
    Vehicle obj = new Car("Spark");
    System.out.println(obj.getName());
 
    }
}
cs

 

정답

Vehicle name: Spark

 

해설

 

main 메소드 내에서, "Spark"라는 이름으로 Car 인스턴스가 생성된다. 이 인스턴스는 Vehicle 참조인 obj로 참조된다.

  1. Vehicle obj = new Car("Spark");는 이름이 "Spark"로 초기화된 Car의 새 인스턴스를 생성한다. Car 클래스의 생성자는 이 값을 슈퍼클래스 Vehicle의 name 필드에 할당한다.
  2. System.out.println(obj.getName());는 이 인스턴스에 대해 getName() 메소드를 호출한다. 인자가 제공되지 않았으므로, Car 클래스에서 인자가 필요한 getName(String val) 메소드는 호출되지 않고, getName(byte[] val)도 마찬가지로 적용되지 않으므로 (Car에서 요구하는 바이트 배열이 아니기 때문에), Vehicle 클래스의 매개변수 없는 getName() 메소드가 호출된다.
  3. 여기서 핵심은 매개변수 없이 Vehicle 클래스에서 getName() 메소드가 호출되며, 이는 "Vehicle name: " 문자열과 name 필드의 값인 "Spark"가 연결된 결과를 반환한다.

 

 

2023 정보처리기사 실기 1회 20번

 

문제

20. 자바 코드 출력 값 작성.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
class Parent {
    int x = 100;
 
    Parent() {
        this(500);
    }
 
    Parent(int x) {
        this.x = x;
    }
 
    int getX() {
        return x;
    }
}
 
class Child extends Parent {
    int x = 4000;
    
    Child() {
        this(5000);
    }
 
    Child(int x) {
        this.x = x;
    }
}
 
public class Main {
    public static void main(String[] args) {
        Child obj = new Child();
        System.out.println(obj.getX());
    }
}
 
cs

 

 

 

정답

500

 

해설

  1. Child 클래스의 인스턴스 obj가 기본 생성자 Child()를 사용하여 생성된다.
  2. Child의 기본 생성자는 this(5000);을 호출하여 같은 클래스의 다른 생성자 Child(int x)를 호출한다.
  3. Child(int x) 생성자는 this.x = x;를 통해 Child 클래스의 x 필드에 5000을 할당한다. 여기서의 this.x는 Child 클래스 내부의 x를 가리킨다.
  4. Child 클래스의 생성자 내에서 Parent 클래스의 생성자는 명시적으로 호출되지 않으므로, Child 클래스 객체가 생성될 때 Parent 클래스의 기본 생성자 Parent()가 자동으로 호출된다.
  5. 그러나 Parent의 기본 생성자는 this(500);을 사용하여 같은 클래스의 다른 생성자 Parent(int x)를 호출한다. 따라서 Parent 클래스의 x 필드는 500으로 설정된다.
  6. System.out.println(obj.getX());는 getX() 메서드를 호출한다. 이 메서드는 Parent 클래스에 정의되어 있으며, Parent 클래스의 x 필드 값을 반환한다.

결론적으로, obj.getX()는 Parent 클래스의 x 값을 반환한다. Parent 클래스의 x는 생성자를 통해 500으로 설정되었다. 따라서 프로그램의 출력값은 500이 된다.