강아지아빠 2010. 9. 1. 08:20
 
#pragma once

C의 헤더파일 최상단에서 자주 볼 수 있는 이 코드는 컴파일러에게 이 헤더 파일이 한번만 빌드되도록 알려주는 명령입니다.

왜 넣어야 하냐? a.h 라는 파일이 여러 곳에서 복잡하게 #include 되어 쓰이게 된다면 그때마다 각각 정의가 추가되게 되어 중첩되는 경우가 발생됩니다. 이 경우 중복 정의되었다는 에러가 발생하게 됩니다. 즉 같은 내용이 여러번 빌드되게 되는 것입니다. 이를 막기 위해 
#pragma once 가 필요합니다. 물론 컴파일 시간도 줄여주므로 대부분의 헤더파일에 추가하기를 추천합니다.

아이폰 앱 개발 시 소스 코드가 길어 지면 구현된 소스를 관리하기 위해 #pragma mark 사용을 도입할 필요를 느끼게 될 것이다. 사용 방법은 간단하다. 의미있는 소스 구분을 위해 label을 붙이는 것이다.

즉, 구현된 소스에서, 주로 메소드 단위로 구분하게 될테니... 논리적으로 의미있는 메소드들을 라벨을 붙여 그룹화(마크) 한다고 생각하면 될 것이다.

다음과 같이 #pragma mark 지시자를 넣으면 그 다음 #pragma mark 지시자 전까지의 소스를 그룹화하여 볼 수가 있다. 그리하여 전체 소스를 섹션별로 구분하여 볼 수가 있다.

#pragma mark -

#pragma mark Initialization


확인은 Xcode의 Navigatin Bar에서 할 수 있다.


단, 사용 시 다음 두 가지는 주의하라.

1. #pragma mark - 에서 '-' 뒤에 공백은 허용하지 않는다. 만약 사용한다면, 다음 그림과 같은 상황을 보게될 것이다.


2. 만약 Xcode의 Preferences... > Code Sense의 Sort list alphabetically 항목을 체크한다면 원하는 형태가 아니라 다름 그림과 같이 알파벳 순으로 정리된 목록을 보게 될 것이다. 디폴트는 체크되어 있지 않다.


 

코드가 길어질 수록 원하는 메소드를 찾아가기가 함든 경우가 많습니다.
이럴때 #pragma mark를 이용해서 코드를 쉽게 구분하고 찾아갈 수 있습니다.

 

예를 보겠습니다.

이 소스는 ADC에서 받은 Touches라는 프로젝트입니다.

 

젤 위에 세줄을 보시면  #pragma mark를 사용한걸 볼 수 있습니다.

 

Navigation Bar를 보시면 이것의 용도를 알 수 있습니다.

 

 

Navigation Bar에서 ===Animating subviews=== 라는 항목으로 구분되어서 두개의 메소드가 표시되는 걸 볼 수 있습니다.

즉 ...

#pragma mark - 는 구분용 실선

#pragma mark ===Animating subviews=== 는 항목명 출력

#pragma mark   는 그냥 빈 공간용 입니다.

 

 

좀 더 이해하기 쉽게 세줄을 주석처리 해보면

 

이렇게 몽땅 붙어서 나오게 되죠.

 

#pragma mark를 써서 코딩할때 관련된 메소드들을 잘 모아서 묶어둔다면 훨씬 보기 좋고 관리하기 좋을 것 같습니다.

전 아직 이렇게 긴 코드를 짤 수준까진 안되지만 지금부터 습관을 들여야 될 것 같네요 ^^

 

 

참고로 #pragma mark - 뒤에 공백을 넣으면 안됩니다.

 

 

공백이 들어가게 되면 위와 같이 됩니다.

그리고 Preferences... > Code Sense의 Sort list alphabetically  항목이 체크되어 있으면  Navitation Bar에서 알파벳 순으로

메소드들을 정렬해서 보여줍니다. 위의 기능을 사용하고 싶으시면 이 항목을 체크하지 마세요. 디폴트는 체크되어있지 않습니다.

 

#pragma mark가 무슨 용도인지 찾아보다가 알게되었네요.

도움이 되셨으면 합니다~ ^^