Objective-C 메소드 사용


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