- 메소드란? 객체(클래스)가 수행할 동작을 정의해 놓은 것을 의미한다.
- 객체에서의 동작 수행은 객체에 정의된 메소드 호출을 의미한다.
- Sender와 Receiver
- Sender(사용자)는 메시지를 보내는 주체로 수행할 동작을 요청한다.
- Receiver(객체)는 요청한 메시지를 받아서 동작을 수행하는 객체 즉 요청 온 메시지를 정의된 메소드로 동작을 수행한다.
- 메소드 관련 처리에 대한 그림
- 메소드 호출 방법
- [객체 클래스의 메소드]
- 위 예를 나타내면 [@"test" length] 로 표현한다.
- 3번에 대한 소스코드로 처리한 부분은 아래와 같다.
- Object C에서 메소드의 정보 전달 방법
- 메소드에 사용할 정보를 전달받는 것을 파라미터라고 한다.
- Object C에서는 메소드에 대한 파라미터를 넘겨줄 때 콜론(:)을 사용한다.
예시) NSString 클래스의 compare 함수에서 객체와 비교할 대상을 파라미터로 넘겨줄 때
[@"1" compare:@"09"] - Object C에서 메소드의 분류
- Object C에서 메소드를 클래스 메소드와 인스턴스 메소드로 분류한다.
- 클래스 메소드
- 정의 시에 (+) 기호를 사용한다.
- 객체 생성 과정이 필요하지 않다.(자바에서의 static 메소드와 비슷)
- 리시버가 클래스 : [NSString alloc] 형식으로 사용한다.
- 멤버변수(클래스 내에 정의한 변수) 접근이 불가능하다.
- 예시) +(instancetype) alloc
- 인스턴스 메소드
- 팩토리 메소드
- 정의 : 클래스 메소드에 속하며, 객체 생성을 목적으로 하고, 이름 규칙이 클래스의 이름으로 시작한다.
- NSString 클래스의 팩토리 메소드
- +(instancetype)string;
- +(instancetype)stringWithString:
- +(NSString *)string;
- 소스코드 예제는 아래와 같다.
예) NSString *str = [NSString stringWithString:@"Hello Object C"]; - 메소드 사용에 대한 Object C와 다른 언어의 차이점
- 메소드를 호출하는 형식 차이
- 기존 언어들에서는 "객체(Receiver).메소드()" 형식으로 사용한다.
- Object C에서는 "[객체(Receiver) 메소드]" 형식으로 사용한다.
- 메소드의 파라미터 사용 차이
- 기존 언어들에서는 "객체(Receiver).메소드(파라미터)" 형식으로 사용한다.
- Object C에서는 "[객체(Receiver) 메소드:파라미터]" 형식으로 사용한다.
- 클래스를 Receiver로 가지는 메소드 여부
- 다른 언어에서는 인스턴스를 정의하고 난 다음에 그 내부에 있는 메소드들을 사용한다. 아래는 자바의 예이다.
- Object C에서는 인스턴스를 정의하지 않고 사용하는 메소드와 인스턴스를 정의해서 그 내부에 있는 메소드들을 사용하는 방식 모두 가능하다.
- setter/getter 메소드 이름
- 다른 언어에서 setter/getter 메소드 이름을 정할 때 set"변수명", get"변수명"으로 하며 "변수명"의 첫글자는 대문자로 한다.
예시) int width -> setWidth / getWidth - Object C에서 setter/getter 메소드 이름을 정할 때 set"변수명", "변수명"으로 하며, setter의 "변수명"만 첫글자는 대문자로 한다.
예시) int width -> setWidth/width