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

static 메소드는 왜 오버라이딩이 불가능한가?

by silvertogold100 2025. 8. 6.
반응형

메소드 오버라이딩

  • 부모 클래스에서 정의된 메소드를 자식 클래스에서 재정의하는 것을 의미함.
    • 오버라이딩은 인스턴스 메소드에서만 가능함. 다형성(polymorphism)의 핵심 개념으로, 부모 클래스의 메소드를 자식 클래스에서 재정의하는 것
    • 동작 방식: 컴파일 시점이 아닌 런타임 시점에 호출될 메소드가 결정됨. 즉, Parent p = new Child();와 같이 선언했을 때, p.method()를 호출하면 실제 객체인 Child의 메소드가 실행됨.

static 메소드의 특징

static 메소드는 클래스에 종속된 메소드입니다.

  • 동작 방식: 인스턴스에 종속되지 않고 클래스 이름으로 호출됩니다. 컴파일러는 컴파일 시점에 어떤 메소드를 호출할지 미리 결정함.

static 메소드는 왜 오버라이딩이 불가능한가?

오버라이딩은 런타임에 동적으로 메소드를 찾아가는 반면, static 메소드는 컴파일 시점에 정적으로 결정됨. 즉, 이 두 가지 메커니즘은 서로 상충하기 때문에 static 메소드는 오버라이딩될 수 없습니다.

대신, static 메소드에 한해서는 메소드 숨기기(Method Hiding) 개념이 적용됩니다.

메소드 숨기기(Method Hiding)

부모 클래스의 static 메소드와 똑같은 이름, 매개변수, 반환형을 가진 static 메소드를 자식 클래스에서 정의하면, 부모 클래스의 메소드는 자식 클래스에서 '가려지게' 됩니다.

  • Parent.staticMethod()를 호출하면 부모의 메소드가 실행됩니다.
  • Child.staticMethod()를 호출하면 자식의 메소드가 실행됩니다.
  • Parent p = new Child(); 상태에서 p.staticMethod()를 호출하면, 여전히 부모 클래스의 메소드가 실행됩니다. 이는 컴파일러가 변수 타입(Parent)을 기준으로 메소드를 결정하기 때문
반응형