약어가 포함 된 Java 명명 규칙 [닫기]


218

: 올바른 다음 Java 클래스의 이름은 무엇입니까 DVDPlayer또는 DvdPlayer?


93
나는 약어를 싫어한다. DigitalVersatileDiscPlayer앞으로 나아갈 길입니다.
Tom Hawtin-tackline

7
농담으로 톰에게 +1. "올바른"이 "표준"또는 "가장 일반적인"로 해석되면이 질문이 도움이됩니다. 받아 들여진 대답은 훌륭합니다!
Jon Coombs 2018 년

6
나를 위해 그런 두문자어를 한 단어로 생각하는 것이 합리적이며 관습 과 사용을 따른다 DvdPlayer.
Daniel

7
스타일 가이드 는 다음과 같이 말합니다. "약어가 더 긴 클래스 이름의 일부인 경우 약어를 단어로 형식화하십시오." 그래서 DvdPlayer길을 가야하는 것입니다. (그리고 Tom의 경우, "약어가 긴 형식보다 더 널리 사용되지 않는 한 전체 단어를 사용하고 약어를 사용하지 마십시오." , "DVD"가 "Digital Versatile Disc"보다 널리 사용되는 것
같습니다

당신은 확실히 "토론"을 의미합니까? :)
Ville Oikarinen

답변:


237

대답은 Java에는 이것에 대한 단일 표준이 없다는 것이므로 .NET Framework 디자인 지침에서이를 지정하고 싶습니다.

이제 주제를 벗어난 것에 대해 슬래 밍하기 전에 Java 및 .NET Framework의 클래스 이름 지정 지침은 매우 유사하므로 .NET 지침이 설득력있는 참조로 유용합니다.

일반적인 규칙

두 지침 모두 약어가 널리 알려져 있고 잘 이해 될 때 약어를 사용하는 것이 좋습니다. DVD 또는 XML은이를 잘 보여주는 예입니다. 즉각 인식 할 수는 있지만 확장 버전을 인식하는 데 시간이 조금 더 걸립니다.

약어

.NET Framework 지침은 두 가지 일반적인 약어 'ID'와 'OK'가 식별자에 사용될 수 있다는 점을 제외하고 약어 (약어와 달리)를 사용하지 않는 것이 좋습니다. 약어를 사용하는 경우 Id카멜 케이스 식별자의 첫 단어 (파스칼 케이스 식별자와 반대)를 제외하고 항상 대소 문자를 혼합하여 사용합니다 .

Java에서는이 규칙이 일부만 준수됩니다. 살펴보세요 철자를 혼합하는 방법에서 getIDgetIdJCL을에 있습니다. (해당 페이지 아래로 스크롤). 에서 자바 8 버전 하지만, getIdPascalCase 대회가 요즘 선호 암시하는, 더 많은 사용된다. 가능한 경우 약어를 완전히 피하는 것이 가장 좋습니다.

짧은 머리 글자

.NET Framework 지침에 따르면 'IO'와 같은 두 글자 약어는 두 글자 모두 대소 문자가 동일해야합니다. 따라서 클래스 이름과 같은 PascalCase 식별자의 DBRate경우 지역 변수와 같은 camelCase 식별자의 경우가 있습니다 ioChannel.

이것은 분명히 Java의 일반적인 관행 인 것처럼 보입니다.

긴 머리 글자

.NET Framework 지침에서는 머리 글자에 세 글자 이상을 사용하여 camelCase 식별자의 첫 단어를 제외하고 PascalCase 및 camelCase 식별자에 대소 문자를 혼용 할 것을 권장합니다. 따라서 클래스 이름의 XmlDocument경우 로컬 변수의 이름을 지정할 수 있습니다 httpRequest.

이 규칙이 항상 Java에서 준수되는 것은 아닙니다. 4 문자 약어는 일반적으로 대소 문자를 혼합 한 것으로 보이지만 JCL조차도 3 문자 약어와 일치하지 않습니다. 'URL', 'XML', 'SQL'및 'DOM'과 같이 대부분 대문자 인 것처럼 보이지만 'Jar'와 같은 예외가 있습니다.

결론

Java의 경우 :

4 개 이상의 문자 약어의 경우 대소 문자를 혼합하여 사용하십시오. 표준 라이브러리가이 작업을 수행하므로 이해가됩니다.

3 자 약어의 경우 JCL과 같이 모두 대문자를 사용하거나 .NET Framework와 같이 대소 문자를 혼합하여 사용할 수 있습니다. 어느 쪽이든, 일관성을 유지하십시오.

2 자 약어의 경우 모두 대문자를 사용하십시오.

2 자 약어의 경우 Java에는 실제로 표준이 없지만 다른 이름과의 일관성으로 인해 모든 대문자가 더 좋아지지 않는 한 대소 문자를 혼합하여 사용하는 것이 좋습니다.


11
잘 넣어, 좋은 노력!
Eliran Malka

1
3 자 및 2 자 약어에 대해 CAPS가 일관성이 없다는 점을 제외하고는이 방법이 마음에 듭니다. (어쩌면 나는 순수 주의자의 대부분을 해요,하지만 실제적인 이유로 허용 대답을 참조 게다가, 혼란 요인이있다..)
존 쿰즈

