'@class'에 해당되는 글 1건

  1. 2009.05.26 Objective-C : 소스 파일 분리
반응형
앞에서 보았던 소스코드는 하나의 파일에 담겨졌으나 각 클래스에 따라서 각각 다른 파일로 분리가 가능하며 소스 코드의 양이 많아 질 경우 클래스별로 분리하는게 효율적이다.

@interface 선언문은 *.h 파일에 담고, @implementation 의 구현문은 *.m 에 담는다.
예를 들어 앞의 예에서 Engine 은 @interface 선언문은 Engine.h 에, @implementation 구현문은 Engine.m에 넣는다. 단 Engine.m의 첫 라인에 #import "Engine.h" 라는 구문이 필요하다.

앞의 예제의 Car를 선언파일과 구현 파일로 분리한다고 하였을때

Car.h 의 경우는 @interface 선언문에

#import <Cocoa/Cocoa.h>
#import "Engine.h"
#import "Tire.h" 

등을 선언하여 Tire 또는 Engine에 대한 정의를 찾을수 있다. 이 방법의 경우 컴파일러는 Engine.h 에 변경이 있거나 Tire.h에 변경이 있으면 Car 클래스를 다시 컴파일 하게 된다. 
소스가 복잡해지고 참조가 많아질 경우 컴파일 시간이 오래 걸릴수 있다. 이에 따라서 도입된 것이

"forward reference" 이다. 이는 컴파일러에게 이 키워드로 선언된 것은 클래스라는 것을 알려주는 힌트와 같은 것이다. 클래스에 대한 Reference는 클래스를 가르키는 포인터이기 때문에 컴파일 시에 클래스의 정확한 명세가 필요하지 않는다. 이렇게 선언하게 됨으로 컴파일의 효율성이 증가되게 된다.
따라서 car.h의 헤더 파일은 다음과 같이 정의가 가능하다

#import <Cocoa/Cocoa.h>
@class Tire;
@class Engine;

하지만 car의 implementation에서는 Engine.h와 Tire.h가 필요한데 그 이유는 car의 implementation에서는 Tire와 Engine의 명세가 필요하기 때문에다. (즉 Tire 객체의 특정 메소드를 참조할 경우 그 메소드에 대하여 알고 있어야 한다.)

반응형
Posted by alias
,