Objective-c에는 클래스를 수직적으로 확장 할 수 있도록 상속받아서 확장받는 방법과 수평적으로 확장할 수 있는 카테고리 두가지 방법이 있다. 카테고리의 특징은 해당 클래스에 새로운 변수를 추가 할 수 없고 메소드만 추가 할 수 있다. 처음에는 어디다 쓰지? 싶은 생각이였지만 쓰다보니까 다 방법이 있더라. 내가 만든 클래스보다는 다른 사람이 만든 클래스를 쓸때, 특히 애플에서 기본적으로 제공하는 NSString등의 NS로 시작하는 오브젝트나 UIView 등의 UI…로 시작하는 오브젝트들에 카테고리로 확장해서 사용하면 정말 편하게 작업을 할 수 있다. 예를 들어 프로젝트에 쓰이는 특수한 색상들을 카테고리로 확장하여 [UIColor lotcoColor] 등으로 지정해두면 나중에 유지보수할때도 좀더 편하게 작업을 할 수있다.
테스트용으로 UIView를 하나 만들겠다 보통 카테고리는 [클래스명+확장자이름] 식으로 이름을 만든다. 헤더파일에 [클래스명(확장 카테고리이름)] 식으로 이름을 지어준다. 그리고 확장시킬 메소드를 지정하고 m파일에 해당 소스를 구현한다.
1 2 3 4 |
#import <UIKit/UIKit.h> @interface UIView(Lotco) //(확장하는 카테고리 이름) -(void)randomColor; @end |
- UIView+lotco.h
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#import "UIView+Lotco.h" @implementation UIView (Lotco) -(void)randomColor{ float red = arc4random() %255+1; float green = arc4random() %255+1; float blue = arc4random() %255+1; float alpha = arc4random() %255+1; red = red / 255.0; green = green / 255.0; blue = blue / 255.0; alpha = alpha / 255.0; self.backgroundColor = [UIColor colorWithRed:red green:green blue:blue alpha:alpha]; } @end |
- UIView+lotco.m
그 이후 사용방법은 정말 쉽다. 사용하고 싶은 클래스에 카테고리 파일을 임포트 시키고 해당 메소드를 호출하면 커스텀 메소드로 확장 된 나만의 메소드를 사용할수있다. 프로젝트 안에 자주 사용되는 카테고리라면 prefix에서 미리 임포트를 시키면 프로젝트에 자주 쓰이는 색상이나 문자 변환등을 손쉽게 작업 할 수 있다.
1 2 3 4 5 6 7 8 9 10 |
#import "UIView+Lotco.h" @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; UIView *view = [[UIView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)]; [view randomColor]; [self.view addSubview:view]; } |
- test code