C# 로컬 함수를 Unity 코루틴과 람다 대신 쓰기
요약: 함수 내부에 함수를 작성할 수 있다.
Unity 스크립트에서 쓸 만한 곳
섹션 제목: “Unity 스크립트에서 쓸 만한 곳”-
코루틴에서 시간 단위로
yield return하는 경우, 내부 메서드를 정의해yield return을 제어할 수 있다. 메서드명과 파라미터만으로 이 statement가 왜 실행되는지 주석 없이 의도를 전달할 수 있다. 타임라인 재생 같은 메서드 내부에 로컬 함수로 작성하는 식이다. -
블록 내부에 중첩 람다를 작성하면 스코프와 줄이 길어지기 쉽다. 로컬 함수로 바꾸면 람다의 기능은 그대로 쓰면서 코드 가시성을 얻는다. 또 변수를 캡처하는 람다는 클로저 객체와 델리게이트를 힙에 할당하지만, 로컬 함수는 직접 호출하는 한 캡처한 변수를 구조체로 묶어 참조로 넘기므로 힙 할당이 없다. 로컬 함수도 델리게이트로 변환해 넘기면(예: 이벤트 구독, LINQ 인자) 람다와 똑같이 힙에 할당된다. 세션 처리 클래스의 람다를 이 방식으로 바꾸는 것을 대상으로 잡았다.