Objective-C

2. [Objective-C] Class(1) Property

Daesiker 2021. 1. 26. 10:06
반응형

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 역할

  1. 내부에 인스턴스 변수를 선언하고, 이 값을 읽을 수 있는 메서드와 이 값을 쓸 수 있는 메서드를 각각 제공한다(read and write)
  1. 내부에 인스턴스 변수를 선언해두고, 이 값을 읽을 수 있는 메서드만 제공하며, 이 값을 쓸 수 있는 메서드는 제공하지 않는다. (read only)
  1. 내부에 인스턴스 변수의 값을 읽는 것이 아닌, 다른 속성들로부터 계산된 값을 리턴하는 메서드를 제공한다.(computed)
  1. 내부에 인스턴스 변수를 선언하고, 외부에서는 쓰기 메서드만 제공한다.

—선언 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언어로 변환할 것인지가 관건이라 나중에 코드 리뷰를 하다보면 자연스럽게 알것 같아서 다 따지지 않고 그냥 넘어갔다.

다음 포스팅 때는 선언한 문에서 함수와 변수 프로퍼티 등을 어떻게 구성을 하고 메인 파일에서 어떤식으로 사용하는 지를 알아볼 예정이다.

반응형

'Objective-C' 카테고리의 다른 글

4.[Objective-C] Function(함수)  (0) 2021.01.27
3. [Objective C] Class(2)  (0) 2021.01.26
1. [Objective-C] NSLog, 변수  (0) 2021.01.25