지정된 조건부 컴파일 기호가 정의되어 있지 않으면
메서드 호출이나 특성을 무시해야 함을 컴파일러에게 알린다.
즉, #if #endif 로 단일적으로 묶는 전처리기을 보완하기 위해 여러군데에서 쓰이는 동일 코드를 효과적으로 처리(중복되니)하기 위해 나온거 같다.
#사용법(Usage)
사용법은 간단쓰
#definde CONDITION1
[Conditional("CONDITION1")]
public void exMethod()
{
Console.WriteLine("CONDITION1 is defined");
}
이런 식으로 속성 부여해서 사용,
당연하지만, 해당 속성이 #definde으로 정의 되어 있어야 사용가능.
#유니티에서의 활용
Debug.log
사용에 활용
릴리즈 빌드 배포 시 개발용으로 삽입해 놓은 남용된 Debug.log는 성능 저하
에 영향을 주므로, UnityEngine.Debug.Log자체를 감싼 전역함수를 Conditional속성 지정해 활용가능.
Debug.log사용한 부분을 일일이 #if #endif할 필요없어짐.
[System.Diagnostics.Conditional("ENABLE_LOG")]
public static void Log(object message)
{
UnityEngine.Debug.Log(message);
}
#주의
- ConditionalAttribute 특성을 메서드 및 클래스에 적용 할 수 있다.
- 클래스에 대한 사용은 Attribute 에서 파생 된 유형에만 유효하다.
- ConditionalAttribute 는 무시되거나 다른 형식에 적용하면 컴파일러 경고 또는 오류 메시지가 나타난다.
- 변수 정의를 해제하려면 #undef사용.
#참고
- https://docs.microsoft.com/en-us/dotnet/api/
- system.diagnostics.conditionalattribute?redirectedfrom=MSDN&view=netframework-4.7.2
- 유니티 Debug관련 스크립트 : https://gist.github.com/kimsama/4123043