코딩일기/자격증

[정보처리기사] [ Java ] 자바 객체지향 기초: 상속, 오버라이딩, 업캐스팅 | 정보처리기사 실기 기출문제

jhy_2023 2024. 9. 26. 22:58
728x90
반응형

2020년 2회 정보처리기사 실기 기출문제

문제

다음은 자바 소스코드이다. 다음 밑줄에 들어갈 키워드를 쓰시오.

class parent
	public void show(){
    	system.out.println("Parent");
    }
}

class Child extends Parent{
	public void show(){
    	system.out.println("Child");
    }
}

public class good{
	public static void main(String[] args){
    	Parent pa = (______)  Child();
        pa.show();
    }
}

정답

new

반응형

해설

1. 클래스 정의

class Parent {
    public void show() {
        System.out.println("Parent");
    }
}

클래스메서드의 기본적인 구조를 나타냅니다. 이 코드는 Parent라는 부모 클래스를 정의하고, 그 클래스 안에 show()라는 메서드를 선언합니다. show() 메서드는 콘솔에 **"Parent"**라는 문자열을 출력하는 간단한 작업을 합니다.

  • class Parent: Parent라는 부모 클래스를 정의합니다.
  • public void show(): show()라는 메서드를 선언합니다. 이 메서드는 접근제어자가 public이므로 어디서나 호출할 수 있습니다.
  • System.out.println("Parent");: 이 메서드는 호출될 때 콘솔에 **"Parent"**라는 문자열을 출력합니다.

기본 개념: 클래스와 메서드

  • 클래스(Class): 객체를 생성하기 위한 청사진입니다. 속성(변수)과 동작(메서드)을 정의합니다. 이 예제에서 Parent라는 이름을 가진 클래스를 정의하고 있습니다. 이 클래스는 다른 클래스나 메인 프로그램에서 객체를 생성할 때 사용될 수 있습니다.
  • 메서드(Method): 클래스 내에서 특정 동작을 수행하는 코드의 집합입니다. 객체의 동작을 정의하는 코드 집합. 메서드는 객체가 할 수 있는 일을 나타냅니다. 여기서 show()가 하나의 메서드입니다.

2. 상속과 오버라이딩

class Child extends Parent {
    public void show() {
        System.out.println("Child");
    }
}

이 코드에서는 자바의 **상속(Inheritance)**과 오버라이딩(Overriding) 개념이 사용되었습니다.

  • class Child extends Parent: Child라는 자식 클래스가 Parent라는 부모 클래스를 상속받고 있습니다. Child 클래스는 Parent 클래스의 모든 메서드와 속성을 상속받아 사용할 수 있으며, 그 중 일부 메서드를 **재정의(오버라이딩)**할 수도 있습니다. **extends**는 자바에서 **상속(Inheritance)**을 구현할 때 사용하는 키워드입니다. 이 키워드를 통해 한 클래스가 다른 클래스의 속성과 메서드를 상속받을 수 있습니다.
  • public void show(): 자식 클래스에서 부모 클래스의 show() 메서드를 오버라이딩하고 있습니다. 부모 클래스와 같은 이름의 메서드를 선언하지만, 자식 클래스에서는 그 동작을 다르게 정의할 수 있습니다. 자식 클래스의 요구에 따라 동작을 수정해야 할 때는 오버라이딩을 통해 그 기능을 재정의할 수 있습니다.
  • System.out.println("Child");: 자식 클래스의 show() 메서드는 **"Child"**라는 문자열을 출력하도록 오버라이딩 되었습니다. 즉, Parent 클래스의 show() 메서드는 **"Parent"**를 출력하지만, Child 클래스는 같은 메서드가 **"Child"**를 출력하도록 오버라이딩하고 있습니다.

기본 개념: 상속과 오버라이딩

  • 상속(Inheritance): 자식 클래스가 부모 클래스의 모든 속성과 메서드를 물려받는 것. 상속을 통해 자식 클래스는 부모 클래스의 **속성(필드)**과 메서드를 물려받습니다. 즉, 부모 클래스에서 이미 정의한 내용을 자식 클래스에서 다시 정의할 필요 없이 사용할 수 있습니다. extends 키워드를 사용하여 상속을 구현합니다.
  • 오버라이딩(Overriding): 부모 클래스에서 정의된 메서드를 자식 클래스에서 재정의하는 것. 부모 클래스의 메서드를 덮어쓰는 방식으로 구현합니다. . 즉, 부모 클래스와 같은 이름, 같은 매개변수, 같은 반환 타입을 가진 메서드를 자식 클래스에서 다시 작성하여 새로운 동작을 정의합니다.
