메소드의 호출 방법에 대한 예비지식
───────────────────────────
Objective-C의 메소드 호출 방법은 조금 특수합니다. Java나 C++ 같은 일반적인 객체지향 언어를 경험하신 분들은 익숙해지기 전까지 조금 어렵게 느껴질 수도 있습니다. Objective-C의 메소드 호출 방식은 다음과 같습니다.

메시지 방식
[객체  메시지]

전체를 대괄호 []로 에워싸고 객체와 메시지는 사이에 공백을 두어 구분합니다. 이렇게 하면 Receiver인 객체로 메시지가 보내지고, 대응하는 메소드가 호출됩니다. 메시지의 반환값을 변수에 대입할 때는 다음과 같이 합니다.


메시지의 반환값을 변수에 대입
변수 = [객체 메시지]

이 때 메시지가 게터 메소드처럼 인수를 가지지 않는 메소드인 경우에는 메소드의 이름을 그대로 기술하면 됩니다.
예를 들어, Person 클래스의 인스턴스인 'myself'의 name 메소드를 호출해서 가져온 이름을 myName이라는 변수에 대입하기 이ㅜ해서는 다음과 같이 기술하면 됩니다. 
 
myName = [myself name];
 
인수를 가진 메소드
인수가 하나인 메소드는 다음과 같이 호출할 수 있습니다.

인수가 하나인 메소드의 호출
[객체 메소드:인수]

 메소드와 인수는 콜론 ':'으로 구분합니다. 예를 들어 setMail: 메소드에 newAddress라는 변수를 인수로 넘겨주기 위해서는 다음과 같이 기술합니다.

[father setMail:newAddress];
 
2개 이상의 인수를 가지는 메소드
2개 이상의 인수를 가지는 메소드의 경우, 그 뒤에 '라벨:인수'의 조합으로 기술하면 됩니다. 예를 들어, 인수가 두 개인 메소드는 다음과 같이 기술합니다.

인수가 둘인 메소드의 호출
[객체 메소드:인수1 라벨:인수2];
 
라벨이란 인수를 설명하는 키워드입니다. 뒤에서 설명하겠지만, 정확히 말하자면 메소드 이름의 일부입니다. 예를 들어 메일주소와 이름을 동시에 설정하는 메소드가 있다고 가정했을 때, 그것을 호출하는 방법은 다음과 같습니다.

[father setMail:newMail andName:newName];
 
메소드 이름과 셀렉터 
지금까지 메소드의 호출 방법을 몇 가지 알아보았습니다. Objective-C에서는 각 메소드는 메소드 이름과 라벨의 조합으로 식별됩니다. 정확하게는 '메소드:라벨1:라벨2:...'가 메소드 이름이 되는 셈입니다. 이것을 셀렉터(Selector) 또는 메시지 셀렉터라고 합니다. 이 때, 인수를 가지는 메소드인 경우에는 콜론 ':'도 셀렉터에 포함됩니다. 다음은 전술한 세 가지 메소드의 셀렉터를 정리한 것입니다.

:: 메소드명과 셀렉터
메소드 실행 예  셀렉터(메소드명) 
 myself = [myself name]; name 
 [father setMail:newAddress]; setMail
 [father setMail:newAddress andName:newName]; setMail:andName 
 
최초의 name 메소드와 2번째의 setMail: 메소드의 차이점에 주의하세요. 메소드명 끝에 ':'이 있는 메소드는 인수를 가집니다. 또한 ':'이 여러 개 있는 경우에는 기본적으로 그 수만큼 인수를 가집니다.

- name // 인수없음 
- setMail: //인수를 1개 가짐
- setMail:andName: //인수를 2개 가짐




   

YOUR COMMENT IS THE CRITICAL SUCCESS FACTOR FOR THE QUALITY OF BLOG POST
  1. 카일 2012.01.19 06:04 신고  댓글주소  수정/삭제  댓글쓰기

    잘보았습니다. 질문이 있네요
    셀렉터(메서드명중) setMail;가 아닌 setMail: 아닌가요?
    setMail:andName 는 맨뒤에 :을 제외한게 셀렉터인가요?

    • BlogIcon 권태성 2012.01.19 11:35 신고  댓글주소  수정/삭제

      셀렉터의 setMail 뒤에 ;은 오타인것 같습니다.^^;
      setMail:andName에서는 이 두개가 셀렉터입니다.
      setMail과 비교해보자면 setMail은
      setMail:newAddress로 인수 1개를 가지는 셀렉터이고
      setMail:andName은
      setMail:newAddress andName:newName과 같이
      인수 2개를 가지는 셀렉터입니다.
      여기서 셀렉터는 setMail, andName이고
      인수는 newAddress, newName이 되겠네요 ^^

  2. 2012.05.25 08:46 신고  댓글주소  수정/삭제  댓글쓰기

    정리가 잘 되어 있네요. 자바 프로그래머인데, 여러개의 인수를 가진 메소드 호출에 대한 의문이 해결 되었네요. 감사합니다. ^^