상세 컨텐츠

본문 제목

#6. 오버로드(Overload)

유니티 학습/세미나 자료

by 남민우_ 2024. 7. 28. 11:31

본문

"함수의 여러 버전을 만들어서 각종 상황에 대응한다"

1. 사용 이유

같은 함수를 여러개 만들어두고 사용하기에는 코드량이 증가하고 번거로움이 많다.

 

예시 코드

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 함수가 호출된다.

 

 1-1. Q. 그냥 함수 이름이 다르면 되지 않나?

 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

관련글 더보기