Unity 메시지 함수 최적화, 확장 메서드 [TIL 22일차]

장민제·2025년 5월 13일

내일배움캠프

목록 보기
25/41
post-thumbnail

🧹 메시지 함수 최적화

❗ 사용하지 않는 메시지 함수는 제거해야 하는 이유

  • Unity는 MonoBehaviour 인스턴스들을 모두 순회하며 Update, FixedUpdate 등 메시지 함수를 호출 가능한지 검사한다.
  • 비어있는 함수라도 존재하면 오버헤드 발생 → 프로젝트가 클수록 CPU 사용량 증가.

🔧 해결 방법

  • 사용하지 않는 메시지 함수 제거
  • 이벤트 기반 시스템 활용
    -> 필요한 시점에만 이벤트를 발생시키는 구조
  • 매니저 클래스 패턴 도입
    -> 모든 업데이트를 매니저 클래스에서 한 번에 처리
  • FixedUpdate, LateUpdate 적절히 사용
    -> 물리 연산은 FixedUpdate, 렌더링 후 처리할 로직은 LateUpdate로 분리
  • Coroutine으로 대체**
    -> Update 대신 필요할 때만 실행하는 코루틴으로 로직 처리

💾 확장 메서드 (Extension Method)

  • 기존의 클래스의 소스 코드를 수정하지 않고 새 메서드를 추가한 것처럼 수 있다.
  • 정적(static) 클래스 안에 정적 메서드로 정의되며, 첫 번째 매개변수 앞에 this 키워드를 붙이면 그것이 확장될 대상 타입이 된다.

📂 기본 구조

public static class 확장메서드를담는클래스
{
    public static 반환형식 메서드이름(this 확장할_타입 인스턴스, [추가 인자들])
    {
        // 확장 로직 작성
    }
}

📃 예시 (문자열 뒤집기)

public static class StringExtensions
{
    public static string ReverseString(this string input)
    {
        char[] charArray = input.ToCharArray();
        Array.Reverse(charArray);
        return new string(charArray);
    }
}

📃 예시 (바라보는 방향으로 회전하기)

public static void LookAtDirection(this Transform transform, Vector3 direction)
{
    if (direction != Vector3.zero)
    {
        transform.rotation = Quaternion.LookRotation(direction);
    }
}

⚠️ 주의할 점

  • 정적 클래스 안에서만 정의 가능
    • 확장 메서드는 반드시 static class 안에 있어야 함.
  • 정적 메서드로 작성
    • 확장 메서드 자체도 반드시 static이어야 함.
  • 첫 번째 매개변수는 this 키워드와 함께 확장할 타입이어야 함
  • 우선순위는 인스턴스 메서드가 더 높음
    • 클래스 내부에 같은 이름의 메서드가 있다면 그 메서드가 먼저 호출됨.

✅ 결론

확장 메서드는 Unity 개발뿐 아니라 일반적인 C# 개발에서도 재사용성과 유지보수성을 높일 수 있는 강력한 기능이다.
특히, Unity 프로젝트에서는 Transform, Vector, GameObject 등 자주 쓰는 타입에 대해 반복적으로 사용하는 로직을 확장 메서드로 정리하면 다음과 같은 이점이 있다:

  • 코드 중복을 줄이고 깔끔한 코드 작성 가능
  • 가독성 향상: 마치 클래스의 고유 메서드처럼 자연스럽게 사용할 수 있어 코드 흐름이 더 이해하기 쉬워진다
  • 유틸리티성 강화: 범용적으로 자주 사용하는 로직을 별도 유틸 클래스로 정리하면 유지보수와 테스트가 쉬워짐

앞으로의 프로젝트들에는 확장메서드나, 제네릭 등을 활용해보면서 천천히 익히면 나중에 나만의 개발 프레임워크를 만들 때 큰 도움이 될 거 같다.

profile
Unity, C#

0개의 댓글