Objective-C는 클래스를 여러 파일로 분할하여 선언 및 정의하는 기능을 제공합니다. 이것을 카테고리 라고 부르고, 카테고리를 이용하여 클래스의 메소드 선언을 분할 할 수 있습니다. 예를 들어, 여러 개발자가 공동으로 동시 평행으로 동일한 클래스의 구현을 설명하는 것 같은 경우 각 개발자는 클래스 중 개발자가 담당하는 메소드를 카테고리에 분할합니다.
카테고리를 선언하려면, 반드시 메인이되는 클래스의 인터페이스 선언이 필요합니다. 클래스의 카테고리를 선언 및 정의하려면 다음과 같은 구문을 지정합니다.
@interfae 클래스 명 (카테고리 명) {...
@implementation 클래스 명 (카테고리 명) {...
여기서 지정하는 카테고리 이름은 C 언어의 식별자 명명 규칙을 따릅니다. 카테고리 화하는 클래스는 반드시 이미 메인이되는 본체가 선언되어 있지 않으면 안됩니다.
카테고리는 일반 클래스의 선언과 정의와 비슷하지만, 인스턴스 변수를 선언 할 수 없기 때문에주의하십시오. 카테고리를 선언 할 수는 인스턴스 메소드와 클래스 메소드뿐입니다.
#import <stdio.h> #import <objc / Object.h> @interface Test : Object - (void) WriteA; @end @interface Test (Fate) - (void) WriteB; @end @implementation Test - (void) WriteA { printf ( "I am the bone of my sword \ n"); } @end @implementation Test (Fate) - (void) WriteB { printf ( "몸은 검으로되어있다 \ n"); } @end int main () { id obj = [Test new]; [obj WriteA]; [obj WriteB]; [obj free]; return 0; }
이 프로그램은 Test 클래스를 메인과 Fate라는 이름의 범주로 구분하고 있습니다. 실행 결과는 상상과 같습니다. Test 클래스의 분할되는 모든 범주는 궁극적으로 동일한 클래스로서 통합됩니다. 물론, 카테고리는 다른 파일로 선언해도 괜찮습니다. 이 경우 카테고리를 선언 파일은 메인이되는 클래스를 선언하는 헤더 파일을 포함하고있을 필요가 있습니다.
카테고리는 기존의 완성하고있는 클래스에 기능을 추가하는 용도로 사용할 수도 있습니다. 그러나 인스턴스 변수를 추가 할 수 없기 때문에, 기존의 클래스의 역할의 범위에서 확장하는 것입니다.
#import <stdio.h> #import <objc / Object.h> @interface Object (Write) - (void) Write; @end @implementation Object (Write) - (void) Write { printf ( "I am the bone of my sword \ n"); } @end int main () { id obj = [Object new]; [obj Write]; [obj free]; return 0; }
이 프로그램은 루트 클래스 인 Object 클래스에 새로운 카테고리를 추가하고 있습니다. 덧붙여서, 카테고리의 메소드가 기존 클래스의 메소드와 충돌 한 경우, 카테고리의 메소드가 우선 기존의 방법은 은폐되어 버립니다. 상속에 의한 재정과 다르기 때문에, 은폐 된 메소드를 호출하는 수단이 없어져 버리므로주의하십시오.