2-1 Class.h
—선언
@interface MyClass : NSObject
//insert here...
@end
→ @interface와 @end 사이에 클래스안에 넣을 변수나 생성자 메서드를 삽입하면 된다.
—인스턴스 변수
@interface MyClass : NSObject
//instance
{
int myAge;
NSString *myName;
NSString *mySubject;
}
@end
→ 현재 클래스 안에는 myAge란 정수형 변수와 myName, mySubject라는 문자형 변수 2개를 가지고 있다.
—property
@interface MyClass : NSObject
//instance
{
int myAge;
NSString *myName;
NSString *mySubject;
}
//property
@property (nonatomic, assign) int myAge;
@property (nonatomic, retain) NSString *myName;
@end
→ @property라는 지시어를 사용해서, 인스턴스 변수의 정의부터 접근자 메서드의 정의와 구현을 컴파일러가 자동으로 코드를 생성하도록 해주는 것이다.
—Property 역할
- 내부에 인스턴스 변수를 선언하고, 이 값을 읽을 수 있는 메서드와 이 값을 쓸 수 있는 메서드를 각각 제공한다(read and write)
- 내부에 인스턴스 변수를 선언해두고, 이 값을 읽을 수 있는 메서드만 제공하며, 이 값을 쓸 수 있는 메서드는 제공하지 않는다. (read only)
- 내부에 인스턴스 변수의 값을 읽는 것이 아닌, 다른 속성들로부터 계산된 값을 리턴하는 메서드를 제공한다.(computed)
- 내부에 인스턴스 변수를 선언하고, 외부에서는 쓰기 메서드만 제공한다.
—선언 property 속성
- atomic / nonatomic : 해당 property가 atomic하게 접근할 것인지 아닌지를 결정한다. atomic한 접근은 해당 값에 쓰기를 할 때 락을 걸어서 여러 스레드에서 동시에 액세스할 때 예기치 않게 데이터가 파괴되는 상황을 방지할 수 있다.
- copy : setter에서 주어진 값을 복사한 새로운 사본 객체를 저장하도록 한다.
- strong(retain) / weak(assign) : strong은 객체에 대해서 강한 참조를 만들어서 해당 값이 해제되는 것을 방지한다. 반대로 weak는 약한 참조를 가리키게 되며, 객체 외부에서 해당 값이 해제되는 경우가 발생할 수 있다.
- readwrite / readonly : setter메서드를 자동 생성할 것인지를 결정한다. 생략하는 경우 default값은 readwrite가 된다.
— instance 메서드 선언
@interface MyClass : NSObject
//instance
{
int myAge;
NSString *myName;
NSString *mySubject;
}
//property
@property (nonatomic, assign) int myAge;
@property (nonatomic, retain) NSString *myName;
//instance Method
- (NSString *) myName; //getter
- (void)setMyName: (NSString *) myName; //setter
@end
→ instance 메서드는 실제 메모리에 저장되있는 객체가 있어야지만 사용이 가능하다.
→ 제일 앞에 -를 입력한뒤 선언을 하면 된다.
→ 인스턴스 메서드는 크게 getter와 setter가 있다.
—getter 메서드 : 읽기를 위한 메서드로 getter접근자는 보통 프로퍼티 이름과 동일한 이름을 사용한다.
—setter 메서드 : 쓰기를 위한 메서드로 setter접근자는 보통 set프로퍼티이름: 의 형태로 작성하되 lowerCamelCase로 작성을 한다.
—Class 메서드 선언
@interface MyClass : NSObject
//instance
{
int myAge;
NSString *myName;
NSString *mySubject;
}
//property
@property (nonatomic, assign) int myAge;
@property (nonatomic, retain) NSString *myName;
//instance Method
- (NSString *) myName; //getter
- (void)setMyName: (NSString *) myName; //setter
//class Method
+ (void) itIsClassMethod;
@end
→ 클래스 메서드는 실제 객체가 없더라도 실행이 가능한 함수이다.
→ 메서드를 선언할 때 제일 앞부분에 +를 입력한 뒤 선언하면 된다.
2-2 마치며...
오늘은 Objective C의 클래스를 사용하는 방법 중에서 선언하는 곳에 속하는 .h파일에 대해 알아보았다.
가장 생소했던 부분은 Property의 속성을 정의하는 구간이였는데 이 포스팅의 주제가 objective C를 완벽히 이해하고 프로젝트에 적용하는 것이 아니라 objective C의 코드가 어떤 식으로 작동하는 지 파악하고 이것을 swift언어로 변환할 것인지가 관건이라 나중에 코드 리뷰를 하다보면 자연스럽게 알것 같아서 다 따지지 않고 그냥 넘어갔다.
다음 포스팅 때는 선언한 문에서 함수와 변수 프로퍼티 등을 어떻게 구성을 하고 메인 파일에서 어떤식으로 사용하는 지를 알아볼 예정이다.
Uploaded by Notion2Tistory v1.1.0