overload와 중복 정의
@ http://funnyneel.com/funny-image/overload-33
객체 지향 프로그래밍을 조금이라도 학습했다면 overload란 말 역시 알고 있을 겁니다. 다형성과 연관된 것으로 형태가 같은 여러 함수 또는 메소드를 상황에 따라 호출하는 걸 말합니다. 예를 들면 다음과 같습니다.
1 2 3 4 5 6 7 8 |
void foo() { ... } // 1 void foo(int) { ... } // 2 int main() { foo(); // 1 호출 foo(1); // 2 호출 } |
이름이 같은 foo
함수가 둘이지만 컴파일과 실행할 때 오류는 발생하지 않으며 그에 맞는 함수를 호출합니다. 여기서 이를 얘기하려는 것은 아니고 번역 용어에 대해 잠시 얘기해 볼까합니다.
흔히 overload를 중복 정의로 많이 옮깁니다. 또는 오버로드란 말을 그대로 쓰기도 합니다. 중복 정의는 상당히 굳어진 용어이므로 별 거부감 없이 대부분 받아 들입니다. 다만 ODR(one definition rule)에서 얘기하는 중복(duplicate)과 겹친다는 게 문제입니다. 물론 내용상 서로 뜻하는 게 다르지만 의미를 제대로 이해하기 전까지는 헷갈릴 수도 있다고 생각합니다. 그래도 오버로드란 용어를 쓰기도 하고 류광님께서는 중복 적재란 용어를 쓴다고 합니다. 여기서 한 가지 더 생각해 볼 것은 override인데 이는 재정의란 용어로 굳어졌고 그리 문제라 할 것도 없습니다. 다만 overload와 override처럼 번역 용어 역시 함께 맞출 수 있다면 더 좋겠죠.
그래서 생각해 본 게 ‘다중 정의’입니다. 중복 정의가 너무 익숙하다보니 그에 비해 아직 어색하게 느껴지는 면이 있지만 ‘중복’이란 용어 때문에 생기는 오해도 없고 정의를 여러가지로 할 수 있음을 나타내기에 적절하다고 생각합니다. 어느 분께서는 중복이란 단어가 ‘같은 게 또 존재해 낭비가 되다’라는 느낌을 강하게 준다는 의견도 주셨는데 이 말도 동감입니다. 그래서 앞으로는 ‘다중 정의’란 용어를 사용하려 합니다.