같은 함수를 여러개 만들어두고 사용하기에는 코드량이 증가하고 번거로움이 많다.
예시 코드
int Sum(int a, int b)
{
int sum = a + b;
return sum;
}
float Sum1(float a, float b)
{
float sum = a + b:
return sum;
}
//등등
같은 더하기의 기능을 하는 sum 함수이지만, 함수의 타입이 다르다고 sum1, sum2 등 함수의 이름이 다른 여러 버전을 만들기에는 코드량이 늘어나고 일일이 이름을 바꿔줘야 하는 번거로움이 존재한다.
이 불편함을 해소하기 위해, 함수 이름은 같더라도 입력/출력이 다른 형태로 여러 버전을 미리 만들어두고 편하게 사용하기 위해 오버로드 기능을 이용한다.
예시 코드
int Sum(int a, int b)
{
int sum = a + b;
return sum;
}
//매개변수가 다른 형태
int Sum(int a, int b, int c)
{
int sum = a + b + c;
return sum;
}
//함수 타입이 다른 형태
float Sum(float a, float b)
{
float sum = a + b;
return sum;
}
같은 Sum 이라는 이름으로 선언된 함수이지만 다른 입력, 다른 출력의 형태로 이루어져있기 때문에 에러없이 정상적으로 작동한다.
이후 사용자는 Sum 함수를 호출할 때 자신이 사용하고자 하는 형태의 Sum 함수를 하나하나 찾을 필요 없이 사용하려는 매개변수를 입력해주는 것만으로도 그에 해당하는 타입의 Sum 함수가 호출된다.
A. 되긴 한다. 근데 굳이 그렇게 할 필요가 있을까?
'이름'의 개념
변수/함수 등의 이름은 그의 기능을 나타내는 상징과 같다. 프로그래머들이 변수와 함수 이름을 짓는데 상당한 시간을 소요한다는 이야기도 들릴 정도로 중요한 개념이라고 볼 수 있는 것이다.
실제로 코딩을 하다보면 내부 기능이 비슷한 변수/함수들이 다양하게 생길 수 있는데, 이때 일일이 이름을 다르게 하게 되면 이후 호출할 때 어떤 이름이 어떤 기능을 가지고 있는지 착오가 빈번히 발생할 수 있다.
따라서 이름을 같게 짓고 타입 혹은 매개변수를 다르게 하는 오버로드를 사용하여 간편하게 사용할 수 있도록 하는 것이다.
실제로 유니티에서는 기본적으로 오버로드 함수를 제공한다.
ex) 인스턴스화에서 설명한 'Instantiate()'
Instantiate(target) / Instantiate(target, target_Position) 등과 같이
같은 Instantiate 라는 이름의 함수임에도 매개변수가 다른 경우 등이 존재한다.
유니티에서 미리 만들어놓은 오버로드 함수를 우리가 제공받아 사용하는 것이다.
#8. 리스트(List) (0) | 2024.07.30 |
---|---|
#7. 정적 변수/함수(Static) (0) | 2024.07.29 |
#5. 인스턴스(Instance) (0) | 2024.07.24 |
#4. 벡터 연산 (5) | 2024.07.24 |
#3. 클래스와 오브젝트 (0) | 2024.07.18 |