반응형
전처리문이란?
코드가 컴파일되기 전에 처리되는 특별한 지시문
간단한 예시
#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은 파일 최상단에 위치해야 한다
반응형
'유니티 > 문법' 카테고리의 다른 글
[Unity] 유니티 C#) try-catch문 ( 예외처리 ) (1) | 2025.01.15 |
---|---|
[Unity] 유니티 C#) LINQ ( Language Integrated Query ) (1) | 2025.01.14 |
[Unity] 유니티 C#) Event ( 이벤트 ), Action ( 액션 ) (0) | 2025.01.08 |
[Unity] 유니티 C#) Delegate ( 델리게이트 ), Anonymous Method (익명 메서드) ,Lambda ( 람다 ) (0) | 2025.01.07 |
[Unity] 유니티 C#) Garbage Collector ( 가비지 컬렉터 ) (0) | 2025.01.06 |