본문 바로가기

TIL(Today I Learned)

[20230619] 오버로딩(Overloading)과 오버라이딩(Overriding)

오버로딩(Overloading)과 오버라이딩(Overriding)은 객체지향 프로그래밍에서 다형성을 구현하는 두 가지 개념이다. 그러나 오버로딩과 오버라이딩은 서로 다른 의미와 동작을 가지고 있다.

오버로딩(Overloading):

오버로딩은 같은 이름을 가진 메서드 또는 생성자를 여러 개 정의하는 것을 의미한다.
오버로딩은 메서드의 매개변수의 개수, 타입, 순서를 다르게하여 다양한 상황에 대응할 수 있도록 한다.
오버로딩은 메서드 이름은 동일하지만 매개변수 목록이 다른 메서드를 여러 개 작성하는 것을 허용한다.
컴파일러는 호출 시 전달된 인수에 기반하여 알맞은 오버로딩된 메서드를 선택한다.
오버로딩은 메서드의 기능이 유사하지만 입력값이 다른 경우에 사용된다.
오버로딩은 정적 다중 메서드 결합(static binding)에 의해 처리된다.

오버라이딩(Overriding):

오버라이딩은 상속 관계에 있는 클래스 간에 메서드를 재정의하는 것을 의미한다.
오버라이딩은 슈퍼클래스에서 이미 정의된 메서드를 서브클래스에서 동일한 시그니처(메서드 이름, 매개변수 목록, 반환 타입)로 다시 정의하는 것이다.
오버라이딩된 메서드는 슈퍼클래스의 메서드를 대체하여 다형성을 구현한다.
오버라이딩은 상속된 메서드를 자식 클래스에서 수정하거나 확장하여 사용할 수 있도록 한다.
오버라이딩은 동적 다중 메서드 결합(dynamic binding)에 의해 처리된다.
오버라이딩된 메서드는 상위 클래스의 메서드를 대체하고, 동일한 메서드 호출 시 실제 객체의 타입에 따라 실행된다.

요약하자면, 오버로딩은 메서드 이름은 같지만 매개변수 목록을 다르게 정의하는 것으로, 정적 다중 메서드 결합에 의해 처리된다. 반면에 오버라이딩은 상속 관계에서 서브클래스가 슈퍼클래스의 메서드를 재정의하는 것으로, 동적 다중 메서드 결합에 의해 처리된다.