- 셀렉터
- 셀렉터란? 클래스에 선언된 메소드를 구별하고, 선언된 메소드가 있는지 확인 및 실행해준다.
- 메소드를 구별하는 항목
- 메소드 이름
- 메소드의 파라미터 개수
- 메소드의 파라미터 레이블
- 셀렉터에서 메소드 구별하는 예시
- -(int)setWidth:(int)newWidth; -> setWidth:
- -(int)setWidth:(int)newWidth height:(int)newHeight; -> setWidth:height:
- -(int)setWidth:(int)newWidth height:(int)newHeight range:(int)tRange -> setWidth:height:range:
- 셀렉터 사용하기
- 형태 : @selector(메소드)
- SEL 타입 : SEL selector = @selector(length);
- 셀렉터 사용 예시
- -(int)setWidth:(int)newWidth; -> SEL s = @selector(setWidth:);
- -(int)setWidth:(int)newWidth height:(int)newHeight; -> SEL s = @selector(setWidth:height:);
- -(int)setWidth:(int)newWidth height:(int)newHeight range:(int)tRange -> SEL s = @selector(setWidth:height:range:);
- 셀렉터로 메소드 실행하기
- 셀렉터 실행 메소드
- -(id)performSelector:(SEL)aSelector
- -(id)performSelector:(SEL)aSelector withObject:(id)object
- -(id)performSelector:(SEL)aSelector withObject:(id)object1 withObject:(id)object2
- 셀렉터로 메소드 호출 (NSString 클래스에 있는 length 함수 호출)
셀렉터로 메소드 호출하는 형태 NSString *obj = [[NSString alloc] init];
SEL selector = @selector(length);
[obj performSelector:selector]; - 셀렉터를 사용하는 클래스에 해당 메소드가 있는지 여부 확인 : (BOOL)respondsToSelector:(SEL)aSelector
- 셀렉터를 사용하는 예시는 아래와 같다.
예시) 입력된 문자를 모두 대문자로 변경 - 프로퍼티
- 프로퍼티란? 점(.)을 이용해서 데이터에 접근할 수 있는 툴을 의미한다.
- 프로퍼티 사용 방법 : 클래스 선언부에 프로퍼티 선언을 해준다.
형태) @property ([프로퍼티 속성]) [타입] [변수명]; - 프로퍼티 속성
- 읽기/쓰기 제어
- readwrite : 읽기/쓰기 제어 (기본으로 생략 가능함)
예시) @property (readwrite) int width; - readonly : 읽기 전용
예시) @property (readonly) int width - 쓰레드 접근 제어
- atomic : 동시에 접근하는 쓰레드 제어(기본으로 생략가능)
예시) @property (atomic) int width; - nonatomic : 쓰레드 접근 제어 사용 안 함
예시) @property (nonatomic) int width; - 게터와 세터 메소드 이름
- getter = [게터 메소드 셀렉터]
- setter = [세터 메소드 셀렉터]
- 예시) @property (getter = getWidth, setter = setRactangleWidth:) int width; -> 보통 세터는 설정하지 않음
- 메모리 소유권 (추후에 다룸)
- 프로퍼티와 멤버변수
- 프로퍼티 선언 시에 언더바(_) + 프로퍼티 이름의 멤버 변수가 생성된다.
- 멤버 변수 선언과 프로퍼티 선언을 함께한 경우 이름이 같아도 두 멤버 변수가 선언된 상태가 된다.
프로퍼티와 멤버 변수 @interface Ractangle : NSObject {
int width;
}
@property int width;
@property int height;
@end - 프로퍼티의 멤버 변수와 선언된 멤버변수를 같이 사용하려면, "synthesize" 키워드로 프로퍼티의 멤버변수를 셀렉터로 선언된 멤버변수로 변경해준다.
형태)@synthesize [프로퍼티 이름]; / @synthesize [프로퍼티 이름] = [멤버 변수 이름]; - 2번에 대한 예시) @synthesize width; 를 구현부에 선언하면 "width" 하나로 사용 가능하다.
- 프로퍼티와 게터/세터 메소드
- 프로퍼티를 이용할 경우 단순히 값을 설정하고 설정된 값을 얻어오는 기본 행위만 정의된 함수가 정의가 되는데 추가적인 동작이 필요한 경우 게터와 세터 메소드를 별도로 작성 후 동작을 메소드에 추가한다.
- 프로퍼티로 선언된 게터와 세터의 기본명은 게터는 선언된 멤버변수명, 세터는 set + "선언된 멤버변수명(맨 처음글자만 대문자)"의 형태로 정의된 것과 동일하다.
- 별도의 작업이 필요한 경우에 구현부에 아래와 같이 넣어준다.
예시) 사각형의 가로 길이가 0보다 작은 경우 0으로 변환하고, 세로 길이가 0보다 작은 경우 0으로 값을 얻어온다.