자바는 클래스를 패키지 단위로 분류하고 있다. java.lang이나 java.util 과 같이 패키지를 사용해서 클래스를 분류함으로써 클래스의 이름을 정할 때의 불편함으로 줄이고 있다. (만약 패키지가 없었다면 java.awt.List 클래스와 java.util.List 클래스의 이름은 AwtList와 UtilList 처럼 되었을지도 모른다.)
자바스크립트에서도 약간의 트릭으로 자바의 클래스와 같은 효과를 낼 수 있다. 이를 위해서는 다음과 같이 Object()나 JSON 표기법인 '{}'를 사용하면 된다.
var tle = new Object(); // 또는 var tle = {};
위와 같이 패키지 이름으로 사용할 객체를 생성한 뒤에 다음과 같이 패키지를 나타내는 객체에 함수나 클래스 등을 추가해주면 된다.
var tle = {}; tle.getX = function(event) { // 함수 }
위에서 선언한 getX 함수를 사용할 때에는 다음과 같이 패키지 이름을 함께 명시하면 된다.
x = tle.getX(e);
패키지를 중첩해서 정의하고 싶을 때가 있을 것이다. 그런 경우에는 다음과 같이 각 단계별로 매번 객체를 생성해주면 된다.
var tle = new Object(); // tle 패키지 tle.dnd = new Object(); // tle.dnd 패키지 tle.util = new Object(); // tle.util 패키지 tle.dnd.getX = function() {...} tle.util.getX = function() { ...}
자바에 익숙한 사람은 무심코 다음과 같이 패키지 구조를 한번에 정의할 수도 있는데,
var tle.dnd = new Object(); // 에러!!!!
위 코드는 에러를 발생시키므로 반드시 상위 패키지부터 단계적으로 정의해주어야 한다.
패키지를 정의할 때 또 다른 주의할 점은 패키지를 정의한 이후에, 패키지 이름에 다른 객체를 할당해서는 안 된다는 점이다. 예를 들어, 아래의 코드를 보자.
var tle = new Object(); // tle 패키지 tle.dnd = new Object(); // tle.dnd 패키지 tle.dnd.getX = function() {...} ... tle = new Array(); // 앞에서 패키지로 지정한 tle에 다른 객체 할당 tle.dnd.getX(a); // 에러!!!! tle은 더 이상 패키지로 사용되는 객체가 아니다!
위 코드에서처럼 패키지로 사용하는 객체에 다른 객체를 할당하면 더 이상 패키지가 유지되지 않는다. 따라서, 패키지로 사용되는 객체에 다른 객체를 할당해서는 안 된다!
본 글에서는 아주 간단하게 자바스크립트에서 패키지를 정의하는 방법을 살펴보았다. 이 방법은 자바스크립트로 제공되는 대부분의 라이브러리에서 사용되는 방법이다. 여러분이 만든 자바스크립트 라이브러리에 패키지 개념을 추가함으로써 다른 자바스크립트 라이브러리와의 이름 충돌 문제를 해결할 수 있을 것이다.
틀 프레임워크, 틀 자바스크립트 등을 개발하였으며, JSP 2.0 프로그래밍, JSP 실전 Know-how, Jakarta Project 등의 책을 집필하였다. 자바캔의 운영자이며, 최근에 Ajax 강의를 진행중이다. 현재 CVNet e-biz 팀에서 근무하고 있다.
'JavaScript' 카테고리의 다른 글
한글 체크 자바스크립트 (0) | 2009.01.02 |
---|---|
새로고침 키 막기 (0) | 2008.12.09 |
오늘 구한 자바스크립트 모음 (0) | 2008.10.09 |
Javascript Trim 함수 (0) | 2008.08.25 |
트림기능 (0) | 2008.07.25 |