변화에 대한 대응: IR8 RC 1 에서 Getter/Setter 구문 업데이트

 

 

프로그램 관리자로서 기능의 사양에 대한 글을 쓰는 것은 (꼭 필요한 사항이기 때문에) 정말 즐거운 일입니다. 어떤 사양에 대해서도 프로그램 관리자는 특정 설계의 장점과 단점의 조화 (영어), 고객의 요청에 대한 배려,이용 가능한 피드백이나 원격 측정법 정보 (영어) 등에 대해서 주의 깊게 심사 숙고합니다. 이러한 정보에 근거하여, 무엇을 어떻게 만들지에 대한 가설을 세웁니다. 최선의 계획을 세우기 위한 노력에도 불구하고, 초기에는 불가능했던 몇가지 가설들이 개발과정 중에 변경됩니다. 이렇게 자주 일어나는 변경 영역 중 하나가 웹 표준에 관한 사양입니다. 따라서 현재의 상황을 재평가하고, 필요하면 제품을 변경하기 위해 스케줄에 여유를 가지고 준비했습니다.

개발 주기의 중간 쯤에 웹 표준의 변경에 대응하는 것은 여러가지 이유에서 도전적인 작업입니다. 개발자의 입장에서 엄밀하게 말하면, 기능 변경은 항상 대가를 수반합니다. 일반적으로 그 대가는 검토하여 수정하는데 시간이 필요한 일련의 제품 버그입니다.  그리고 기준이 되는 표준이 변경될 가능성이 있기 때문에 위험이 따릅니다. 변경을 검토할 때는 항상 그 영향을  주의 깊게 심사숙고 해야 합니다.

이 글에서는 웹 표준의 진화에서  최근의 중요한 사건과 Internet Explorer 8 이 어떻게 대응하는지를  설명합니다. 이 글에서는 개발 기간 중의 웹 표준 변경에 대응한다는 복잡한 난제에 대해 독특한 시점을 제공하며, 동시에 곧 출시될 릴리스 후보에서의 변화를 알려드리는 좋은 기회도 될 것입니다.

ECMAScript 3.1

ECMAScript (영어) 는 JavaScript  정의 표준이지만, 최신 업데이트는 10 년 전이었습니다. 그러나 올 초,  “ECMAScript 3.1”로 알려진 개정판이 표준화를  위해 급속한 전진을 했습니다. Internet Explorer 8 개발에 착수한 시점에서는 ECMAScript 의 새로운 버전 책정이 나와서, 우리의 개발계획과 통합하는 충분한 시간적 여유가 있다고 예상했습니다. 최근 ECMAScript 3.1 의 급속한 진전으로,  그러한 예상이 가능하게 되었습니다. 특히 ECMAScript 3.1 드래프트 (영어) 에 포함된 기능에 대해 호환성이 없는 것을 Internet Explorer 8 에 탑재하지 않도록 주의를 기울였습니다.

ECMAScript 3.1 에는 웹 개발을 쉽고 보다 강력하게 만들기 위해, 많은 JavaScript 언어 확장이 포함되어 있습니다. 이러한 기능의 하나가 JSON 지원으로,  IE 8 의 네이티브 JSON API 를 ECMAScript 3.1 드래프트에 포함된 JSON API 와 동일하게 해야 한다고 결정했습니다. 또 주목할 만한 기능은 드래프트에 포함된 getters 와 setters 지원이었습니다.

DOM 프로토타입

최근 수개월간, JavaScript 프로토타입 개념을 DOM 에 도입 (영어) 하기 위해, DOM 과 JavaScript 의 호환성을 더 높이기 위한 기능을 연구했습니다. DOM 속성을 이용하여, 실력 있는 웹 개발자는 HTML 요소나 새로운 기능을 가진 DOM 개체를 쉽게 확장할 수 있습니다. 보다 고도의 라이브러리나 추상화 층을 개발하거나 또는 기본 제공 속성이나 메서드를 독자적으로 구현한 것과 바꾸는 것도 가능합니다. 이것은 유력한 JavaScript 전문가와 많은 사람들에게 가장 강력하게 요구되던 프로그래밍 기능의 하나입니다. 이 기능의 매우 중요한 부분 중 하나가 DOM 의 getter/setter 속성 (영어) 입니다.

버전 3.1 이전의 ECMAScropt 에는 getter/setter 속성 개념은 포함되어 있지 않았습니다. 그러나 일부 JavaScript 의 구현에서는 몇가지 IE 이외의 주요한 브라우저와 프로그래밍환경에서 지원된 (영어) API 를 사용하여 지원되었습니다. 우리가 DOM 프로토타입 지원을 위한 작업을 시작 했을 때에는 사실상의 표준 (de facto)이 되는 getter/setter API 를 구현하는 일이 었습니다.

