우선
함수 오버로딩이란?
1. 똑같은 함수이름이 두개 있다.
2. 1번의 상황에서 두 함수의 매개변수가 다르다.
3. 각각 작동이 된다.
이때 이 함수를 함수 오버로딩되었다. 라고 말한다.

디폴트 인자 값이란?
1. 매개변수에 operator = 과 목적데이터를 넣는다. 예) int f(int a = 1);
이때 1은 디폴트 인자값이다.

항목 24. 함수 오버로딩과 디폴트 인자값 중에서 주의깊게 선택한다.

이유
1. C++ 특유의 함수 오버로딩과 디폴트매개변수 사이에 모호성이 발생될 수 잇다.
- 이 모호성 때문에 컴파일 타임에 에러가 발생한다.
(컴파일러 찾아주는 오류는 너무 반갑고 기분좋다.)

2. 가독성이 떨어 진다....

해결방법
1. 자신에게 자문해 본다.
- 디폴트로 이용할 값이 있는가?
- 얼마나 많은 알고리즘들을 이용하기를 원하는가?

만약 합리적인 디폴트 값이 존재하고, 한가지의 알고리즘만 채용할 것이라면
디폴트 인자를 이용한다.
아니라면 함수 오버로딩을 이용한다.

2. 오버로딩 되는 함수의 작업이 오버로딩되는 함수끼리 공통으로 쓰는 함수등의 작업이 있다면
오버로딩을 사용하게는게 좋다.


개인적인 생각
1. 디폴트 매개변수는 생성자에서 많이 사용 되는것 같다.
2. 그 외의 경우 사용할대는 그 모호성에 대해서 충분히 고려해볼 필요가 있다.
(사실 이런 생각자체가 재미있다. .. 문제를 하나씩 찾아가서 해결을 할수 있으니까.)

3. 오버로딩 할때는 가독성을 위해서 오버로딩 되는 함수 근처에 넣거나 "이 함수는 오버로딩 함수다" 라고 표시해 두는게 좋을것이라고 생각 한다. ..

posted by 농사를 짓는 게임 프로그래머 최익필

댓글을 달아 주세요