코딩일기/자격증

[정보처리기사] [ Java ] 상속과 오버라이딩, 재귀 함수 문제 해설 | 정보처리기사 실기 기출 문제 풀이

jhy_2023 2024. 12. 17. 13:00
728x90
반응형

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

문제

다음은 Java로 작성된 프로그램이다. 이를 실행한 출력 결과를 쓰시오.

class Parent {
    public int compute(int num) {
        if (num <= 1) return num;
        return compute(num - 1) + compute(num - 2);
    }
}

class Child extends Parent {
    public int compute(int num) {
        if (num <= 1) return num;
        return compute(num - 1) + compute(num - 3);
    }
}

class Good {
    public static void main(String[] args) {
        Parent obj = new Child();
        System.out.print(obj.compute(4));
    }
}

정답

1

반응형

해설

1️⃣ 상속과 오버라이딩

📌 상속 (Inheritance)

  • Child 클래스는 Parent 클래스를 상속받습니다.
  • 상속받은 Child 클래스는 Parent 클래스의 메서드 compute를 재정의(오버라이딩)합니다.

📌 오버라이딩 (Overriding)

  • 오버라이딩이란 부모 클래스의 메서드를 자식 클래스에서 동일한 이름과 매개변수로 재정의하는 것입니다.
  • Parent 클래스의 compute 메서드는 다음과 같습니다:
public int compute(int num) {
    if (num <= 1) return num;
    return compute(num - 1) + compute(num - 2);
}
  • Child 클래스는 이를 오버라이딩하여 다음과 같이 수정했습니다:
public int compute(int num) {
    if (num <= 1) return num;
    return compute(num - 1) + compute(num - 3);
}

2️⃣ 재귀 함수

재귀 함수란 자신을 호출하는 함수입니다. 이 문제에서 compute는 조건에 따라 자기 자신을 호출하는 형태로 구현되었습니다.

3️⃣ 실행 흐름 분석

Parent obj = new Child();

 

  • 부모 클래스 타입 Parent의 참조 변수 obj가 Child 클래스의 객체를 가리킵니다.
  • 하지만 실제로 실행되는 메서드는 Child 클래스의 compute 메서드입니다.
    다형성(Polymorphism)에 의해 오버라이딩된 메서드가 호출됩니다.

 

obj.compute(4)
  • obj.compute(4)를 호출하면, Child 클래스의 compute 메서드가 동작합니다.
728x90

4️⃣ Child 클래스의 compute(4) 실행 과정

public int compute(int num) {
    if (num <= 1) return num;
    return compute(num - 1) + compute(num - 3);
}

Child 클래스의 compute 메서드는 다음과 같이 동작합니다

 

  • compute(4)
    • 조건 num <= 1은 거짓입니다.
    • 따라서 compute(4-1) + compute(4-3)compute(3) + compute(1)
  • compute(3)
    • 조건 num <= 1은 거짓입니다.
    • 따라서 compute(3-1) + compute(3-3)compute(2) + compute(0)
  • compute(2)
    • 조건 num <= 1은 거짓입니다.
    • 따라서 compute(2-1) + compute(2-3)compute(1) + compute(-1)
  • compute(1)
    • 조건 num <= 1이 참입니다.
    • 1을 반환합니다.
  • compute(0)
    • 조건 num <= 1이 참입니다.
    • 0을 반환합니다.
  • compute(-1)
    • 조건 num <= 1이 참입니다.
    • -1을 반환합니다.

 

5️⃣ 결과 값 정리

이제 각 단계의 결과를 정리하면 다음과 같습니다:

  • compute(4)compute(3) + compute(1)
    • compute(3)compute(2) + compute(0)
      • compute(2)compute(1) + compute(-1)
        • compute(1) → 1
        • compute(-1) → -1
      • 따라서 compute(2) → 1 + (-1) = 0
    • compute(0) → 0
    • 따라서 compute(3) → 0 + 0 = 0
  • compute(1) → 1

6️⃣ 최종 결과

compute(4) → compute(3) + compute(1)0 + 1 = 1

출력 결과 : 1


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

728x90
반응형