금요일, 12월 01, 2006

Ruby 양, 우아한 드레스에 운동화 신다.

Ruby는 우아한(Elegant) 코드 작성을 자랑하는 언어다.
블록, 영어식 코딩, 괄호 제거 규칙, 덕 타이핑 등등.
그런데 루비는 인자의 위치로 메소드의 시그니쳐를 구분한다.

예를 들어 다음은 일반적인 루비 메소드 호출 방법이다.

window.addNewControl "Title", 20, 50, 100, 50, true


뭔가 컨트롤을 만드는 거 같은데 무슨 인자가 들어가는지는 API 문서나 메소드 선언부를 봐야 한다.

아래와 같은 인자 갯수가 다른 하지만 동일한 기능을 하는 메소드를 한개 더 보자.

window.addNewControl "Title", 100, 50, true

2개의 인자가 기본값을 취하는 것 같은데 이 또한 API 문서나 메소드 선언부를 봐야 좀 알거 같다.

다음은 Objective C 에서 메소드를 호출하는 모습이다.
[window addNewControl WithTitle:@"Title"
xPosition:20
yPosition:50
width:100
height:50
drawingNow:YES];

그렇다, "Title"이란 이름으로 (x, y) 위치가 (20, 50)으로 너비가 100, 높이가 50 인걸 지금 그리란 이야기다.

[window addNewControl WithTitle:@"Title"
width:100
height:50
drawingNow:YES];


이건 아까 호출한 메소드랑 똑같은데, 위치가 기본값으로 들어가는 군.

이렇게 인자의 이름(키값)으로 메소드 시그니쳐를 구별하는게 Named parameter 방식이다.
그리고 이름만 같으면 순서는 상관없다.

[window addNewControl WithTitle:@"Title"
height:50
width:100
drawingNow:YES];


이런 우아한 방식을 왜 Ruby에서 안쓸까?
마침 이러한 Ruby에서의 Named parameter에 대한 토론을 볼 수 있었다.

Matz와 Tsela의 덧글을 중심으로 정리해 보면 Named parameter 방식은 인자조차 public 하게 공개된다는 것이다.

음... 그렇군 하이힐을 신으면 우아하기는 하지만 디스크와 발 형태 변화를 일으킬 수 있군.
미안해 Java군 그동안 우아하지 못한 운동화에 츄리닝 입었다고 뭐라고 해서.
사실 구두에 화려한 턱시도 입고 뛰기는 힘들겠지.
그리고 Ruby양, 운동화 신었지만 충분히 이뻐.

그런데 Ruby양은 좀더 우아해 지기 위해 구두를 구입하려고 생각 중이다.

댓글 없음: