달력

032010  이전 다음

  •  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  •  
  •  
  •  
IBM DeveloperWorks가 소개한 자바 스크립트 프레임워크 비교(Framework comparison)는 풍성한 내용을 담고 있다. 최근에는 자바 스크립트 쓸 일이 없어 내용 자체에는 관심이 없었는데 기능 분류가 마음에 들어 발췌해둔다.

  • Selectors
  • DOM traversal
  • DOM manipulation
  • Utility functions
  • Event handling
  • Ajax

비교를 할 때 대상을 선정하는 일도 쉽지는 않지만, 조사를 통해 수집할 수 있지만, 비교 기준을 뽑는 일은 해당 분야에 대한 경험과 통찰력 없이는 불가능하다.

이올린에 북마크하기(0) 이올린에 추천하기(0)
Posted by 영회
우리 팀은 각종 UI 컴포넌트 조작을 위한 자바스크립트나 ActiveX 설정을 위한 태그를 숨기기 위해 래퍼(Wrapper) 형태의 자바 스크립트 파일을 작성해 공용 라이브러리로 썼다. 그런데, ActiveX 기반의 UI 솔루션이 버전업을 하면서 API 즉, 스크립트 문법을 크게 변경하면서 라이브러리 사용자는 영문도 모르는 오류를 만났다. 즉각 대응할 문제지만, 상용 솔루션이기 때문에 사용법을 익히기가 쉽지 않다. 우여곡절 끝에 우리는 상용 UI 솔루션 대신 우리가 제어할 수 있는 것들로 대체하기로 했다. 그러한 과정에서, 기존에 배포한 자바 스크립트 라이브러리 변경이 불가피했다.

릴리즈 노트 등을 통해 변경할 내용을 설명하는 기본적인 대응책 외에는 뾰족한 수가 없었다. 자바의 deprecate 같은 방법이 자바 스크립트에 없나 보니 쉽게 찾을 수 있었다:

Deprecation.js: easing the 1.5 → 1.6 transition

deprecation.js screenshot


경고(Warning)는 파이어폭스 전용인 Firebug에만 찍힌다는 제약은 있었지만, 자바의 deprecation 메커니즘을 파일 하나로 구현했다. 프로퍼티 설정을 통해 deprecation을 꺼버릴 수도 있다. :)
DeprecationNotifier.logDeprecation = false;
구글링으로 PHP의 사례, How to deprecate a function in PHP? 도 볼 수 있었다. 자바의 경우와 같은 문제를 다루지만, 해결 방식은 조금 달라보였다. 질문자가 만족한 답변은 PHP의 override_function() 이었다.

<?php
override_function
('strlen', '$string', 'return override_strlen($string);');
function
override_strlen($string){
        return
strlen($string); 
}
?>

자바의 override[각주:1]와 달리 override_function 은 시스템 함수를 대치할 때 사용한다. 자바에서와 같이 상속이 전제되는 override가 아니다. 스프링 사용자라면 메소드 교체(Method Replacement)와 유사하다 느낄 수 있을 것이다.

질문자가 원하는 답변은 아니었지만, 나머지 답변은 두 가지로 나눌 수 있다.
  • deprecate 함수를 호출하면 오류를 발생시키기
  • 소스코드 검사(inspection)을 통해 해당 함수 걸러내기
둘은 완전히 다른 관점에서 본 해결책이다. 전자는 내가 짠 코드가 익명의 사용자에게 쓰일 수 있는 환경을 고려한 것이라면, 후자는 소스코드에 대한 통제 혹은 소유권을 갖었다는 맥락(context)하에 내린 답변이다.

PHP 개발자는 아니지만, 잠깐의 곁눈질을 통해 흥미로운 경험을 할 수 있었다.
  1. 우리말로는 어떤 단어로 표현할 수 있단 말인가? '상속받는 것을 무시하고, 덮어버리기?' [본문으로]
이올린에 북마크하기(0) 이올린에 추천하기(0)
Posted by 영회
일종의 OOP(object-oriented programming)

보편적인 OOP와의 차이점
- 클래스가 없다.
- 상속(inheritance)을 통해 behaviour reuse

상속에 대한 구현 방식이 일반적인 OOP와 다르다.
- 기존의 객체를 프로토타입(prototypes)으로 삼아 인스턴스 복제(cloning)를 통해서 상속 실현

자바의 상속과 비교해보면
super:sub = prototype:clone


이러한 특징으로 인해 다양한 이름으로 불린다:
class-less, prototype-oriented, or instance-based programming

JavaScript 가 대표적인 사례

프로토타입 기반 프로그래밍의 옹호자의 주장에 따르면
클래스 기반 언어는 개발의 초점을 클래스 분류와 관계 포착에 의미를 두지만
프로토타입 기반 프로그래밍은 행위에 초점을 맞추다가..
(행위에 따른) 전형적인 모습에 기초하여 추후에 클래스를 분류한다.
유사 개념: 오리 인터페이스(Duck Interface)

개인적으로는이러한 분류(Classification)가 정적인 정의에서 출발하는 것보다
훨씬 실효성이 있다고 본다. 추정의 근거는 이러한 방식이 실증적이고
연속적으로 진화할 수 있는 접근이기 때문이다.

실행시점에서 동적으로 타입을 정의하는 루비류의 언어와
상당한 유사점을 갖고 있다.

Unlike the relationship between class and instance in class-based object-oriented languages, the relationship between the prototype and its offshoots does not require that the child object have a memory or structural similarity to the prototype beyond this link.

그리고 위의 내용을 보면 Duck Typing과도 닮아 있고(오리 인터페이스(Duck Interface) 참조)
상태가 클라이언트에게 완전히 Transparent 하다는 것은...
추상화 수준이 다르지만 SOA의 방향과도 매우 흡사한 느낌이다.

As such, the child object can continue to be modified and amended over time without re-arranging the structure of its associated class as in class-based systems. It is also important to note that not only data but also methods can be added or changed. For this reason most prototype-based languages refer to both data and methods as "slots".

위 내용까지 읽어보면 매료된다. (주의하자.)

상속이 실현되는(메소드를 호출하면 프로토타입의 메소드가 불려지는)
메커니즘은 Delegation이라고 부른다. 언어의 런타임이 Dispatching 해주는...

mitosis이라는 생물학적 개념을 차용한 것도 눈에 띈다.
유사분열이라.. 핵분열을 통한 복제.. 복제를 통해 새로운 개체가 탄생하는??
흥미롭다.

장단을 논한 부분을 대략적으로 훑어보면
상속을 하거나/주는 양자의 관계가 강력하지 않다는 것.
상태의 구조는 공유되지 않고, 링크도 약하다.
유연성이라고 요약해버리자. ㅡㅡ;

단점으로는 correctness, safety, predictability, and efficiency. 이런 단어들이 나열된다.
정적 타이핑과 비교해서 이들이 약해진다는..
보수적 혹은 안정적 관점이다.


참고: Prototype-based programming
이올린에 북마크하기(0) 이올린에 추천하기(0)
Posted by 영회