[Unity] 가변인자

spixychz·2025년 2월 19일

Unity

목록 보기
1/15

메소드의 매개변수

만약 어떤 메소드를 정의할 때, 매개변수 갯수가 가변적으로 변해야 할 때. 가변인자를 사용하자.

오버로딩

예를 들어 정수들의 합을 반환하는 메소드를 정의한다고 해보자.

int GetSum(int a) { }
int GetSum(int a, int b) { }
int GetSum(int a, int b, int c) { }

...

이런식으로 오버로딩으로 구현할 수도 있겠다.
하지만 인자가 10개, 20개 이상 쌓이면 오버로딩으로는 해결되지 않을 것 같다.

파라미터를 리스트로

int GetSum(List<int> numbers) { }

훨씬 간단하다. 오버로딩도 하지 않는다.
하지만 이 메소드에서 사용하기 위한 리스트를 매번 할당하는 것이 비효율적일 것 같다.

가변인자

가변 인자란 무엇일까?
parmas 키워드를 사용해 매개변수 갯수의 제한을 없애는 것

사용방법은 간단하다.
메소드를 선언할 때 params 키워드와 데이터 타입을 1차원 배열로 선언을 해주면 된다.
메소드를 호출할 때 배열로 보내지 않고, 인자를 쉼표로 구분해주면된다. (배열도 가능)

이제는 가변인자를 사용해보자.

int GetSum(params int[] numbers) { }

int sum = GetSum(1, 2, 3, 4, 5);

상당히 많이 개선되었다. 유용하게 사용하자.


  • 배열의 크기가 0이 되어도 상관없다.
  • 추가적으로 다른 매개변수가 필요하다면, params가 맨 뒤로 들어가야 한다. 어디까지가 params 인자인지 모르기 때문이다.
    • int GetSum(bool isLog, params int[] numbers) { }
  • (params object[] parameters) 이런식으로 object로 가변인자를 받는 것도 가능하다. 여러 데이터 타입을 받은 후, parameters[i].GetType().Equals(typeof(---)) 이런 식으로 타입 매핑도 가능하다는 점을 알아두자.

주의사항

후에 더 알아보니 성능상으로 이득을 볼 수는 없을 것 같다.
인수로 받은 배열을 힙 메모리에 할당해두기 때문이다.
자주 사용하는 메소드는 미리 정의해두자.


참조

Microsoft Learn

profile
UNITY로 게임 개발하는 사람

0개의 댓글