Java 패키지 이름에서 단어 구분 기호에 대한 규칙은 무엇입니까?


370

패키지 이름에서 단어를 어떻게 분리해야합니까? 다음 중 올바른 것은 무엇입니까?

  1. com.stackoverflow.my_package (밑줄)
  2. com.stackoverflow.my-package (하이픈)
  3. com.stackoverflow.MyPackage (카멜 케이스)

일반적인 표준은 무엇입니까?


15
아직 언급되지 않은 또 다른 예는 마침표를 사용하는 것입니다.com.stackoverflow.my.package
Brad Cupit

11
(2) 합법적 인 Java가 아닙니다. 왜 당신이 그것에 대해 묻는 지 확실하지 않습니다.
Lorne의 후작

이 모든 것이 독창성을 보장하기위한 것입니다. 실제로 시행되는 것은 java. * 공간을 벗어나는 것입니다.
Thorbjørn Ravn Andersen

답변:


248

공식 명명 규칙 문서에서 규정 한 내용은 다음과 같습니다.

패키지

독특한 패키지 이름의 접두어는 항상 모두 소문자 ASCII 문자로 작성하고 최상위 도메인 이름 중 하나 여야합니다, 현재 com, edu, gov, mil, net, org, 또는 국가를 식별하는 영어 두 문자 코드 중 하나가 ISO에 규정 된 표준 3166, 1981.

패키지 이름의 후속 구성 요소는 조직 자체의 내부 명명 규칙에 따라 다릅니다. 이러한 규칙은 특정 디렉토리 이름 구성 요소를 부서, 부서, 프로젝트, 기계 또는 로그인 이름으로 지정할 수 있습니다.

  • com.sun.eng
  • com.apple.quicktime.v2
  • edu.cmu.cs.bovik.cheese

참고 문헌


특히 최상위 도메인 접두사 다음에 나오는 내용은 위의 문서에서 지정하지 않았습니다. JLS는 또한 다음 예제를 제공함으로써 이에 동의합니다.

  • com.sun.sunsoft.DOE
  • gov.whitehouse.socks.mousefinder
  • com.JavaSoft.jag.Oak
  • org.npr.pledge.driver
  • uk.ac.city.rugby.game

다음 발췌문도 관련이 있습니다.

경우에 따라 인터넷 도메인 이름이 유효한 패키지 이름이 아닐 수 있습니다. 이러한 상황을 처리하기위한 몇 가지 제안 된 규칙은 다음과 같습니다.

  • 도메인 이름에 하이픈이나 식별자에 허용되지 않는 다른 특수 문자가 포함되어 있으면 밑줄로 변환하십시오.
  • 결과 패키지 이름 구성 요소 중 하나가 키워드 인 경우 밑줄을 추가하십시오.
  • 결과 패키지 이름 구성 요소 중 하나가 숫자로 시작하거나 식별자의 초기 문자로 허용되지 않는 다른 문자로 구성 요소 앞에 밑줄이 붙습니다.

참고 문헌


52
7.7 장에서도 패키지 이름에 밑줄을 사용할 것을 권장합니다!
Andreas Dolk


6
여기 : oracle.com/technetwork/java/codeconventions-135099.html 전체는 낮지 만 docs.oracle.com/javase/specs/jls/se7/html/jls-6.html#jls-6.1 은 첫 번째 구성 요소는 소문자 여야하며 대문자 분리의 예도 제거했습니다. 또한 여기 : docs.oracle.com/javase/tutorial/java/package/namingpkgs.html 모두 소문자입니다. 따라서 패키지 이름의 대문자는 현재 권장하지 않는 것 같습니다.
dhblah

27
7.7 장은 밑줄 사용을 권장하지 않으며 특수 / 무효 기호를 밑줄로 바꾸는 것이 좋습니다. 일반적인 사용을 권장하지는 않습니다.
eduard.dudar

270

세 가지 모두 규칙이 아닙니다.

사용하십시오 com.stackoverflow.mypackage.

패키지 이름은 낙타 케이싱, 밑줄 또는 하이픈 패키지 이름 지정 규칙을 따르지 않습니다 .

또한 Google Java 스타일 가이드 정확히 동일한 com.stackoverflow.mypackage규칙 ( )을 지정합니다 .

5.2.1 패키지 이름

패키지 이름은 모두 소문자이며 연속 단어는 단순히 함께 연결됩니다 (밑줄 없음). 예를 들어 com.example.deepspace, 하지 com.example.deepSpacecom.example.deep_space.

Google Java 스타일 가이드 : 5.2 식별자 유형별 규칙 : 5.2.1 패키지 이름 .


9
나는 부분적으로 동의합니다-자바 명명 규칙에 따라 '잘못된'것은 아니지만 내 의견으로는 사용해서는 안됩니다. ( java.sun.com/docs/codeconv/html/CodeConventions.doc8.html )
Andreas Dolk

@Andreas_D 당신이 제공 한 링크는 "고유 한 패키지 이름의 접두사는 항상 소문자 ASCII 문자로 쓰여집니다"
Jose Gómez

1
@ JoseGómez " 접두사 ". 따라서 imho 이것은 패키지 이름을 구성하는 다른 모든 단어를 CamelCase 또는 snake_case에서 배제하지 않습니다
Antek

21

누구나 밑줄을 사용할 수 있습니다 _ (괜찮습니다)

아무도 하이펜을 사용해서는 안됩니다 - (나쁜 연습)

패키지 이름 안에 대문자를 사용해서는 안됩니다 (잘못된 방법)