728x90

3. main 메서드와 업캐스팅

public class Good {
    public static void main(String[] args) {
        Parent pa = ____ Child();
        pa.show();
    }
}

 

  • public class Good: Good이라는 이름의 클래스를 선언하고, 이 클래스에는 자바 프로그램의 시작 지점인 main() 메서드가 포함되어 있습니다. main() 메서드는 자바 프로그램이 실행될 때 가장 먼저 호출되는 메서드입니다. 자바 애플리케이션의 진입점(entry point)이므로, 실행을 위해서는 반드시 포함되어야 합니다. 
  • Parent pa = ____ Child();: 이 줄이 바로 문제의 핵심입니다. 여기에는 자식 클래스의 객체를 생성하여 부모 클래스 타입 변수에 저장해야 합니다. 따라서 여기에 들어갈 키워드는 new입니다. 이 줄은 **업캐스팅(Upcasting)**을 의미합니다. 즉, 자식 클래스 Child의 객체를 부모 클래스 Parent 타입의 변수 pa에 저장하는 것입니다. 자바에서는 자식 클래스의 객체를 부모 클래스 타입의 변수에 저장할 수 있습니다.
  • new :  **new**는 자바에서 객체를 생성할 때 사용하는 키워드입니다. new 키워드는 **클래스의 생성자(constructor)**를 호출하여 새로운 객체를 생성합니다. 생성된 객체는 클래스에서 정의된 속성과 메서드를 사용할 수 있는 인스턴스가 됩니다.
  • pa.show();: 이 부분에서 pa는 부모 클래스 타입이지만, 실제로는 자식 클래스 Child의 객체를 참조하고 있기 때문에 자식 클래스에서 오버라이딩한 show() 메서드가 호출됩니다. 따라서 출력 결과는 **"Child"**가 됩니다.

 

기본 개념: 업캐스팅과 다형성

  • 업캐스팅(Upcasting): 자식 클래스의 객체를 부모 클래스 타입의 변수에 저장하는 것. 자바에서는 부모 클래스 타입의 참조 변수를 통해 자식 클래스의 객체를 다룰 수 있습니다. 자식 클래스는 부모 클래스의 특성을 모두 가지고 있기 때문에, 자식 클래스의 객체는 부모 클래스의 참조 변수로도 다룰 수 있습니다.
  • 다형성(Polymorphism): 다형성은 객체지향 프로그래밍의 중요한 개념으로, 하나의 객체가 여러 형태를 가질 수 있는 성질을 의미합니다.  업캐스팅을 통해 다형성을 구현할 수 있습니다. 여기서 pa는 부모 클래스 타입이지만, 실제로는 자식 클래스의 객체를 참조하고 있어 자식 클래스의 show() 메서드가 호출됩니다. 

기본 개념: 객체와 생성자

  • 객체(Object): 객체는 클래스의 인스턴스입니다. 클래스는 객체의 청사진으로, new 키워드를 통해 실제 메모리상에 존재하는 객체를 생성합니다.
  • 생성자(Constructor): 생성자는 객체를 초기화하는 특수한 메서드입니다. new 키워드를 통해 객체가 생성될 때 호출됩니다. 생성자는 클래스와 같은 이름을 가지며, 초기화할 때 필요한 매개변수를 전달할 수 있습니다.

중요한 점

Parent pa = new Child();로 객체를 생성했을 때, 참조 변수 pa는 Parent 타입이지만, 실제로 참조하는 객체는 Child 클래스입니다. 따라서 pa.show()를 호출하면 자식 클래스에서 오버라이딩된 show() 메서드가 호출되어 **"Child"**가 출력됩니다.

정리하자면, 오버라이딩을 통해 부모 클래스의 메서드를 자식 클래스가 재정의하고, 실제 객체가 자식 클래스의 인스턴스이기 때문에 자식 클래스의 메서드가 호출되는 것입니다.


"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

728x90
반응형