유니티(Unity) 엔진의 SendMessage 계열 메소드

SendMessage 계열 메소드는 다음 장점을 가집니다.

  • 대상 스크립트의 형식을 알 필요가 없습니다.
  • 동시에 여러 스크립트의 메소드를 호출할 수 있습니다.
  • 메소드가 존재하지 않아도 됩니다.

하지만 다음 단점도 가집니다.

  • private 같은 접근 변경자를 무시해 버려서, 소스 관리에 좋지 않습니다.
  • 메소드의 이름이 맞는지 컴파일 타임에 검사할 수 없으므로, 버그가 생기기 쉽습니다.
  • 매개변수를 여러 개 전달하려면 struct나 class로 감싸야 하므로 불편합니다.
  • 각 스크립트에 있는 같은 이름의 메소드가 불리면서, 의도하지 않은 호출이 일어날 수 있습니다.
  • 느립니다.

따라서, 소수의 스크립트에만 명령을 전달하고 싶을 때엔 미리 GetComponent 계열 메소드로 스크립트를 얻어 두고 직접 호출하거나 delegate을 사용해 호출하는 게 낫습니다. 일반적으로, 프레임워크 코드가 아니라면 SendMessage 계열 메소드를 사용할 일은 거의 없습니다. 참고로, SendMessage 계열 메소드와 비슷한 리플렉션(reflection)에 대해 Effective C#: 강력한 C# 코드를 구현하는 개발지침 50가지의 item #43에서는 다음처럼 조언하고 있습니다.

대부분의 경우에 reflection을 통해서 유연성을 높이는 것보다 유지관리의 편의성을 위해서 다른 대안을 사용하는 것이 낫다.

Advertisements

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중