더북(TheBook)

하지만 꼭 이렇게 할 필요는 없다. C#/자바 개발자는 이런 식으로 조사해서 냄새를 맡으려고 하겠지만, 자바스크립트에서는 쉽게 생각해서 어떤 프로퍼티 존재 여부만 따져보면 그만이다.

if('x' in something) // something이 x라는 프로퍼티를 소유 또는 상속하는가?

다른 방법은,

if(something.hasOwnProperty('x')) // something이 x를 상속이 아닌 자신만의 프로퍼티로 소유하는가?

덕 타이핑은 지저분하게 보이지만, 컴포넌트에 더 다가갈 수 있게 해주는 중요한 수단이다.

TIP

덕 타이핑을 잘 활용하라. 적은 코드로도 객체를 폭넓게 다룰 수 있다.

 

예제 1-1 코드를 꼼꼼히 읽어본 독자는 내부 line 함수가 외부 line 함수 반환 이후 어떻게 외부의 rj3.svg.line 프라이빗 변수에 접근하는지 의아할 것이다. 다른 언어 출신 개발자라면 getX, getY, interpolate 변수가 이들을 선언한 함수에서 제어권이 빠져나갈 때 스택에서 튀어나갈 거라 예상할 것이다. 한 가지만 빼놓고는 실제로 그렇다. 바로 클로저(closure)라는 개념이다.

rj3.svg.line()을 호출하면 내부 line 함수를 반환한다고 했는데, 실제로 반환하는 것은 클로저다. 클로저는 꼭 함수 같은 객체지만, 함수의 생성 당시 환경(getX, getY, interpolate 변수)을 내부에 고스란히 간직한다. 내부 line에 있는 함수들을 호출할 때, 이들은 line의 원래 환경을 전부 기억하는 셈이다.

TIP

클로저는 자바스크립트의 정말 강력한 설계 요소다. 모든 함수는 클로저다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.