Purpose-built post

이 포스트는 내가 이 책의 항목 4를 읽고 정리한 내용과 읽고 느낀점, 실제로 썼을 때 느꼇던 점을 정리하기 위해서 만들었다.

Content

#if/#endif 는 C/C++ 를 사용했던 사람이라면, 언제/어떻게/왜 쓰는지 알 고 있을 것이다. C# 도 마찬가지로 #if/#endif 를 쓸 수 있다. 하지만 책의 내용은 Conditional Attribute를 사용 하라는 내용인데, 나는 이 항목을 쭉 읽고, 직접 해보았다.

#if/#endif 보다 좋은 점은 다음과 같다

장점

1. 소스가 깔끔하게 보인다.

깔끔하게 보이는 것은 중요하다. 그 만큼 코드 보기가 쉽다는 뜻이기 때문이다. #if/#endif 를 사용하면, 코드 내에 #if/#endif 로 들쭉 날쭉한 코드가 보이게 됨으로써, 가독성이 무척 떨어진다.

2. 확실하게 독립된 경계 구역을 손쉽게 만들 수 있다.

#if/#endif 도 경계 구역을 만들 수 있으나, 손쉽지는 않다. 하지만 C#에서는 보다 손쉽게 할 수 있도록 Conditional Attribute를 이용할 수 있다.

왜 독립된 구역을 만들어야 하냐?

#if/#endif 를 사용하면, "경계" 가 생긴다. 이 경계는 조건에 따른 경계다. 예를 들면, A 조건일 땐 활성화, 아닐 땐 비활성화 같은 경계 말이다. 이 경계가 #if/#endif 로 생겨 났으면서, 경계 구분이 애매해진다. 이 애매함은 변수 a가 있을 때, a의 값이 조건부에 따라 달라지고, 이 달라짐이 전체 프로그램에 영향을 미친다.

결국 변수 a가 조건에 따라 값이 달라짐에, 다른것이 영향을 받으므로, 경계가 애매해 지는 것이다.Conditional Attribute를 사용하면, 리턴값, out 값, ref 값을 사용할 수 없게 함으로써, 이 경계가 확실하게 독립될 수 있게 만들 수 있다.

단점

1. 결과값을 사용 할 수 없다.

확실하게 독립된 경계 구역을 만들 수 있어 장점이 되었으나, 결과값을 사용 할 수 없으므로, 컴파일 조건에 따라 상태 변화를 봐야한다면, 처음부터 다시 처리해야 한다.

Digression

  • 확실히 편하다. 컴파일 조건에 따른 "변화" 보다는 컴파일 조건에 따른 "추가" 작업을 할 때 빛을 발한다고 생각한다.
  • 테스트 코드를 만들어 정리해야 하나, 책에 나와 있으므로, 대략 생략한다.


  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 라이프코리아트위터 공유하기
  • shared
  • 카카오스토리 공유하기