Camp/T.I.L.

[TIL #26] 함수 오버로딩의 함정

BVM 2024. 10. 18. 23:50

정처기 실기 문제엔 다음과 같은 유형의 프로그래밍 문제가 나온다.

 

// 다음 프로그램의 실행 순서가 어떻게 되는지 맞춰라!
// 5 -> ...

class Parent {
    int x, y;

    Parent(int x, int y) { // 1
        this.x = x;
        this.y = y;
    }

    int getT() { // 2
        return x * y;
    }
}

class Child extends Parent {
    int x;

    Child(int x) { // 3
        super(x + 1, x);
        this.x = x;
    }

    int getT(int n) { // 4
        return super.getT() + n;
    }
}

class Main {
    public static void main(String[] args) { // 5
        Parent parent = new Child(3); // 6
        System.out.println(parent.getT()); // 7
    }
}

항상 이런 오버로딩/오버라이딩 관련 문제로 수험자들을 낚으려고 한다.

답은 ``5 -> 6 -> 3 -> 1 -> 7 -> 2``가 된다.

 

``Parent``에 있는 ``get()``가 ``Child``에서 ``getT(int n)``으로 오버로딩 됐기 때문이다.

같은 ``getT``라는 이름을 가지지만 받는 파라미터의 수가 다르다.

그래서 별개의 함수로 취급이 된다.

 

나도 별 생각이 없었다가 실기를 준비하다 보니 아차 싶었던 부분이다.

학교에서도 나름 힘주면서 교수님이 설명했었던 개념이기도 했다.

모의고사에서 한두번 정도 낚여준 것 같다...

 

함수 내부가 재정의 되는 것은 물론이고 파라미터도 중요한 점이기 때문에,

이런 문제에 절대 낚여선 안 되겠다.