다중 정의 (Overloading) , 함수 템플릿
C에서는 허용을 안하지만 C++에서만 허용하는 기능이 있다. 바로 다중 정의(Overloading)인데, 다중 정의란 동일한 이름의 함수를 여러 개 정의하는 것을 의미한다.
Add라는 동일한 이름의 함수가 3개 있는 것을 확인할 수 있다. main문에서 Add 함수에 매개변수 3,4를 넣으면 int 형 매개변수를 2개 받는 두 번째 Add 함수가 호출되고, 매개변수 3,4,5를 넣으면 int형 매개변수를 3개 받는 첫 번째 Add 함수가 호출되고, 매개변수 3.3 , 4.4를 넣으면 double형 매개변수를 2개 받는 세 번째 Add 함수가 호출된다.
여기서 다중 정의(Overloading)의 조건은
1. 매개변수의 타입이 다를 때
2. 매개변수의 개수가 다를 때
3. 매개변수의 순서가 다를 때
반환형이 다르더라도 매개변수 목록이 동일하다면 다중 정의(Overloading)이 성립되지 않는다.
함수를 다중 정의하는 이유는 사용자의 편의성과 확장성을 얻을 수 있기 때문이다. 그런데 만약 5가지 형태로 다중 정의된 함수에서 논리적 결함이 발생했다면 개발자는 적어도 5곳의 코드를 수정해야한다. 그렇기에 C++에서는 가급적이면 함수 다중 정의보다는 함수 템플릿을 사용하길 권한다.
호출자가 어떤 매개변수로 TestFunc()함수를 호출하는가에 따라 자동으로 다중 정의가 이루어진다.
여기서 typename은 자료형을 의미하고, 이어진 T는 자료형이다. 템플릿은 일종의 '틀'이며 마치 판화의 틀을 만들어 여러 장의 판화를 인쇄하는 것과 같다.