본문 바로가기
유니티/개념 정리

메서드 체이닝

by fore4022 2025. 6. 30.

 나는 여러 클래스들에서 사용 가능한 유틸리티 클래스들을 만들어서 사용한다. 제작한 클래스의 메서드를 사용하는 과정에서 아래와 같은 상황이 발생했다.

(클래스A).(메서드1);
(클래스A).(메서드2);
(클래스A).(메서드3);

// 사용된 클래스와 메서드는 단순한 예시입니다.

 하나의 클래스에서 메서드 여러 개의 메서드를 사용하는 경우, 코드에서 불필요하게 줄 길이가 늘어난다고 느껴졌다.


메서드 체이닝이란?

  • 한줄에서 클래스의 메서드를 연속적으로 호출하는 것이다.
public class Test : MonoBehaviour
{
	private Collider2D col = null;
	
	public void Start()
	{
		col = transform.GetChild(0).GetChild(0).GetComponent<Collider2D>();
	}
}

 위의 예시 코드를 확인해 보면, 여러개의 메서드를 한 줄로 호출하는 것을 확인할 수 있다.


메서드 체이닝은 어떻게 구현하나요?

 이 부분에서 ‘어떻게 연속적으로 호출 가능한가?’에 대한 의문과 구현에 대해서 설명하도록 하겠다.

메서드 살펴보기


  1.  메서드는 클래스 객체(인스턴스)를 통해서 호출된다. 즉, 메서드를 호출하기 위해서는 객체가 필요하다는 것이다.

  2.  메서드는 실행 결과를 반환 형식의 값으로 사용할 수도 있고, 반환 값과 상관 없이 메서드를 호출만 할 수 있다.
public class TestObject
{
	public int MethodA()
	{
		return 1;
	}
public class TestClass : MonoBehaviour
{
	private TestObject testObject = new();
	
	public void Start()
	{
		int a = testObject.MethodA();
	
		testObject.MethodA();
	}
}

그래서 어떻게?

 위의 내용을 바탕으로 하여서, 메서드를 반복적으로 실행하기 위한 방법을 정리해 보자. 우선, 결론은 아래와 같다.

"메서드의 실행 결과로 객체(자기 자신)을 반환해준다."

 우리는 객체만 있다면 메서드를 무한정 호출할 수 있다.

"그러면 어떻게 객체에 접근해야 할까?"

 ‘메서드 호출 이후’라는 것은 즉, 메서드의 실행이 끝나서 값이 반환되었다는 것이다. 그렇다면 메서드 체이닝을 위해서 반환해 주어야 할 값/타입은 객체가 된다.

public (객체 타입) MethodA()
{
	(메서드 구현)
	
	return this(자기 자신);
}

 반환 값으로 객체를 넘겨 주는 것에서 기억해야 할 점은, 꼭 메서드의 주체가 되는 객체(자기 자신)을 반환해 주어야 한다는 것이다.

 만약에 새로운 객체를 만들어서 반환하게 되면, 기존 객체의 값에 영향을 받지 않기 때문에 실행 결과가 다르게 되며, 새로운 객체를 만들어 메서드를 호출하는 것과 다를게 없기 때문에, 메서드 체이닝이라 볼 수 없다.

결론

 메서드가 실행되고, 반환된 객체(자기 자신)을 통해서 다시 메서드를 호출할 수 있다.

구현 예시

public class TestObject
{
	public TestObject MethodA(string str)
	{
		Debug.Log(str);
	
		return this;
	}
	public TestObject MethodB(int i)
	{
		Debug.Log(i);
		
		return this;
	}
}
public class TestClass : MonoBehaviour
{
	private TestObject testObject = new();

	public void Start()
	{
		testObject.MethodA("Unity").MethodB(6);
	}
}
실행 결과 : Unity6

마무리하며

 여러분들도 어떤 상황에 마주했을 때 그냥 넘기는 것이 아니라, 발전 시킬 기회로 사용했으면 좋겠습니다.

 저는 아직도 프로젝트를 진행하면서, 부족하다는 생각이 듭니다. 그래도 하나씩 개선해 나가는 것에서, 뿌듯함을 느끼면서 개발합니다.

'유니티 > 개념 정리' 카테고리의 다른 글

Dependency Injection  (0) 2025.07.10
확장 메서드  (3) 2025.07.02
SerializedProperty  (0) 2025.04.28
Custom Editor  (0) 2025.04.28
const와 readonly  (0) 2025.04.01