IT공부

[C#] 오버라이딩 정리

shine94 2025. 4. 11. 18:01

오버로딩 (Overloading)

   같은 이름, 다른 매개변수로 메서드를 여러 개 정의(컴파일 타임 다형성)

오버라이딩 (Overriding)

  부모로부터 상속받은 메서드를 자식 클래스에서 재정의(런타임 다형성)

sealed

   더 이상 오버라이딩을 허용하지 않음(상속 제한)

 

언어별 오버라이딩 비교

  C++ Java C#
기본 상속 구조 다중 상속 단일 상속
+
다중 인터페이스
단일 상속
+
다중 인터페이스
오버라이딩 키워드 C++11 이후 override 키워드 지원
@Override override
강제성 선택 사항 선택 사항이지만
IDE나 컴파일러가 경고 권장함
필수
오버라이딩 목적 - 기능 재정의
- 다중 상속의 모호성 해결
- 기능 재정의 - 기능 재정의

 

* abstract와 virtual 비교(C# 기준)

  abstract virtual
의미 반드시 재정의해라! 기본 구현은 있지만, 필요하면 재정의해도 돼
기본 구현 여부 없음 (본문 X) 있음 (본문 O)
오버라이딩 강제성 강제 선택
선언 가능한 위치 abstract class 안에서만 가능 일반 클래스에서도 가능

 

   (+) Java

   - 모든 인스턴스 메서드는 기본적으로 가상 메서드(virtual)로 동작

      [예외] static, private, final은 인스턴스 메서드가 아님

      [따라서] virtual 메서드와 일반 메서드로 나누지 않음

   - 모든 인스턴스 메서드는 this call

      [예외] static, private, final은 인스턴스 메서드가 아님

   - final = const + readonly : 값 한 번만 할당 가능, 상속과 오버라이딩  차단

 

* 일반 함수/메서드

   오버라이딩 불가능하며, 정의한 클래스 내부에서만 의미있는 함수/메서드

   (대표적으로 C#에서 vitual이 없는 메서드)

 

* 디스패치(dispatch)

   어떤 메서드를 호출할지 결정해서 실행시키는 과정

   ㄴ 정적 디스패치 : 컴파일 시 결정 (오버로딩, 일반 호출 등)
   ㄴ 동적 디스패치 : 런타임 시 결정 (오버라이딩, virtual/abstract/interface)