'Tech/Objective-C 언어'에 해당되는 글 2건

  1. 2011.01.20 여러 개의 인자를 받는 메소드
  2. 2011.01.17 메시지, 메소드, 셀렉터에 대해서
Tech/Objective-C 언어2011. 1. 20. 23:22

Objective-C 에서 여러 개의 인자를 받는 메소드는 다음과 같은 모양으로 선언됩니다.

- (void)setWidth:(float)width height:(float)height;

파라미터마다 반드시 하나씩 이름이 붙는 것처럼 보이기는 하지만, 이것은 Python이나 C# 에서 제공되는 Named Parameter 와는 달리 순서를 바꿔 쓸 수 없습니다. 아래와 같이 세 개의 인자를 받는 인스턴스 메소드가 있을 때,

- (void)setCoordinatesX:(float)x y:(float)y z:(float)z; 

다음과 같은 메시지 표현식은 위에 있는 메소드와 대응되지 않습니다. (y: 와 z: 의 순서가 바뀌었지요)

[myCoordinates setCoordinatesX:1.0 z:2.0 y:3.0]

즉,    (void)setCoordinatesX:(float)x y:(float)y z:(float)z  라는 메서드와 (void)setCoordinatesX:(float)x z:(float)z y:(float)y  라는 메서드는 서로 다른 메서드이며, 한 클래스 안에 같이 정의될 수 있습니다.


여러 개의 인자를 받는 메소드에서 재미있는 부분이 또 하나 있는데, 동일한 파라미터 이름을 반복해서 쓸 수도 있습니다. 아래와 같은 메서드 선언이 가능한 것이지요.

- (void)setValue:(int)v1 val:(int)v2 val:(int)v3; 

어차피 Objective-C 에서는 메소드의 파라미터 순서를 바꿔서 호출하거나, C++ 에서처럼 선언시에 파라미터 기본값을 설정해서 호출시에는 생략할 수 있는 기능이 제공되지 않기 때문에 위에서와 같은 메소드를 정의해도 별 문제가 없겠지요. 


'Tech > Objective-C 언어' 카테고리의 다른 글

메시지, 메소드, 셀렉터에 대해서  (0) 2011.01.17
Posted by wafe
Tech/Objective-C 언어2011. 1. 17. 23:55

Objective-C 에 구현된 개체 중심(Object-Oriented, 보통은 객체 지향이라고 하죠) 패러다임 관점은 Smalltalk 언어에서 영향을 받았습니다. 그래서 프로그램이란 개체들과 그 개체들 사이에서 일어나는 메시지 교환으로 바라보는 것이 Objective-C 에서의 OOP 관점입니다.  클래스 조차도 개체로 생각하기 때문에, 클래스에도 메시지를 보낼 수 있게 되어 있습니다. C++의 static method 와 대응되는 개념이라고 볼 수도 있죠. 특정 클래스의 인스턴스를 생성할 때 사용하는 alloc이나 init 같은 것이 대표적입니다.

C++의 메소드 호출과 대응된다고 볼 수 있는 Objective-C의 메시지 표현식은 아래와 같은 형태입니다.

[receiver message]

수신자를 정해서 메시지를 보내는 것이지요. 

클래스에 정의된 함수들을 Objective-C 에서도 동일하게 메소드(method)라고 부릅니다. 개체들이 동작하는 방식을 결정하기 때문에 method(방식)이라고 부르는 것입니다.

[myRectangle display];

[myRectangle setWidth:20.0];

[myRectangle setOriginX: 30.0 y:50.0]

위의 세 가지 메시지 표현식은 인자(argument)를 지정하지 않았거나, 하나 지정했거나, 두 개 지정한 메시지 표현식을 보여주고 있습니다. 각각의 메시지 표현식에서 인자를 뺀 부분, 즉 display, setWidth:, setOriginX:y: 는 개체에 있을 메소드를 선택하는 역할을 하고 있으므로 선택자(selector)라고 합니다. 

참고로, Objective-C 에는 메시지 포워딩이라는 개념이 있는데, 특정 개체에 구현되지 않은 메시지를 받았을 때 다른 개체에게 메시지를 보내서 처리를 위임하는 개념을 의미합니다. COM에도 비슷한 개념이 있는데, 메시지를 주고 받는다는 개념에서 출발한 '메시지 포워딩'이라는 말이 좀 더 이해하기 좋다는 생각이 듭니다. 


'Tech > Objective-C 언어' 카테고리의 다른 글

여러 개의 인자를 받는 메소드  (0) 2011.01.20
Posted by wafe