본문 바로가기

Objective-C 기초

카테고리 Category

반응형

카테고리 (Category)


클래스가 가지고 있는 행위들을 일정한 기준으로 나누는 것

==> 복잡한 바탕화면에서 폴더 여러개를 만들어 분류하는 것을 떠올리면 됨. => 깔끔하고 정돈됨. ㅎ.ㅎ


기존 클래스를 카테고리를 통해 확장도 가능.


[카테고리 선언부]

1) 원본 클래스에 정의할 경우

@interface cate(Enroll) //cate 클래스의 Enroll 카테고리 생성

+(void)enroll; //Enroll 카테고리로 분류된 cate 클래스의 메소드

@end

처럼 클래스 선언부와 유사한데 클래스_이름(카테고리_이름) 으로 선언


2)별도 파일로 정의할 경우

카테고리 파일 이름 : 원본클래스명+카테고리명

ex) Stuend+Enroll.h 파일 생성 -> import 하여 사용.


Objective-C 파일 생성에서 File Type을 Category로 주고 class를 선택해주면 됨.

카테고리로 생성하면 알아서 클래스명+카테고리명 으로 생성됨


[카테고리 구현부]

1) 원본 클래스 구현부에 같이 구현

#import "cate.h"


@implementation cate

+(void)study{

    NSLog(@"study method");

}


+(void)enroll{

    NSLog(@"enroll method");

}

@end


2)별도로 구현부를 빼서 구현도 가능

#import "cate.h"


@implementation cate

+(void)study{

    NSLog(@"study method");

}

@end


@implementation cate(Enroll)

+(void)enroll{

    NSLog(@"enroll method2");

}

@end


[사용]

1)원본 클래스 내부에 카테고리를 구현한 경우

에는 따로 import 없이 그냥 클래스 메소드 호출하듯이 하면됨.

#import <Foundation/Foundation.h>

#import "cate.h"


int main(int argc, const char * argv[]) {

    @autoreleasepool {

        [cate study];

        [cate enroll];

    }

    return 0;

}


==> 결과:

2019-02-15 21:33:59.036837+0900 Study[2450:1044842] study method

2019-02-15 21:33:59.037005+0900 Study[2450:1044842] enroll method2

Program ended with exit code: 0


2)카테고리 파일을 별도로 생성한 경우

import 한 후 사용

#import <Foundation/Foundation.h>

#import "cate.h"

#import "cate+Enroll.h"


int main(int argc, const char * argv[]) {

    @autoreleasepool {

        [cate study];

        [cate enroll];

    }

    return 0;

}


==> 결과:

2019-02-15 22:00:12.141208+0900 Study[2614:1113250] study method

2019-02-15 22:00:12.141432+0900 Study[2614:1113250] 별도의 파일 Enroll method

Program ended with exit code: 0


반응형

'Objective-C 기초' 카테고리의 다른 글

프로토콜 (Protocol)  (0) 2019.02.15
클래스 내부 구성요소 숨기기  (0) 2019.02.15
ARC, Objective-C 메모리 관리 방법  (0) 2019.02.15
콜렉션 특징  (0) 2019.02.15
NSSet  (0) 2019.02.15