목차
기즈모(Gizmo)와 프로토타입(Prototype)
본문내용
케이션을 만들 수 있다. 사용자의 행위(클릭, 입력)에 대해 function들을 실행시켜주는 것이 지금까지 자바스크립트 UI개발의 일반적인 방식이었다.
function기반으로 설계한 코드를 객체지향으로 전환하기 위해서는 사고방식도 바꿔야 한다. 사용자의 행위가 function을 유발하는 것이 아니라, 사용자가 특정 UI 객체에 이벤트를 발생시켜 그 객체와 연관된 객체의 이벤트 핸들러가 반응하는 개념이 되는 것이다. 음, 사실 이는 객체지향의 이슈라기 보다는 옵저버 패턴이나 이벤트 기반 프로그래밍의 영역인 것 같기도 하다. 상속 등의 주제 보다는 이벤트 핸들러를 정의하는 것이 코드의 대부분이니. 이 내용은 주제에서 벗어나므로 따로 글을 정리해야겠다.
프로토타입은 계속 진화하고 있다. 진화의 방식은 객체의 생성과 병합 과정이 아닐까 싶다. 1.5.0에서는 DOM에 엘리먼트를 추가할 때 사용할 수 있도록 Insertion 객체를 제공했다가 1.6.0에서는 Element 객체의 insert 메서드로 병합되었다. Insertion 객체는 정말 억지로 만들었다는 느낌이 들었었는데 아니나다를까 다른 객체의 메서드로 강등되었다. 중요한 역할을 하긴 하지만 객체로 독립하기엔 심심한 감이 있었다.
또 엘리먼트의 좌표값과 관련된 메서드를 제공하는 Position 객체도, 상당수의 메서드를 Element객체에게 양보하게 되었다. 하위호환성을 감안해 호출은 될 수 있도록 Position 객체 내에서 해당 메서드의 선언부분은 남아있지만 정의부분은 모두 Element 메서드를 호출하는 코드로 바뀌었다.
추가하고자 하는 기능 중 기존 객체의 메서드로 추가하기 애매한 것이 있으면 일단 새로운 객체로 분리해 발전시키고, 일정 기간 두고 본 후에 해당 객체가 더 이상 발전할 가능성이 안 보이고 다른 객체의 메서드로 대체가 가능하다고 판단되면 병합하는 과정을 거친다. 특정 버전의 프로토타입을 관찰하는 것도 의미가 있고, 버전 간의 차이를 관찰하는 것도 의미가 있다.
프로토타입 1.5.0 버전은 몇 번 훑어봤지만 1.6.0은 그 상당한 코드량 때문에, 약간의 변경 사항만 파악하고 있고, 구체적인 부분은 좀 더 시간을 두고 살펴봐야겠다. 저번 글에서도 이야기했지만, 개인적으로는 프레임워크를 사용하는 것 보다는 프레임워크를 뜯어보는 것을 더 중요하게 생각한다. 뜯어봐서 이해할 수 있게 되기 전 까지는 물론 사용하는 것으로 만족해야겠지만.
function기반으로 설계한 코드를 객체지향으로 전환하기 위해서는 사고방식도 바꿔야 한다. 사용자의 행위가 function을 유발하는 것이 아니라, 사용자가 특정 UI 객체에 이벤트를 발생시켜 그 객체와 연관된 객체의 이벤트 핸들러가 반응하는 개념이 되는 것이다. 음, 사실 이는 객체지향의 이슈라기 보다는 옵저버 패턴이나 이벤트 기반 프로그래밍의 영역인 것 같기도 하다. 상속 등의 주제 보다는 이벤트 핸들러를 정의하는 것이 코드의 대부분이니. 이 내용은 주제에서 벗어나므로 따로 글을 정리해야겠다.
프로토타입은 계속 진화하고 있다. 진화의 방식은 객체의 생성과 병합 과정이 아닐까 싶다. 1.5.0에서는 DOM에 엘리먼트를 추가할 때 사용할 수 있도록 Insertion 객체를 제공했다가 1.6.0에서는 Element 객체의 insert 메서드로 병합되었다. Insertion 객체는 정말 억지로 만들었다는 느낌이 들었었는데 아니나다를까 다른 객체의 메서드로 강등되었다. 중요한 역할을 하긴 하지만 객체로 독립하기엔 심심한 감이 있었다.
또 엘리먼트의 좌표값과 관련된 메서드를 제공하는 Position 객체도, 상당수의 메서드를 Element객체에게 양보하게 되었다. 하위호환성을 감안해 호출은 될 수 있도록 Position 객체 내에서 해당 메서드의 선언부분은 남아있지만 정의부분은 모두 Element 메서드를 호출하는 코드로 바뀌었다.
추가하고자 하는 기능 중 기존 객체의 메서드로 추가하기 애매한 것이 있으면 일단 새로운 객체로 분리해 발전시키고, 일정 기간 두고 본 후에 해당 객체가 더 이상 발전할 가능성이 안 보이고 다른 객체의 메서드로 대체가 가능하다고 판단되면 병합하는 과정을 거친다. 특정 버전의 프로토타입을 관찰하는 것도 의미가 있고, 버전 간의 차이를 관찰하는 것도 의미가 있다.
프로토타입 1.5.0 버전은 몇 번 훑어봤지만 1.6.0은 그 상당한 코드량 때문에, 약간의 변경 사항만 파악하고 있고, 구체적인 부분은 좀 더 시간을 두고 살펴봐야겠다. 저번 글에서도 이야기했지만, 개인적으로는 프레임워크를 사용하는 것 보다는 프레임워크를 뜯어보는 것을 더 중요하게 생각한다. 뜯어봐서 이해할 수 있게 되기 전 까지는 물론 사용하는 것으로 만족해야겠지만.