태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

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

2009.01.12 13:26

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

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

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

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

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

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

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

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

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

이렇게 되면서, 자연스럽게 패키지 이름의 중복도 막을 수 있고, 각 회사들의 소스가 겹치는 일도 막을 수 있습니다.
저작자 표시 비영리 변경 금지
신고

커니 프로그래밍 이야기 , , , , ,

  1. 이런 저런 아이디어가 떠올라서 저도 모바일 프로그래밍을 좀 배워볼까해요.
    님 포스팅 보고 코코아를 배워보려고 했으나 맥을 깔아야 된다는 말에 그만..
    그래서 안드로이드를 배울까 싶어 여기저기 찾는데, 자바를 배워야 한다는 말에
    커다란 벽을 만난기분이네요. 코코아는 배우기 쉽다는 말이 자자하던데 자바는..

    일전에 닷넷좀 배우다가 관둔 경력이 있는데, 이번엔 꼭 끝까지 해봐야겠습니다. :)

  2. 자바도 그리 어렵지 않습니다 ^^
    C공부하다가 자바를 접했을때 잠시 혼란이 있기는 했었지만, 그 때가 지나니 훨씬 수월했습니다 ㅎㅎ

    아마 자바를 통해서 객체지향 개념을 흡수하신다면 코코아또한 더 배우기 수월해지실거라 봅니다 ^^

  3. 매번 패키지명 지을 때마다 고민 했었는데.. 어느정도 고민거리가 줄었네요.. 감사합니다..

    이글 퍼갈께요.. 보시고 퍼가는 방법이 잘 못 됐으면 말씀해 주세요..

  4. 아.ㅡ.ㅡ 저런 방법이었군요.ㅡ.ㅡa 뭐 모르고.ㅡ.ㅡ 제 블로그 주소를 넣었지만요^^..ㅋㅋ

  5. ㅎㅎ 저도 많이 궁금했었답니다 ~

  6. Blog Icon
    카리만

    "굳이 com.XXX.이름 의 형태를 쓰는 것일까요? 그냥 XXX.com.이름의 형태를 취하면 안되는 것일까요?"

    이 부분이 잘 이해가 가지 않습니다.

    com.XXX.이름 / net.XXX.이름 / 두가지가보이는데, com.XXX.이름 으로만 사용할 수 있는 것 아닌가요?

  7. example.net 이라는 사이트와
    example.com 이라는 사이트가 동일한 사이트일지 아닐지 모릅니다.

    패키지명에서는 위와 같이 사이트명 형태로 이름을 지어주는데,
    각각의 사이트에서 각자의 사이트 이름을 따서 패키지 이름을 짓게 되면

    example 폴더 내에 /net 과 /com 폴더가 두개 생성되게 되지요.
    즉 두 회사는 아무 관련이 없는데도 같은 폴더 내에 파일들이 생성되게 되고, 혹시나 겹치는 파일이 있을 경우 골머리를 앓게 되지요.

    실제로 패키지이름으로 사용할 수 있는 형태는 제한이 없습니다.
    다만 저러한 형태는 암묵적인 규칙이지요.