원문 : C# Conditional Methods - Black Wasp


C# 및 .NET Framework를 이용해 만들어진 어플리케이션은 conditional method (조건부 메소드) 를 포함할 수 있다. conditional method는 지정된 컴파일러 심벌이 정의되어 있을 경우만 호출되는 특별한 메소드 이다. 이 메소드를 사용하면 tracing 및 디버깅을 위한 코드를 더 이상적?!으로 만들 수 있다.


What are Conditinal Methods?

conditional method는 Conditional 어트리뷰터와 컴파일러 심벌 이름을 갖는 메소드이다. 지정한 컴파일러 심벌이 정의되었다면 코드 실행 시 conditional method가 실행된다. 지정한 컴파일러 심벌이 정의되어 있지 않다면 컴파일된 어셈블리에 포함되지 않는다.

목적?!
대부분의 경우 tracing 및 디버깅을 위한 용도로 사용한다.
이 경우 DEBUG 심벌을 사용한다. 디버깅 모드로 컴파일 시 컴파일 옵션에 자동으로 DEBUG 심벌이 추가되므로 디버깅시 어셈블리에 포함된다.
릴리즈 모드로 컴파일 시, DEBUG 심벌을 사용한 Conditional method는 빌드된 어셈블리에서 제외된다.

#if - #endif 와의 차이
#if - #endif 와 비슷하지만 중요한 차이점이 있다.
#if - #endif 에 둘러쌓인 부분은 지정된 심벌이 정의되지 않으면 빌드에서 제외된다.
conditional method 는 항상 빌드되어 최종 어셈블리에 포함된다. 지정한 컴파일 심벌이 존재하지 않으면 해당 메소드는 최종 어셈블리에 포함은 되지만 호출은 되지 않는다.

Conditional Method의 장점, 단점
단점으로 항상 conditional method가 어셈블리에 포함되기 때문에 어셈블리의 크기가 커진다.
장점으로는 하나의 어셈블리가 프로그램과 라이브러리에서 공유될 수 있다. 즉,  conditional method를 포함하는 하나의 어셈블리가 이 어셈블리를 호출하는 프로그램에 따라 다르게 사용될 수 있다. #if - #endif 를 사용하는 코드보다 깔끔하다?!는 장점도 있다.


Conditional Attribute

conditional 어트리뷰트를 적용할 수 있는 메소드는 void 리턴값을 갖어야 한다.
conditional 어트리뷰트는 하나의 string 매개 변수를 갖는다. 이 매개 변수에는 컴파일 심벌값이 들어가야한다.

ex)

[Conditional("DEBUG")]

public static void OutputTraceInformation()

{

    Console.WriteLine("Trace information");

}



Posted by six605
,