클래스 구조
Objective-C는 클래스 생성시 크게 선언부와 구현부으로 나뉜다
선언부
@interface ~ @end
주로 .h 파일에 구현
@interface ChildClass: ParentClass {
// ------ 멤버 변수 선언
int count;
NSString *myName;
}
// ------ 메소드 선언
/*
- : Instance Method
+ : Class Method
*/
- (id)initWithString: (NSString *)aName;
+ (ChildClass)createChildClassWithString:(NSString*)aName;
@end
구현부
@implementation ~ @end
주로 .m 파일에 구현
@implementation ChildClass
// ------ getter
- (NSString *)myName {
return myName;
}
// ------ setter
- (void)setMyName:(NSString *)name {
if (myName != name) {
[myName release];
myName = [name retain];
}
}
@end
getter와 setter
방법 1) getter, setter 직접구현
@interface ChildClass: ParentClass {
NSString *myName;
}
// getter, setter 선언
- (NSString *)myName;
- (void)setMyName:(NSString *)name;
@end
------------------------------------------------
@implementation ChildClass
// getter, setter 구현
- (NSString *)myName {
return myName;
}
- (void)setMyName:(NSString *)name {
if (myName != name) {
[myName release];
myName = [name retain];
}
}
@end
방법 2) @property, @synthesize 사용
getter, setter를 손쉽게 구현 가능
@interface ChildClass: ParentClass {
NSString *myName;
}
// @property
@property (nonatomatic, copy) NSString *myName;
@end
------------------------------------------------
@implementation ChildClass
// @synthesize
@synthesize myName;
@end
** property 속성
1. nonatomic / atomic
- nonatomic : 하나의 스레드에서만 property에 접근 가능 (주로 사용)
- atomic : 여러개의 스레드에서 property에 접근 가능
2. retain / copy / assign
- retain : 참조 변수 카운트 +1 (주로 객체 변수에 사용)
- copy : 참조 변수 카운드 +1 (주로 String형 객체 변수에 사용)
- assign : 단순 참조, 참조 변수 카운트는 증가하지 않음
3. readonly / readwrite
- readonly : 읽기만 가능한 property 생성 (= getter만 생성)
- readwrite : 읽기, 쓰기가 가능한 property 생성 (= getter, setter 생성)
** @protocol : Objective-C의 인터페이스
@protocol
/*
여기에 선언된 메소드는 반드시 구현되어야 함
(다른 oop 언어의 인터페이스와 비슷한 개념인듯)
*/
@end
메소드
구조
- (void)methodWithKeyword:(id)anObject atIndex:(int)index
- : 메소드 타입
(void) : 메소드 리턴 타입
methodWithKeyword: atIndex: : 메소드 명
(id), (int) : 파라미터 타입
anObject, index : 파라미터 명
메소드 타입
- : Instance Method
+ : Class Method (cf. static Method)
// ------ Instance Method 예시
ChildClass *object = [[ChildClass alloc] init];
id object = [object initWithString:@"StringTest"];
[object release];
// ------ Class Method 예시
ChildClass *object = [ChildClass CreateChildClassWithString: @"StringTest"];
'iOS' 카테고리의 다른 글
[iOS] 메모리 구조 및 관리(MRC, ARC) (0) | 2020.08.16 |
---|---|
[Apple Developer] 인증서 (0) | 2020.08.12 |
Objective-C와 Swift 비교 (0) | 2020.08.12 |
[Objective-C] 컬랙션 클래스 NSArray, NSDictionary (0) | 2020.08.11 |
[Objective-C] 기본 클래스 NSString (0) | 2020.08.10 |