iOS

[Objective-C] 클래스 구조(.h 와 .m) & 메소드

빨간체리반지 2020. 8. 12. 20:20

클래스 구조

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"];