Namespace

from. 만들면서 배우는 HTML+CSS+Javascript

네임스페이스란 쉽게 이야기해서 '구역의 이름'입니다. '주민센터'를 찾으려 할 때, 포털 사이트에 검색 창에 '주민센터' 키워드를 입력한 후 검색하면 '대한민국의 모든 주민센터'가 검색되어 나열될 것입니다. 여기서 '대한민국'이 네임스페이스입니다. '대한민국'은 국가 이름으로 '주민센터'를 포함하는 전부이자 시작점이 될 수 있습니다. 이를 '전역 네임스페이스(Global Namespace)'라고 합니다. 전역 네임스페이스는 생략할 수 있습니다.

그런데 '대한민국의 모든 주민센터'가 검색되니 불편합니다. 좀 더 세부적으로 검색하고 싶어집니다. 이번에는 앞에 지역명을 붙여서 검색해 보겠습니다. '길음동 주민센터'라고 검색하니 서울시 성북구 길음동에 있는 주민센터가 검색되었습니다. 여기서는 좀 더 지역적인 네임스페이스를 사용했습니다. 바로 '길음동'이지요. 이를 지역 네임스페이스(Local Namespace)라 볼 수 있을 것입니다. 지역 네임스페이스 내의 '주민센터'를 검색했기 때문에 다른 지역 네임스페이스의 '주민센터'는 검색되지 않는 것이지요. 간단하게 실생활의 예를 들어 설명해 봤는데요. 요점은 '지역 네임스페이스 내의 것은 지역 네임스페이스를 통해 접근할 수 있다'입니다.

시점을 바꿔 자바스크립트 측에서 정리해 보겠습니다. 클라이언트(웹 브라우저를 지칭) 자바스크립트에서 전역 네임스페이스는 window 객체입니다. 사실 클라이언트 자바스크립트에서 선언하는 변수나 함수는 전역 객체인 window의 프로퍼티로, 전역 네임스페이스 영역에 속해 있습니다. 전역 네임스페이스에 선언되어 있는 변수나 함수는 내부의 다른 네임스페이스에서 접근하거나 수정할 수 있습니다.

전역 네임스페이스의 변수나 함수는 수정(재정의)될 수 있다는 문제가 있습니다. 따라서 전역 네임스페이스에 변수나 함수를 선언하는 것을 권장하지 않습니다. 왜냐하면 다른 팀원이 이미 선언되어 있는 변수 또는 함수의 이름을 사용하여 수정할 경우, 기존의 해당 변수나 함수를 참조하늠 코드가 정상적으로 작동되지 않기 때문입니다.

이런 뜻밖의 사고로 문제가 생겼을 때, 원인을 찾느라 애를 먹는 일을 방지하기 위해서는 별도의 네임스페이를 만들어 내부의 프로퍼티로 처리하는 것이 좋습니다. 네임스페이스를 만드는 것은 그리 어렵지 않습니다. 전역 객체가 네임스페이스 역할을 하듯 별도의 객체를 생성하여 네임스페이스로 활용하면됩니다. 그리고 생성한 객체의 프로퍼티를 추가하여 활용하면 전역 네임스페이스의 프로퍼티와 충돌한는 것을 방지할 수 있습니다.