#include vs #import

Obj-C를 이용하여 코드를 작성할 때, 가장 먼저 만나는 것이 #import <>/ “” 일 것이다.
하지만, 코드를 작성하다 보면, #include <> / “” 역시 볼 수 있다.
사실, #import 는 Obj-C에서 추가된 Preprocessor order가 아니라 C++에서 추가된 것이다.

이 둘의 가장 큰 차이로는 아래와 같을 것이다.
일반적으로, C에서 중복된 사용자 헤더의 컴파일을 방지하기 위해 다음과 같은 메크로를 사용한다.

// a.h
#ifndef __A_H__
#define __A_H__
code something...
#endif

이렇게 하고, #include “a.h” 를 하게 되면 이 전처리 명령이 여러 곳에서 호출되었다 하더라도, 컴파일시에는 한 번만 코드가 추가되도록 작동할 수 있다.
이런 기법은 C뿐만 아니라, C++에서도 비슷하게 사용하고 있다.

Objective-C에서는 사용자 클래스 인터페이스를 위해 .h를 사용하는데, 이때 위와 같은 #ifdef 이나 #ifndef를 사용하지 않는다.
그리고, implementation 부분인 .m 파일에서 다음과 같이 헤더를 추가한다.

#import “b.h”

여기에서 뭔가 느껴지듯, #import를 하는 순간 이미 불러온 헤더의 내용을 제외하고 불러오게 된다. 하지만, #include 를 하게 되면 #ifndef과 같은 메크로가 없다면 헤더를 중복으로 불러오게 된다.

따라서, Objective-C에서는 #import를 사용하는 것이 더 효율적일 것이다.

댓글 남기기