주요글: 도커 시작하기
반응형
자바스크립트에서 자바의 패키지와 같은 이름공간을 정의하는 방법을 살펴본다.

자바스크립트에서 패키지 지정 방법

자바는 클래스를 패키지 단위로 분류하고 있다. 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은 더 이상 패키지로 사용되는 객체가 아니다!
    

위 코드에서처럼 패키지로 사용하는 객체에 다른 객체를 할당하면 더 이상 패키지가 유지되지 않는다. 따라서, 패키지로 사용되는 객체에 다른 객체를 할당해서는 안 된다!

본 글에서는 아주 간단하게 자바스크립트에서 패키지를 정의하는 방법을 살펴보았다. 이 방법은 자바스크립트로 제공되는 대부분의 라이브러리에서 사용되는 방법이다. 여러분이 만든 자바스크립트 라이브러리에 패키지 개념을 추가함으로써 다른 자바스크립트 라이브러리와의 이름 충돌 문제를 해결할 수 있을 것이다.

관련링크:

+ Recent posts