프로그래밍을 하다보면 꽤 많은 인자를 넘겨줘야 하는 경우가 생긴다.
다음의 예를 보자. 인자로 GameObject형을 4개를 받고있다.
using UnityEngine;
public class TestClass : MonoBehaviour
{
void Start()
{
var cat = new GameObject();
var dog = new GameObject();
Animal(cat, dog, null, null); // 함수의 인자를 모두 쓰지않으면 오류가 난다.
}
public void Animal(GameObject obj1, GameObject obj2, GameObject obj3, GameObject obj4)
{
}
}
하지만 인자가 null일 경우엔 예외처리를 해놔서, 앞의 두개만 넘겨주고 싶은 경우가 있다.
단순하게 생각하면 오버로딩을 통해 아래와 같이 구현할 수 있겠다.
public void Animal(GameObject obj1, GameObject obj2) // 인자를 두개만 받는다.
{
Animal(obj1, obj2, null, null); // 자동으로 null 값을 채워준다.
}
public void Animal(GameObject obj1, GameObject obj2, GameObject obj3, GameObject obj4)
{
}
하지만 인자를 한개만 넘겨줄 경우, 세개를 넘겨줄경우를 전부 오버로딩으로 구현하기에는 쓸데없는 코드가 많아진다.
함수의 인자를 선언하면서 초기화를 같이 해주면, 해당 값이 넘어오지 않는 경우에는 초기화 한 값으로 채워진다!
using UnityEngine;
public class TestClass : MonoBehaviour
{
void Start()
{
var cat = new GameObject();
var dog = new GameObject();
Animal(cat, dog); // 함수의 인자를 두개만 써도 쓰지않으면 오류가 나지 않는다.
}
// 인자가 초기화를 겸한다.
public void Animal(GameObject obj1 = null, GameObject obj2 = null, GameObject obj3 = null, GameObject obj4 = null)
{
}
}
하지만 여기서도 문제는 발생한다.
순서대로라면 가능하지만, 만약 마지막 자리 수만 넣어주고 싶은 경우에는 앞 세 인자를 null로 써줄 수 밖에없다.
함수를 호출 할 때 특정 이름을 지정해서 인자로 값을 넘겨줄수 있다!
using UnityEngine;
public class TestClass : MonoBehaviour
{
void Start()
{
var cat = new GameObject();
var dog = new GameObject();
Animal(cat, obj4: dog); // 첫번째 인자와, 이름지정된 인자를 한개 넘겨준다.
}
// 인자가 초기화를 겸한다.
public void Animal(GameObject obj1 = null, GameObject obj2 = null, GameObject obj3 = null, GameObject obj4 = null)
{
if (obj1 == null)
Debug.Log("obj1 is null");
else
Debug.Log("obj1 isn't null");
if (obj2 == null)
Debug.Log("obj2 is null");
else
Debug.Log("obj2 isn't null");
if (obj3 == null)
Debug.Log("obj3 is null");
else
Debug.Log("obj3 isn't null");
if (obj4 == null)
Debug.Log("obj4 is null");
else
Debug.Log("obj4 isn't null");
}
}
[ 출력값 ]
'🌍 C# Study > C# 케이스 스터디' 카테고리의 다른 글
List<T> Sort (0) | 2019.12.10 |
---|---|
확장 메서드 (0) | 2019.10.02 |
C# 글자 표기 문자 형식 string.Format / ToString (0) | 2019.09.07 |
배열Array 초기화 / 리스트List 초기화 / 배열의 복사 / 리스트의 복사 (0) | 2019.07.07 |
Rectangular Array (다차원 배열) / Jagged Array(가변 배열) (0) | 2019.07.07 |