1
@JCoombs : 글쎄, 두 글자의 불일치는 IpAddress많은 사람들에게 끔찍한 것입니다. 개인적으로 Java 코드를 작성해야 할 때 3 글자 약어의 대소 문자를 혼합하여 두 글자만을 특별한 경우로 남겨 둡니다.
Kevin Cathcart

5
클래스 이름에 인접한 두 글자의 약어가 여러 개인 경우 어떻게합니까? 당신이 무엇을하든, 그것은 잘못 보일 것입니다-USGFCharset, UsGfCharset, US_GFCharset ...
Kevin

3
정말 좋은 대답입니다. 그러나 개인적으로 나는 약어의 길이와 약어인지 여부에 따라 .NET 지침의 이름을 다르게 지정하는 것을 좋아하지 않습니다. 실제로 약어의 길이를 신경 쓰고 확인하는 사람은 누구입니까? 또는 약어 인 경우? 나는 명명에 대한 담요 규칙을 선호합니다. 문제는 선택한 규칙과 다른 규칙을 가진 타사 라이브러리를 사용할 때 발생합니다.
Amani Kilumanga

98

"올바른"답변이 없습니다. 다른 도구와 더 잘 어울리는 일련의 관행과 규칙.

따라서 나는 선호한다 DvdPlayer. Eclipse에서 Ctrl+ Shift+를 수행 T하고 각 단어의 첫 글자로 수업을 선택할 수 있으므로 더 유용 합니다.

대체 텍스트


19
oooo 그것은 유용한 일식 팁입니다. 감사!
Peter Perháč

1
(+1) 좋은 팁. 그것은 나를 위해 질문에 대답합니다 :-)
Asaf

2
"SIO"만 있으면 해당 클래스를 찾을 수 있습니다.
finnw

7
이것은 Eclipse의 다른 곳에서도 작동합니다-예를 들어 자동 완성. 이름이 'myDvdCoverImage'인 메소드 / 변수가 있습니까? -mDCI Ctrl + Space 만 입력
teabot

3
sysout Ctrl + Space와 같이 이미 설정된 단축키도 System.out.println을 제공합니다. 같은 (용) (시도)와 간다
medopal

50

나는 둘 다 야생에서 사용되는 것을 보았고 Sun은 DVDPlayer스타일 을 추구하는 것 같습니다 . DvdPlayer그래도, 그래야 여러 개의 연속 약어가 있더라도 단어 경계가 어디에 있는지 분명하기 때문에 선호합니다 HTTPURLConnection.


3
이런 식으로 입력하는 것이 더 빠릅니다.
Ates Goral

6
"DVDPlayer"는 단어의 경계를보다 명확하게합니다. "Dvd"는 단어가 아니라 "DVD"는 "Digital Versatile Disc"의 약어입니다. 따라서 "DVD 플레이어"의 실제 단어 경계는 "D", "V", "D"및 "P"입니다.
Greg Brown

19
@GregBrown : DVD는 구멍이있는 디스크입니다. 당신의 이름을 알지 못한다면 아무도 신경 쓰지 않습니다. 그리고 DvdPlayer를 사용하는 것이 훨씬 더 실용적입니다.
Igor Rodriguez

4
@GregBrown : 사실 이클립스에서는 낙타의 경우 인식이 약어 인 경우에 더 실용적입니다. 즉, DvdPlayer의 경우 "DP"를 입력하고 Ctrl + 1을 눌러 DvdPlayer를 선택할 수 있습니다. DVDPlayer가 있으면 "DVDP"를 입력해야합니다. 그리고 그것이 더 길면 더 성가시다. 내 코드에 UNESCOConnector를 갖고 싶지 않습니다. 어쨌든 그것은 선택의 문제입니다.
Igor Rodriguez

22
또 다른 좋은 예는 HTTPSID입니다. HTTP SID 또는 HTTPS ID를 의미 했습니까? 따라서 의미를보다 잘 설명하기 위해 각각 HttpSid 또는 HttpsId를 작성해야합니다.
오즈 에드 리

37

다음과 같은 방식으로 클래스의 개별 인스턴스를 정의하고 싶습니다.

Catalogue catalogue;
Person person;

따라서를 사용하면 그 DVDPlayer인스턴스를 무엇이라고 부릅니까? dVDPlayer? 따라서 DvdPlayer클래스 이름을 선택 하므로 인스턴스 이름을 다음과 같이 지정할 수 있습니다 dvdPlayer.


16
무슨 일이야 DVDPlayer dvdPlayer;?
azz

9
@DerFlatulator 무엇이 잘못되지 않았습니까? 당신이 어떻게 왔는지에 관계없이 dvdPlayer, 당신이 돌아갈 때, 당신은 얻을 것 DvdPlayer입니다.
maaartinus

