* 오버로딩 (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)
'IT공부' 카테고리의 다른 글
[C#] 추상 클래스와 인터페이스의 차이 (0) | 2025.04.14 |
---|---|
[C#] 문자열 리터럴 vs 참조 타입 문자열 (0) | 2025.04.10 |
[ETC] 자바는 JVM 생략 OK, C#은 왜 .NET까지 묶일까? (0) | 2025.04.10 |
[C++] const T&(읽기 전용 참조), T&&(우변 참조, 이동 가능) (0) | 2025.03.22 |
[C++] 참조값 리턴 (0) | 2025.03.22 |