사실 어떻게들 쓰고 계신지 보다는 어떻게 리팩토링해서 사용하는 지가 궁금합니다. ?ㅅ?
제가 직접 처음부터 C# 으로 개발하는 프로젝트에서는
딱히 전처리기 구문이 필요한 경우가 거의 없긴 했는데…
이직하고 나서 만났던 코드들 중에
이전 작업자가 온갖 전처리기 상수를 정의해서
#if #elif #else 블럭에 허우적 대 본 경험이 있어서요.
그래도 DEBUG / RELEASE 정도는 나름 쓸모가 있다고 생각은 하는데
이것도 사실 #if 어쩌고 하면서 들여쓰기 깨는 거 자체를 저는 약간… 꼴보기 싫거든요… ~ㅅ~;;
좀 극단적인 표현이지만 예를 살짝만 들어보자면
var list = new [] { "a", "b", "c" };
foreach(var chr in list)
{
#if DEBUG
Console.WriteLine(chr);
}
#else
Console.WriteLine(chr);
}
#endif
요딴식으루 작성되어 있는 걸 많이 봐 왔어요. (예를 들어서 저렇다는 겁니다… -ㅅ-;; )
그나마 DEBUG / RELEASE 정도야 그렇다치는데
위 예처럼 중괄호 블럭을 애매하게 포함시킨다든가 하는 경우도 많았고
(그래서 빌드 설정이 바뀌면 당장 빨간불이 죽죽…)
저렇게 코드 진행 중에 들여쓰기를 깨는 듯한 것들만 보면 좀 짜증이 밀려오기도 하구요…;;
(실제로 가독성을 해치기도 하구요…)
그래서 저는 저런 걸 만나면 메서드로 다 분리해서 Conditional 처리해버리는데
[Conditional("DEBUG")]
private void StartByDebug(string chr)
{
Console.WriteLine(chr);
}
[Conditional("Release")]
private void Start(string chr)
{
Console.WriteLine(chr);
}
var list = new [] { "a", "b", "c" };
foreach(var chr in list)
{
StartByDebug(chr);
Start(chr);
}
사실 이것두 깔끔하지 않은 건 마찬가지인 거 같습니다.
게다가 메서드로 분리하면 호출하는 위치에서는 저게 두 번 호출되는 거 같은 느낌이라서요.
다른 전처리기 구문은 잘 모르겠고 (아, 생각도 하기 싫… ;;; )
DEBUG / RELEASE 정도로 나눠서 분기되는 코드를 만든다고 친다면
다들 어떤 식으로 사용하시나요?
깔끔하게 ?ㅅ?
음…
그럼 이거 약간 범위를 좁혀서 #if DEBUG
정도만 얘기해보면 어떨까요?
예시처럼
다들 그냥 코드 중에
#if DEBUG
Console.WriteLine(chr);
}
#else
Console.WriteLine(chr);
}
#endif
요렇게 쓰시나요?
아니면 이것도 정리해서 다른 방식으로 쓰실까여?ㅅ?
아… 저는 코드 중간에 #if #endif
나오는 걸 좀 피라고 싶셉습니다… ;ㅅ;
- 참고로 테스트하면서 안 사실인데…
LINQPad 는 DEBUG 로 실행되는 것이었군요… 0ㅁ0!