Conditional Attribute
# Introduce
c#에서 사용이 가능한 조건부 컴파일 기호입니다.
정의되지 않은 기호가 사용된 메서드의 호출이나 특성이 무시됩니다.
가시적으로는 전처리기 지시문과 동일하게 보여지지만 메서드단위의 관리가 가능하다는 점과, 정의되지 않은 기호에 대하여 호출이 무시된다는 점에서 더 좋은 성능을 기대 할 수 있어 소개하게 되었습니다.
# For example
MS 공식 설명서에 구현되어있는 예제를 유니티 C#에서 재구성한 모습입니다.
2개의 메서드에 할당된 기호들이 모두 정의되어 있기 때문에 정상적으로 실행되어 아래와 같이 모든 메세지가 출력되게 됩니다.
다음과 같이 CONDITION1 기호 정의가 없는 상황인 경우, 해당 메서드에 대한 실행부에서의 호출이 무시되는것이 때문에 Method1(3); 부분을 건너뛰어서 진행하게 됩니다.
전처리기 지시문을 이용해도 가시적으로는 동일합니다.
다만 호출을 무시하는것은 아니므로, 비어있는 Method1 메서드가 호출되게 되는 형태가 됩니다.
# Comment
구현 조건
Conditional Attribute는 제한적인 조건이 몇가지 필요합니다.
조건이 충족되지 않으면 정상적인 구현이 이루어지지 않습니다.
다음은 구현 조건입니다.
메서드 단위에만 적용 가능
Void 형태를 가지는 메서드의 경우에만 적용 가능
플랫폼별 지시어 사용
유니티에 미리 정의된 플랫폼별 지시어를 활용하여 여러 기능들을 만들어 낼 수 있습니다.
다음은 플랫폼별 지시어와 같이 사용되어 유니티 Debug를 에디터에서만 나타나도록 제작된 예제입니다.
# Epilogue
Conditional Attribute는 유니티에서 다양한 방법으로의 활용이 가능합니다.
또한 메서드 호출을 무시한다는 점에서 조건에 맞는 경우 전처리기 지시문보다 뛰어난 성능을 발휘합니다.
다만 이 방법이 절대적으로 옳고 전처리기 지시문이 절대적으로 잘못된 방법은 아닙니다.
전처리기 지시문 역시, 연산자 사용 가능 또는 구현부 중 일부만 적용 가능하다는 점에서 그 활용도가 다릅니다.
각자 상황에 맞도록 처리를 하는 것이 가장 좋은 구현 방법입니다.
감사합니다.
# Reference
https://docs.microsoft.com/ko-kr/dotnet/api/system.diagnostics.conditionalattribute?view=netcore-3.1
https://docs.unity3d.com/kr/current/Manual/PlatformDependentCompilation.html
'개발 > Unity3D' 카테고리의 다른 글
Unity에서 슬로우 모션(Slow Motion)효과 주기 - TimeScale/AudioSource (0) | 2020.08.11 |
---|---|
설정자와 Delegate로 사운드 온/오프 구현해보기 (0) | 2020.08.06 |