카테고리 (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 |