ECMAScript 3.1에서는 초기 단계에서 getter/setter 속성을 포함하는 것이 결정되었지만, 사실상의 표준 대신보다 유연성 높은 API 를 사용합니다 (영어)(Word 형식). 이 결정은 이미 사실상 표준 getter/setter API 를 지원하는 브라우저를 포함한, 모든 주요한 브라우저 공급업체가 동의했습니다. ECMAScript 3.1 책정은 전진했지만, 일부 브라우저 공급업체에는 변화가 생겨, 우리는 중대한 선택을 해야만 했습니다. 예상하지 못한 변환에 대해, ECMAScript 3.1 의 DOM 에의 getter/setter API 구현을 추구해야 할지,  아니면 현재 완성된 기능으로 출시하고, ECMAScript 3.1 API 는 이후 버전에 포함해야 할지 고민했습니다.

그 대답은 웹 개발자에서 무엇이 최선인지를 생각했습니다. 개발자는 상호 운용성 (영어)을 필요로 하고, ECMAScript 3.1 에서 보여준 것처럼, getters/setters 를 지원하여 장기적인 상호 운용성이 제공됩니다. Beta 2 공개는 불과 몇 주 전에 결정되었고, 릴리스 품질을 저하시킬 수는 없었습니다. 게다가 Beta 2에서는 기능을 삭제하는 것 (RC1 까지 그대로 둠)보다는 현재의 구현 (사실상의 표준 getter/setter) 대로 출시하고 웹 개발자에게 유효성 검사 받아서 버그를 잡는 것이 중요하다고 판단했습니다. 피드백을 주신 것에 감사드리며, 이렇게 하여 호환성에 대응할 수 있는 충분한 시간을 가질 수 있었습니다.  

표준이 우선

Internet Explorer 8 릴리스 후보에서는 단지 고품질의 DOM 속성 구현하는 것 뿐만 아니라, getter/setter 구현을 ECMAScript 3.1 드래프트 표준에 따라서 구현하도록 변경할 수 있던 것을 기쁘게 생각합니다. 출시를 앞두고, JavaScript 엔진이나 DOM 은 ECMAScript 3.1 의 확장된 모든 기능을 지원하지는 않지만, 웹 개발자가 Internet Explorer 8 의 DOM 대상으로 getters 와 setters 를 추가하여 기술한 코드는 앞으로도 계속 기능합니다. 왜냐하면 그러한 코드는 웹 표준에 근거하기 때문입니다.

IE8 의 새로운 기능들에 기대가 큽니다. 시작하는데 도움을 드리기 위해 DOM 프로토타입과 getter/setter를 소개하는 글을 썼습니다. (새로운 구문은 곧 출시될  릴리스 후보 버전에서 일반적으로 이용 가능합니다)

아마 알고 계실지도 모르지만, MSDN 도 Internet Explorer 8 에서 프로토타입 이용 가능(영어)이 반영되었습니다.

DOM 속성과 getters/setters 에 의해, 매우 세련된 프로그래밍 가능성이 커집니다. 앞으로 블로그에서 IE8에서는 어떠한 시나리오가 가능하게 되는지 세부 사항을 설명할 예정입니다. 기능을 사용하여 이미 세련된 시나리오를 구현하고 있다면, 꼭 댓글을 남겨 주세요.

변화에 대한 대응이라는 주제로 돌아와서, 먼저 웹을 위한 가장 좋은 사양이라고 생각했던 것이 제품 개발 도중에 변경될 수도 있습니다. Internet Explorer 8 의 DOM 의 getters/setters에 대한 제 경험이 그것을 개인적으로 증명하고 있습니다. IE8 를 완성한 후에도 우리는 적확한 정보를 수집하고, 고객의 피드백에 귀를 기울여 제품을 적절하고 유용하게 변경할 예정입니다. 우리 팀은 웹 표준과 상호 운용성을 달성하기 위해서 웹 표준 지원에 많은 노력을 하고 있으며,  최종적으로는 웹 개발자의 생산성 향상에 기여할 것입니다. ECMAScript 3.1 채용은 그것을 위한 커다란 전진입니다.

 

-Travis Leithead
프로그램 관리자

 

* 1/15 업데이트: 위에서 소개한 링크에서 참조할 수 있는 몇가지 예에는 속성 기술자가 “getter”속성과 “setter”속성이 된 경우가 있기 때문에 주의해 주십시오. 이러한 기술자는 최근에서야 “get”과 “set”으로 단순화 되었습니다. (이것은 ES3.1 언어 이외 부분과의 일관성 때문) 이 변경은 현재의 프로그램 이전에는 반영되었지만, 문서 업데이트는 작업 중입니다.

* 이 글은 Internet Explorer 개발 팀 블로그 (영어)의 번역 문서입니다. 이 글에 포함된 정보는 Internet Explorer 개발 팀 블로그 (영어)가 생성된 시점의 내용으로, 제품의 사양이나 기능이 보장되는 것은 아닙니다. 이 글에 포함된 정보의 이용은 사용 조건을 참조해 주세요. 그리고, 이 글의 게재 시점에서 Internet Explorer 개발 팀 블로그 (영어)의 내용이 변경될 수 도 있습니다. 최신 정보는 Internet Explorer 개발 팀 블로그 (영어)를 참조하십시오. 

 

업데이트 일: 2009 년 1 월 13 일

영어 원본 : Responding to Change: Updated Getter/Setter Syntax in IE8 RC 1 (영어)