[Effective Java] 56. 일반적으로 통용되는 작명 관습을 따르라.
자바의 작명 관습은 철자
와 문법
두가지 범주로 나눌 수 있다.
1. 철자
철자의 작명 관습은 패키지, 클래스, 인터페이스, 메서드, 필드, 자료형 변수에 관한 것으로 별다른 이유가 없다면 어겨서는 안된다.
1.1. 철자 관습을 어길 경우
- 유지 보수가 어려워 진다.
- 코드를 사용하는 개발자가 혼란스러워 한다.
- 오류로 이어질 잘못된 가정을 하게 될 수 있다.
1.2. 철자 작명 관습
1.2.1. package
- 마침표로 구분되는 계층적 구조를 가진다.
com.sun
과 같이 최상위 도메인이 먼저 오는 형태로 만든다.- 표준 라이브러리 같은 경우 예외적으로
java
,javax
로 시작한다. 일반 개발자는 이런 표준 라이브러리에서 사용하는 패키지 이름을 만들면 안된다. - 패키지 이름의 나머지 부분은 패키지를 설명하는 하나 이상의 컴포넌트로 구성된다.
- 패키지명 컴포넌트는 보통 8글자 이하로 짧게 만들고 의미가 확실한 약어를 활용한다.
1.2.2. class, interface, enum, annotation
- 하나 이상의 단어로 구성된다.
- 각 단어의 첫글자는 대문자이다.
- min, max 처럼 널리쓰이는 약어를 제외하면 약어 사용을 피해야 한다.
- 두단어 이상인 경우 단어 첫번째를 대문자로 한다. (꼭 그래야 하는 것은 아님)
1.2.3. method, 멤버 필드
- class, interface의 규칙과 동일한데 다만 첫글자를 소문자로 한다.
1.2.4. 지역 변수
- 멤버 필드와 같은데 약어가 허용된다.
1.2.5. 상수
- 하나 이상의 대문자 단어로 구성된다.
- 단어 사이에는 밑줄(_)을 사용하여 구분한다.
- 상수란 static final로 선언된 멤버이다.
- 멤버 필드가 reference type 일때 해당 reference의 class가 immutable class 이면 상수가 맞다. 만약 mutable class라도 변경 불가능이라면 상수 필드가 맞다.
1.2.6. 자료형 인자 (Generic)
- 하나의 대문자를 사용한다.
- 임의의 자료형인 경우 T, Collection의 요소인 경우 E, 맵의 키와 값은 K와 V, 예외인 경우 X를 주로 사용한다.
- 임의의 자료형이 연속되는 경우 T1, T2, T3 와 같이 나열하거나 T, U, V 처럼 나열한다.
2. 문법
문법적인 작명 관습은 가변적이고 논쟁의 여지가 많다. 이것이 딱 맞다기보다 프로그램에서 기존에 사용하고 있는 관습이 있다면 그것을 따르는게 좋다.
2.1. 문법 작명 관습
2.1.1. package
딱히 문법적인 작명 관습이 없다.
2.1.2. class, enum
단수형의 명사나 명사구 (Timer, BufferedWriter, ChessPiece)
2.1.3. interface
클래스와 비슷한 작명 규칙. able이나 ible같은 형용사구가 붙기도 한다.
(Collection, Comparator, Runnable, Accessible)
2.1.4. annotation
딱히 지배적인 작명 관습이 없다.
2.1.5. method
동사나 동사구. (append, drawImage)
2.1.6. boolean을 리턴하는 method
is나 has로 시작하고 뒤에는 명사, 명사구, 형용사, 형용사구 가 온다.
(isDigit, isEnabled)
2.1.7. 객체 속성을 리턴하는 method
명사나 명사구. 또는 get으로 시작하는 동사구를 사용한다.
(size, hashCode, getXXX)
2.1.8. 객체의 자료형을 변환하는 메서드, 다른 자료형의 독립적 객체를 반환하는 메서드
toType 형태의 이름을 붙인다. (toString, toArray)
2.1.9. 전달받은 객체와 다른 자료형의 뷰 객체를 리턴하는 메서드
asType 형태의 이름을 붙인다. (asList)
2.1.10. 멤버 필드
특별한 문법적 관습이 없다. 외부로 공개되지 않는 경우가 많아 중요도가 덜하다.
댓글남기기