1학년 2학기때 객체지향프로그래밍이라는 과목을 들으면서 굉장히 개념이 헷갈렸던 단어들이다.

오버로딩(Overloading)과 오버라이딩(Overriding)

어감이 비슷하여 시험볼때 두개의 용어를 설명하여라 라는 문제 앞에서 얼마나 고민을 했던가?

Accelerated C++이란 책을 보면서 갑자기 생각이 나버렸다.

Winapi.co.kr에서는 이렇게 설명이 되어있다.
원문 : 34-2-바.오버로딩과 오버라이딩
상속받은 멤버 함수를 재정의하는 기법을 오버라이딩(Overriding)이라고 하는데 인수 목록이 다른 함수를 같은 이름으로 중복 정의하는 오버로딩(Overloading)과는 용어가 비슷하므로 잘 구분하도록 하자. 둘 다 함수의 이름을 동일하게 작성한다는 점에서는 비슷하지만 오버로딩은 이미 있는 함수에 하나를 더 추가하는 것이고 오버라이딩은 이미 있는 함수를 무시하고 새로 만드는 것이다. 오버로딩은 한국말로 중복 정의이고 오버라이딩은 한국말로 재정의이다.

이 두 용어는 발음과 뜻이 비슷해서 혼란스럽기도 하지만 상속 계층에서 동시에 적용될 때의 효과가 다소 비상식적이어서 헷갈리기도 한다. 오버로딩이란 클래스와는 직접적인 상관이 없어서 전역 함수끼리도 오버로딩될 수 있다. 이에 비해 오버라이딩은 클래스간의 관계, 그 중에서도 상속된 부모와 자식 관계에서만 적용되며 전역 함수에 대해서는 적용되지 않는다.

클래스에서는 오버로딩과 오버라이딩이 동시에 일어날 수 있다. 클래스의 멤버 함수들끼리 중복 정의가 가능하고 또 파생 클래스에서 상속받은 멤버를 재정의하는 것도 가능하다. 그런데 파생 클래스에서 상속된 멤버 함수와 인수 목록이 다른 함수를 같은 이름으로 재정의하면 이때는 오버로딩이 적용되지 않는다. 즉, 인수 목록이 아무리 달라도 파생 클래스가 같은 이름으로 함수를 재정의하면 동일한 이름을 가지는 부모의 모든 함수들이 가려진다.


지금 C++를 복습하니까 자꾸 헷갈리는 것이 오버라이딩과 오버로딩이구나 -_-;;

C++개념을 확실히 잡고 가야지.

이글루스 가든 - 무적의 공대생이 되자!
Buy me a coffeeBuy me a coffee

+ Recent posts