Humility

아무리 노력해도 최고가 되지 못할 수 있다⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀그럼에도 노력하는자가 가장 겸손한 것 아닌가

공부하는 블로그

유니티/문법

[Unity] 유니티 C#) 전처리문 (Preprocessor Directives)

새벽_글쓴이 2025. 1. 13. 17:53
반응형

전처리문이란?

코드가 컴파일되기 전에 처리되는 특별한 지시문


간단한 예시

#if DEBUG
Debug.Log("디버그 모드입니다");
#endif

 

위 코드에서 #if DEBUG는 "만약 DEBUG 모드라면" 이라는 의미이다

컴파일러는 이 코드를 실행하기 전에 먼저 확인한다

 

 

DEBUG 모드로 설정되어 있다면?

  • Debug.Log() 코드가 남아있게 된다

 

DEBUG 모드가 아니라면?

  • 이 코드는 완전히 제거되어 최종 프로그램에 포함되지 않습니다

전처리문의 주요 특징

  • '#' 기호로 시작한다
  • 컴파일 전에 처리된다
  • 조건부로 코드를 포함하거나 제외할 수 있다
  • 플랫폼별 다른 코드를 작성할 때 자주 사용된다

실제 활용 방법

void Start()
{
    #if UNITY_ANDROID
        // 안드로이드 전용 코드
        SetupAndroidFeatures();
    #elif UNITY_IOS
        // iOS 전용 코드
        SetupIOSFeatures();
    #endif
}

전처리문의 종류

1. 조건부 컴파일문 (#if, #elif, #else, #endif)

  • 특징
    • 조건에 따라 코드를 선택적으로 컴파일
  • 사용 시점
    • 플랫폼 별 다른 코드가 필요할 때
    • 디버그 / 릴리즈 모드별 다른 동작이 필요할 때
  • 예시
#if UNITY_ANDROID
    // 안드로이드 전용 코드
#elif UNITY_IOS
    // iOS 전용 코드
#else
    // 기타 플랫폼 코드
#endif

2. 심볼 정의/해제 (#define, #undef)

  • 특징
    • 커스텀 심볼을 생성하거나 제거
  • 사용 시점
    • 특정 기능을 켜고 끌 때
    • 디버그 모드를 세분화할 때
  • 예시
#define ENABLE_CHEAT  // 치트 기능 활성화
void Update() 
{
    #if ENABLE_CHEAT
    if (Input.GetKeyDown(KeyCode.F12))
        GiveAllItems();
    #endif
}

3. 지역 설정 (#region, #endregion)

  • 특징
    • 코드를 논리적 그룹으로 구분
  • 사용 시점
    • 긴 코드를 구조화 할 때
    • 관련 있는 메서드들을 그룹화 할 때
  • 예시
#region 플레이어 상태 관련 메서드
public void Heal() { }
public void TakeDamage() { }
public void Die() { }
#endregion

4. 오류 / 경고 제어 (#warning, #error, #pragma)

  • 특징
    • 컴파일 과정에서 경고나 에러를 제어
  • 사용 시점
    • 미완성 코드 표시
    • 사용 중단된 코드 알림
    • 특정 경고 무시가 필요할 때
  • 예시
// 미완성 코드 경고
#warning "이 기능은 아직 구현되지 않았습니다"

// 컴파일 중단
#if !UNITY_ANDROID && !UNITY_IOS
    #error "모바일 플랫폼만 지원됩니다!"
#endif

// 특정 경고 무시
#pragma warning disable 0649
private Rigidbody rb;  // 초기화되지 않은 변수 경고 무시
#pragma warning restore 0649

5. 라인 정보 (#line)

  • 특징
    • 컴파일러에게 다른 줄 번호 정보를 제공
  • 사용 시점
    • 코드 생성 도구 사용 시
    • 디버깅 정보 수정이 필요할 때
  • 예시
#line 200 "GeneratedCode.cs"
// 이후 코드는 200번 줄부터 시작하는 것으로 처리

유니티 전용 플랫폼 심볼

UNITY_EDITOR        // 에디터
UNITY_STANDALONE    // PC/Mac/Linux
UNITY_ANDROID       // 안드로이드
UNITY_IOS           // iOS
UNITY_WEBGL         // WebGL
DEVELOPMENT_BUILD   // 개발 빌드
DEBUG               // 디버그 모드

주의사항

  • 너무 많은 전처리문 사용은 코드 가독성을 해친다
  • #region은 큰 덩어리로 묶지 말고 적절히 분할해야 한다
  • 플랫폼별 코드는 최소화하고, 가능한 공통 코드를 사용해야 한다
  • #define은 파일 최상단에 위치해야 한다
반응형