더북(TheBook)

어쨌거나 프로퍼티/변수명은 대부분 D3 원본 그대로 두었으니 관심이 있는 독자는 https://github.com/d3/d3-shape/blob/master/src/line. js에서 전체 코드를 뜯어보면 눈에 익을 것이다. 우리는 몇 군데 변수명을 바꿔 좀 더 분명하게 고쳤다. 외부와 내부 함수명이 모두 line이라 조금 헷갈릴 수 있는데, 여러분이 기꺼이 받아들이고 즐겨야 할 D3 소스 코드의 기질이다.

함수가 함수를 반환하는 일은 프로그래밍 언어에서 대개 혼동을 일으키는 금기 사항이지만, 자바스크립트에서는 아키텍처의 선택권을 넓혀주는, 지극히 당연한 습관이다. 강력한 자바스크립트 코드를 원한다면 우선 일급 객체(first-class object) 1 인 함수를 인자로 주고 반환값으로 돌려받는 형태에 길들어야 한다. 자바스크립트 함수는 일급 시민으로서 자신만의 프로퍼티와 메서드를 가질 수 있다.

TIP

자바스크립트 함수는 메서드/프로퍼티를 지닌 객체로, 다른 언어의 함수보다 훨씬 유연하고 강력하다.

 

예제 1-1을 보면 함수에 메서드를 붙이는 장면이 나온다.


line.x = function(funcToGetX) {
    if (!arguments.length) return getX;
  getX = funcToGetX;
  return line;
};

 

이렇게 만든 x는 반환된 함수 line의 멤버다. x와 그의 쌍둥이 y를 어떻게 사용하는지 알고 나면 내부에 감춰진 자바스크립트다운 기괴함을 보게 된다.

 

1 역주 자바스크립트 함수는 일급 객체입니다. 즉, 다른 함수에 인자로 전달할 수 있고, 다른 함수로부터 함수를 반환받을 수 있으며, 함수 자체를 변수에 할당하거나 자료구조에 저장할 수도 있습니다.

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