배움터  
  HOME > 배움터 > Daily Tip
Daily Tip

제품:   Excel 버전:   공통
검색어:   디버그모드, 릴리스모드, 조건부 컴파일
제목:   디버그모드와 릴리스모드 그리고 조건부 컴파일
     
 

새 페이지 2

  STEP> 살펴보기


Visual C++개발툴에서는 컴파일과 관련하여 디버그(debug)모드와 릴리스(release)모드를 선택할 수 있습니다. 개발중에는 디버그모드를 선택하여 디버깅정보를 포함하여 컴파일합니다. 그러나 완성되어 배포를 하는 경우 릴리스모드로 바꾸어 컴파일하게 됩니다. 

VBA에서 개발하고 배포하는 과정에서도 조건부컴파일(conditional compilation)을 이용하여 디버그모드와 릴리스모드를 선택할 수 있습니다.  

여러분은 개발하는 도중에 다음과 같이 변수값을 확인하거나 디버깅모드로 전환하기 위해 Debug개체나 MsgBox를 이용할 것입니다.

Debug.Assert (X<100)

 그러나 완성되어 배포하려면 이러한 코드는 더 이상 불필요합니다. 그래서 각 모듈을 돌아다니면서 일일이 주석처리하거나 지울 것입니다.  

이번에는 조건부 컴파일을 사용하여 다음과 같이 작성해보면 어떨까요?

         #Const DEBUG_ = True
        ...
        ...
        ...
        #If DEBUG_ Then
        Debug.Assert (X<100)
        #End If

#으로 시작하는 코드가 낯선 분도 계실 텐데 조건부 컴파일을 의미한다고 보시면 됩니다. #Const, #If~#End If는 일반적으로 사용한 상수선언, 조건문과 같는 의미입니다. 

DEBUG_ 상수는 디버그모드인지 릴리스모드인지를 가리키는 상수입니다. 개발중에는 DEBUG_ 상수를 True로 두어 디버그모드로 지정합니다. 그리고 #If ~ #End If 코드블럭 사이의 Debug.Assert (X<100)가 실행됩니다.  

그러나 이제 배포하려는 경우 DEBUG_ 상수를 False로 두어 릴리스모드로 바꾸면 더 이상 Debug.Assert (X<100)가 실행되지 않을 것입니다. 따라서 이를 지우거나 주석처리하는 수고가 필요없습니다. 상수값 하나만 바꾸면 되는 거죠.

 
  참고> VBAProject 컴파일


VBA가 실행파일을 만들어 내는 컴파일러가 아니라 인터프리터이므로 컴파일(compile)이라는 용어는 안 어울린다고 생각하시는 분도 있을 겁니다. 그러나 컴파일에는 프로젝트의 모든 코드가 문법을 제대로 지키는지 검사하는 작업입니다.

VBE의 [디버그]메뉴에는 [VBAProject 컴파일]이라는 메뉴항목은 실행파일을 만드는 의미가 아니라 프로젝트내 모든 코드의 문법을 검사한다는 그런 의미일 겁니다(저의 생각입니다)