5
@DerFlatulator : 그것은 UpperCamelCase에서 lowerCamelCase으로 변환 자동화의 문제이다 : 나는 snake_case에 Hibernate 매핑을 자동화 할 때 문제가 있었다 : DvdPlayer -> dvd_player하지만 DVDPlayer -> d_v_d_player. DVDPlayer를 dvd_player로 자동화 할 수있는 방법이 없습니다.
pdem

3
@ DerFlatulator : 알겠습니다. 답장을 보내 주셔서 감사합니다.이 경우에는 효과가있었습니다. 그러나 여전히 "DvdPlayer"표기법에 확신이 있습니다. DVDRPGPlayer는 어떻습니까? dvdrpgPlayer가 아니라 dvdRpgPlayer로 변환해야합니다.
pdem

2
또한 getter 및 setter를 고려하십시오. 예를 들어 JSP EL과 함께 사용될 때 (예 :) getDvdPlayer()보다 낫습니다 . 그리고 약어에서 게터를 소문자로 명명하는 경우 일관성과 예측 가능성을 위해 클래스 이름을 동일하게 유지하는 것이 가장 좋습니다. getDVDPlayer()foo.dvdPlayer
daiscog

33

JavaSE 클래스, Apache Commons 및 Spring의 일부 예 :

  • HttpURLConnection
  • HTTPAddress
  • UrlPathHelper
  • AopProxy
  • ISBNValidator

따라서 그것은 중요하지 않습니다.


3
동의했다. 코드베이스에서 일관성을 유지하십시오.
JARC

2
이것이 중요하지는 않지만 중요하지는 않습니다. 다른 사람들이 표준을 따르지 않더라도 일반적으로 선호되는 표준은 매우 유용합니다.
Jon Coombs 2018 년

나는 좋아한다 SRS이상 SoftwareRequirementSpecification?
Shantaram Tupe


10

다른 사람들이 지적했듯이, 프로젝트마다 다른 스타일입니다. 구아바 및 GWT와 같은 Google 프로젝트는 DvdPlayer스타일을 선호합니다 .

https://google.github.io/styleguide/javaguide.html#s5.3-camel-case


DvdPlayer스타일에 대한보다 일반적인 Google 컨벤션 링크 : google-styleguide.googlecode.com/svn/trunk/…
Stan Kurdziel

1
답변 의 링크가 gwtproject.org/makinggwtbetter.html#codestyle 로 이동했습니다. @StanKurdziel 이 언급 한 링크가 google.github.io/styleguide/javaguide.html#s5.3-camel-case
Jeroen Wiert Pluimers

8

에서 태양 자바 문서 :

클래스 이름은 명사이어야하며 대문자로 된 각 내부 단어의 첫 글자와 대소 문자를 혼합해야합니다. 수업 명을 단순하고 설명하기 쉽게 유지하십시오. 전체 단어를 사용하지 않는 두문자어 및 약어를 사용하십시오 (URL 또는 HTML과 같은 긴 형식보다 약어가 훨씬 널리 사용되지 않는 한).


14
그것은 그것이 대문자인지 아니면 낙타인지에 대해 실제로 아무 말도하지 않습니다.
DD.

@DD. 필자는 DVD, MRI, MAGA 등과 같은 임의의 비즈니스 관련 단어보다 관련 약어 (HTTP, GET 등)에 모두 대문자를 사용하는 것이 훨씬 더 광범위하게 사용
된다고 생각합니다

3

DVDPlayer표준이지만 DvdPlayer드문 일이 아닙니다.

당신은 더 자주 보지 못합니다 getId. 그것은 아마도 ID가 "Identity"의 단축이라는 생각 때문일 것입니다. 실제로는 신원 문서의 이니셜입니다.

HttpURLConnection종종 혼합 관례의 예로 제시됩니다. 그러나 URL에서 프로토콜 이름으로 사용되는 "http"는 소문자 여야합니다 (대문자는 종종 허용됨).


2
나는 이것이 실제로 표준이라고 생각하지 않지만 아마도 가장 일반적 일 것입니다.
b.roth

IIRC의 Sun Java Coding Standard에 있습니다. JLS에는 없지만.
Tom Hawtin-tackline

7
HyperTextTransferProtocolUniformResourceLocatorConnection
flybywire

2
나는 대부분의 사람들이 ID를 식별자의 약어로 사용한다고 확신합니다 ... 즉, 데이터베이스에서 테이블 ID는 ID 문서를 나타내는 테이블 식별자를 참조합니다.
DD.

9
DVDPlayer는 확실히 표준이 아닙니다. JDK조차도 이것에 대한 접근 방식이 크게 일치하지 않습니다.
Kevin Bourrillion

0

여기에는 "올바른"것이 없으며 기본 설정 만 있습니다.

Sun은 "URL"과 "HTML"을 포함하는 클래스의 이름을 일관되게 지정하지만 javadocs에서 모든 대문자와 낙타 문자를 모두 사용하는 HTTP를 봅니다.

개인적으로 DvdPlayer를 선호합니다.


URL의 HTTP 프로토콜 이름은 소문자로 작성해야한다고 생각합니다 (브라우저에서 대문자로 허용 할 수는 있지만).
Tom Hawtin-tackline
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.