참고 : 여기서 "나쁜 습관"은 기술적으로 사용하기위한 것이지만 일반적으로 쓰기에는 좋지 않습니다.

출처 : 패키지 이름 지정 (docs.oracle)


47
예, 하이픈을 사용하는 것은 오류이기 때문에 나쁜 습관입니다. 그리고 컴파일되지 않는 코드를 작성하는 것은 실제로 나쁜 습관입니다.
glglgl

좋은 연결-출처가 무엇인지 알고있을 때이 모든 상황에 도움이됩니다. 나는 모든 소문자 규칙에도 익숙합니다. 그러나 문서에 따르면 단순히 선택 / 스타일의 문제 인 것처럼 보입니다. 나는 특정 게시물에 댓글이 패키지 이름 낙타 케이스에 대해 질문 추가 - (다만 일반적으로 규칙에 대해 물어 내가 BTW,이 게시물의 중복 생각하지 않는다) stackoverflow.com/questions/36755783/...를
Gene Bo

"대문자 없음", 모든 대문자 또는 ClassName처럼 보이는 것이 나쁜 아이디어라는 데 동의하지만이 예제도 제거합니다. "나쁜 습관"이라고 말하는 것은 내가 생각할 수있는 가장 설득력 있고 모호하며 의미없는 이유에 관한 것입니다. 이것에 대해 자세히 설명 할 수 있습니까? (즉, '나쁜 습관'을 정의하십시오)
Manius

당신은 기본적으로 왜 그것이 나쁜 것으로 여겨지는지를 정당화하지 않고 "나쁘다"고 말합니다. 공구가 파손됩니까? 혼란을 만드시겠습니까? 읽거나 입력하기가 더 어렵습니까? 주어진 예에서 우리는 많은 사람들에게 예라고 대답 할 수 있다고 생각합니다. 그러나 대문자에 대한 절대 금지는 이해할 수 없습니다 . 패키지 이름 LikeThis (클래스 이름과 같은)는 혼동 스럽지만 likeThis는 혼동하지 않으며 bigdataSource와 같은 두 단어 패키지 이름 ( "bigdatasource")에 대해 더 읽기 쉽습니다. camelCase가 내가 알지 못하는 패키지에 대한 나쁜 생각이 아닌 한, 괜찮습니다.
Manius

내가 이것을 놓쳤다 : oracle.com/technetwork/java/codeconventions-135099.html 모든 소문자는 오라클의 패키지 이름 규칙의 일부입니다. 필자는 두 단어 패키지 이름을 사용해야하고 두 개의 디렉토리로 만드는 것이 이치에 맞지 않는 낙타 사건을 배제하기 위해 다소 까다로운 규칙이라고 생각합니다. 그러나 오 잘.
Manius

18

공식 명명 규칙은 엄격하지 않으며 접두사를 제외하고 낙타 표기법을 '금지'하지 않습니다 ( com예제에서).

그러나 나는 개인적으로 대문자 와 하이픈 , 심지어 숫자를 피할 것 입니다. 나는 com.stackoverflow.mypackageBragboy가 제안한 것처럼 선택할 것입니다.

(하이픈 '-'은 패키지 이름에서 유효하지 않습니다)

편집하다

흥미 롭습니다. 언어 사양에는 명명 규칙에 대해서도 언급 할 내용이 있습니다.

에서 장 7.7 고유 한 패키지 이름은 우리는 (낙타 표기법 표기가 확인 될 수 있도록) 대문자로 구성 패키지 이름과 예제를 참조하고 밑줄 ( "메리 - 루"-> "mary_lou")에 의해 hyphonation를 교체하는 것이 좋습니다 접두사 자바 밑줄이있는 키워드 ( "com.example.enum"-> "com.example._enum")

패키지 이름의 대문자에 대한 몇 가지 예는 6.8.1 패키지 이름 장에서 찾을 수 있습니다 .


2
Andreas가 언급했듯이 패키지 이름에 대문자를 사용하는 것에 대한 규칙 은 없습니다 . 이를 피해야하는 한 가지 특별한 이유는 크로스 플랫폼 개발을 수행 할 때 사람들이 대소 문자 패키지 이름에 문제가있는 것을 보았습니다. 특히 누군가가 패키지의 이름을 바꾸거나 패키지 케이스를 변경하기로 결정한 경우 VCS와 개발 환경에 의존 하여 디렉토리 케이스와 정확히 일치 하는 작업을 수행하게 됩니다 .
Shorn

2
실제로, "고유 한 패키지 이름의 접두사는 항상 소문자 ASCII 문자로 작성됩니다"( oracle.com/technetwork/java/codeconventions-135099.html )
Jose Gómez

4

밑줄은 패키지 이름에서보기 흉하게 보입니다. 가치가있는 경우, 이름이 3 개 이상의 단어로 구성된 경우 이니셜 (예 :)을 사용 com.company.app.ingresoegresofijo (ingreso/egreso fijo) -> com.company.app.iefijo하고에 패키지 목적을 문서화하십시오 package-info.java.


4
패키지 이름
만보

1
그럴 수 있지. 그렇기 때문에 설명서를 사용하는 것이 좋습니다. 전체 단어를 연결하는 대신 언제든지이 방법을 사용합니다 (apiratesheet- 'API Rate Sheet'또는 'A Pirate Sheet'입니까?)
jpangamarca

1

패키지 이름에 단어를 연결하는 것은 대부분의 개발자가하지 않는 일입니다.

당신은 같은 것을 사용할 수 있습니다.

com.stackoverflow.mypackage

JLS 이름 선언 참조

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.