본문 바로가기

프로그래밍 이야기

자바 패키지 이름을 짓는 원리??

안드로이드가 자바를 기반으로 하다보니, 개발 과정에서 자바에 대한 지식을 필수적으로 필요로 하게 됩니다. 여러 가지의 자바 지식이 필요하기는 하지만, 그 중 기초 중의 기초, 패키지 이름에 관한 비밀(?) 에 대하여 알아보려 합니다.

보통, 안드로이드용 어플리케이션을 개발할 때 패키지 이름을 짓게 됩니다. 그런데 패키지 이름을 지을 때 보면 보통 "com.XXX.이름" 의 형태로 지어주게 되죠. 간단하게 이름만 쓰면 될 것이지, 왜 굳이 이런 식으로 복잡하게 하였을까요?? 저도 이것에 관해서 이전에 한번 본 적은 있는데, 기억이 잘 안나서(...) 이곳저곳 찾아보다가 그 해답을 발견하게 되었습니다.

간단하게 한마디로 요약하자면, "중복을 피하기 위해서" 입니다. 일반적으로, 간단한 프로그램을 개발할 때는 혼자서 개발을 다 하기에 다른 사람이 만든 클래스를 가져다 쓸 일이 없을 것입니다. (API조차 사용하지 않아도 되는 경우도 사실 허다하죠) 그런데, 만약 다른 사람의 클래스를 사용해야 하는데 다른 사람이 만든 클래스 중 자신이 만든 클래스와 동일한 이름의 클래스가 있다면 어떻게될까요?? 클래스가 중복되는 문제가 발생하겠죠?

이를 방지하기 위해, 패키지 이름 자체를 고유하게 만들어주면 자동으로 패키지 아래에 있는 클래스의 이름도 고유해지게 됩니다. 그리고, 가장 이름을 고유하게 만들기 위해서는 어떻게할지 고민을 하다보니 com.XXX.이름 의 형태를 취하게 된 것이지요. 회사명이 같을 가능성
도 있기에..)

그렇다면, 왜 굳이 com.XXX.이름 의 형태를 쓰는 것일까요? 그냥 XXX.com.이름의 형태를 취하면 안되는 것일까요?
그 이유는 바로 클래스의 위치, 클래스패스(Classpath) 때문입니다. 프로젝트를 생성하고, 프로그래밍을 진행하다 보면 각종 소스 파일이나 리소스 파일들은 각각의 폴더에 저장되게 되는데, 그 저장되는 위치가 패키지의 이름과 큰 연관성을 가지고 있습니다.

패키지 이름이 XXX.com.이름 의 형태를 가지고 있다면, 그 폴더 구조는 다음과 같이 됩니다.

\XXX  \com  \이름
\net    \이름

즉, 회사 이름이 같을 경우, 다른 회사에서 개발한 클래스임에도 불구하고 같은 폴더에 들어가게 됩니다. 하지만, com.XXX.이름 의 형태를 가진다면 이 문제는 자연스럽게 해결됩니다.

\com  \XXX  \이름
\net    \XXX  \이름

이렇게 되면서, 자연스럽게 패키지 이름의 중복도 막을 수 있고, 각 회사들의 소스가 겹치는 일도 막을 수 있습니다.