이펙티브 자바, 쉽게 정리하기 - item 68. 일반적으로 통용되는 명명 규칙을 따르라
자바 언어의 명명 규칙
- 철자와 문법 2가지로 나뉜다.
철자 규칙
- 패키지, 클래스, 인터페이스, 메서드, 필드, 타입 변수의 이름을 다룬다.
특별한 이유가 없는 한 반드시 따라야 다른 개발자들의 오해로 인한 실수가 생기지 않는다.
패키지 명명법
.
으로 구분하여 계층적으로 이름을 짓는다.- 보통 인터넷 도메인 이름을 역순으로 사용한다.
- ex)
com.google
- ex)
- 표준 라이브러리 및 선택적 패키지는
java
와javax
로 시작한다. - 이름은 보통 8자 이하의 짧은 단어로 한다.
utilities
->util
- 약어라면,
abstract window toolkit
->awt
와 같이 가능하다.
클래스와 인터페이스 명명법
- 열거타입과 애너테이션도 클래스 혹은 인터페이스로 본다.
- 각 단어는 대문자로 시작한다.
- 널리 통용된 줄임말(max, min 등)을 제외하고는 단어를 줄여쓰지 않는다.
- 약자의 경우는 첫글자만 대문자로 할지 약간의 논쟁이 있으나, 첫글자만 대문자로 하는게 알아보기 좋다.
- ex)
HttpUrl
vsHTTPURL
- 전체를 대문자로 하면 어디서 끊어 읽어야 하는지에 대한 구분이 어렵다.
- ex)
메서드와 필드 이름 명명법
- 첫 글자를 소문자로 하는 것 이외에는 클래스, 인터페이스 명명법과 동일하다.
- ex)
remove()
,ensureCapacity()
- ex)
상수 필드 명명법
- 상수 필드란 아래와 같은 경우가 있다.
enum
의 열거 이름들static final
접근 제어자로 표현되는 필드
- 모두 대문자로 쓰며, 단어 사이는 밑줄로 구분한다.
- ex)
VALUES
,NEGATIVE_INFINITY
- ex)
지역 변수 명명법
- 지역 변수에 한해서는 문맥에서 의미를 쉽게 유추할 수 있는 경우에 한해 약어를 써도 된다.
- 입력 매개변수도 지역 변수의 일종으로 본다.
타입 매개변수(제네릭) 명명법
T
: 임의의 타입을 말한다.E
: 컬렉션 원소의 타입을 말한다.K, V
: 맵의 키와 값을 말한다.X
: 예외를 말한다.R
: 메서드의 반환 타입을 말한다.T, U, V
,T1, T2, T3
: 임의의 타입 시퀀스를 말한다.
문법 규칙
- 철자 규칙에 비해 더 유연하고 논란도 많다.
클래스와 인터페이스
- 객체를 생성할 수 있는 클래스(열거타입 포함)라면, 단수명사 혹은 명사구를 사용한다.
- ex)
Thread
,PrioirtyQueue
,ChessPiece
- ex)
- 객체를 생성할 수 없는 클래스라면, 보통 복수형 명사로 짓는다.
- ex)
Collections
,Collectors
- ex)
- 인터페이스 이름은
able
혹은ible
로 끝나는 형용사로 짓거나 클래스와 똑같이 짓는다.- ex)
Runnable
,Iterable
,Accssible
,Closeable
- ex)
애너테이션
- 애너테이션은 지배적인 규칙 없이 명사, 동사, 전치사, 형용사 두루 쓴다.
- ex)
BindingAnnotation
,Inject
,ImplementedBy
,Singleton
- ex)
메서드
- 동작을 수행하는 메서드는 동사나 동사구로 짓는다.
- ex)
append
,drawImage
- ex)
boolean
값을 반환하는 메서드는is
나has
로 시작하고, 명사, 명사구, 형용사로 기능하는 아무 단어나 구로 끝나도록 짓는다.- ex)
isDigit
,isProbablePrime
,isEmpty
,isEnabled
,hasSiblings
- ex)
- 반환 타입이
boolean
이 아니거나, 속성을 반환하는 메서드는 명사, 명사구 혹은get
으로 시작하는 동사구로 짓는다.- ex)
size
,hashCode
,getTime
get
으로 써야 한다는 주장이 있지만, 때때론get
을 안 쓰고 단순 명사로 짓는 것이 더 가독성이 좋다.
- ex)
- 객체의 타입을 바꿔서 다른 타입의 같은 내용의 객체를 반환할 때는 보통
toType
으로 짓는다.- ex)
toString
,toArray
- ex)
- 객체의 내용을 다른 뷰로 보여주는 메서드는
asType
형태로 짓는다.- ex)
asList
- ex)
- 객체의 값을 기본 타입 값으로 반환하는 메서드의 이름은 보통
typeValue
형태로 짓는다.- ex)
intValue
- ex)
- 정적 팩터리의 경우,
from
,of
등의 네이밍을 쓴다.- ex)
valueOf
,list.of
- ex)
필드
- 필드 이름은 클래스, 인터페이스, 메서드 이름에 비해 명확하고 덜 중요하다.
boolean
타입의 필드 이름은 보통boolean
접근자 메서드에서 앞 단어를 뺀 형태다.- ex)
initialized
,composite
- ex)
- 다른 타입의 필드라면 명사, 명사구를 사용한다.
- ex)
height
,digits
,bodyStyle
- ex)
- 지역변수도 필드와 비슷하게 지으면 되는데, 조금 더 느슨하다.
핵심 정리
- 표준 명명 규칙을 활용하여 자연스럽게 베어나오도록 하자.
- 철자 규칙은 직관적이라 모호한 부분이 적은데 반해 문법 규칙은 더 복잡하고 느슨하다.
- 오랫동안 따라온 규칙과 충돌한다면 그 규칙을 맹신하지 말고 상식이 이끄는대로 따르자.
반응형
'Java > 이펙티브 자바' 카테고리의 다른 글
이펙티브 자바, 쉽게 정리하기 - item 70. 복구할 수 있는 상황에는 검사 예외를 프로그래밍 오류에는 런타임(비검사) 예외를 사용하라 (0) | 2023.06.29 |
---|---|
이펙티브 자바, 쉽게 정리하기 - item 69. 예외는 진짜 예외 상황에만 사용하라 (0) | 2023.06.28 |
이펙티브 자바, 쉽게 정리하기 - item 67. 최적화는 신중히 하라 (0) | 2023.06.27 |
이펙티브 자바, 쉽게 정리하기 - item 66. 네이티브 메서드는 신중히 사용하라 (0) | 2023.06.27 |
이펙티브 자바, 쉽게 정리하기 - item 65. 리플렉션보다는 인터페이스를 사용하라 (0) | 2023.06.26 |