아이템 68, 항상 표준 명명 규칙을 따라야한다.
2023. 3. 8. 18:18ㆍ자바
728x90
반응형
아이템 68, 항상 표준 명명 규칙을 따라야한다.
1. 철자 규칙
특별한 이유가 없는 한 철자 규칙은 반드시 따라야한다. 이 규칙을 어기게되면 API로 사용하기도 어려울 뿐더러 유지보수를 하기도 어렵다. 철자 규칙은 다음과 같은 종류가 있다.
패키지와 모듈 이름
- 패키지와 모듈 이름은 각 요소를 점(.)으로 구분하여 계층적으로 짓는다.
- 요소들은 모두 소문자 알파벳이나 숫자로 이뤄진다.
- 조직의 인터넷 도메인 이름을 역순으로 사용한다. ex) com.google
- 표준 라이브러리와 선택적 패키지들은 java와 javax로 시작한다.
- 패키지 이름의 각 요소는 일반적으로 8자 이하의 짧은 단어로 한다. 이때 약어를 사용하기도 한다. ex) utilities (x) → util (o)
- 요소의 이름은 한 단어나 각 단어의 첫글자만 따서 쓰는 등의 약어로 이뤄진다.
클래스와 인터페이스의 이름
- 하나 이상의 단어로 이뤄지며, 각 단어는 대문자로 시작한다.
- max나 min처럼 널리 통용되는 줄임말을 제외하고 단어는 줄여쓰지 않는다.
메서드와 필드 이름
- 첫 글자를 소문자로 쓴다는 점만 제외하면 클래스 명명 규칙과 동일하다.
상수 필드
- 상수 필드는 값이 불변인 static final 필드를 의미한다.
- 상수 필드인 경우에는 모두 대문자로 작성하며 단어 사이는 밑줄로 구분한다.
cf ) 저자는 타입이 가변이라도 static final 필드로 선언하는 경우 상수 필드라고 한다.
지역 변수
- 멤버 변수와 유사한 명명 규칙이 적용된다.
- 다만 추가적으로 약어를 써도 좋다. ex) i
타입 매개변수(제너릭)
- 한 문자로 표현한다.
- 컬렉션 원소의 타입: E
- 메서드 반환 타입: R
- 임의의 타입: T
- 맵의 키와 값: K와 V
- 그 외의 임의 타입: T, U, V, T1, T2, T3
2. 문법 규칙
클래스와 인터페이스
- 열거 타입을 포함한 객체를 생성할 수 있는 클래스는 단수 명사나 명사구를 사용한다.
- ex) Thread, PriorityQueue, ChessPiece 등등
- 객체를 생성할 수 없는 클래스는 복수형 명사를 사용한다.
- ex) Collectors, Collections
- 인터페이스 이름은 클래스와 똑같이 짓거나 able 혹은 ible로 끝나는 형용사로 짓는다.
- ex) Iterable, Runnable, Accessible
메서드
- 동작을 수행하는 메서드의 이름은 동사나 동사구로 짓는다.
- ex) append, drawImage
- boolean 값을 반환하는 메서드라면 보통 is나 has로 시작하고,명사나 명사구 혹은 형용사로 기능하는 단어나 구로 짓는다.
- ex) isDigit, isProbablePrime, isEmpty 등등
- 반환 타입이 인스턴스 속성을 반환하는 메서드의 이름은 보통 명사나 명사구 혹은 get으로 시작하는 동사구로 짓는다.
- ex) size, hashCode, getTime 등
- 🤔 getter면 get을 써야하는거 아니야?
위와 같이 getSpeed()가 아닌 speed()를 사용하는 경우 자동차의 속도를 조건문에서 사용하고 있는 것을 알 수 있다.if (car.speed() > 2 * SPEED_LIMIT) { generateAudibleAlert("경찰 조심하세요!"); }
- getter의 명명 규칙을 사용하는 도구들을 사용하는 경우에는 이 규칙을 따라도 상관없다.
- 또한 클래스가 getter와 setter를 함께 제공하는 경우에는 일관성을 위해 getAttribute로 사용하는 것이 좋다.
🤨 그러면 앞으로 get 형태로 쓸 필요는 없겠네!
get으로 써야한다는 주장도 있지만 저자는 아래의 사례를 들며 get을 사용하지 않는 것이 더 가독성이 좋을 수 있다는 주장을 하고 있다.
특이한 유형의 메서드 이름
- 객체의 타입을 바꿔서 다른 타입의 또 다른 객체를 반환하는 인스턴스 메서드의 이름은 toType의 형태로 짓는다.
- ex) toString, toArray
- 객체의 내용을 다른 뷰로 보여주는 메서드는 asType의 형태로 짓는다.
- ex) asList
- 객체의 값을 기본 타입 값으로 반환하는 메서드의 이름은 보통 typeValue 형태로 짓는다.
- ex) intValue
- 정적 팩터리의 이름은 다양하게 사용할 수 있다.
- ex) from: 파라미터 하나인 경우, of: 여러 파라미터를 전달받는 경우 등등
필드 이름
- API 설계를 잘했다면 외부에 필드가 노출될 일이 거의 없기에 그리 중요하지 않다.
- boolean 타입의 필드 이름은 보통 boolean 접근자 메서드에서 앞 단어를 뺀 형태다.
- initialized, composite 등등
- 아마도... boolean가 반환되는 메서드는 isEmpty와 같은 식으로 호출되기에 여기서 empty를 사용한다는 의미인 것 같다! (아니면 말구 ㅎㅎ)
- 다른 타입의 필드라면 명사나 명사구를 사용한다.
- ex) height, digits 등등
출처
이펙티브 자바
728x90
반응형
'자바' 카테고리의 다른 글
아이템 51. 메서드 시그니처를 신중히 설계하라 (2) | 2023.03.22 |
---|---|
단일 책임 원칙, 하나의 객체는 하나의 책임을 갖는다. (0) | 2023.03.14 |
자바의 문자열 (0) | 2023.03.05 |
아이템 15, 클래스와 멤버의 접근 권한을 최소화하라 (0) | 2023.03.02 |
자바, 객체야~ 일해라! (0) | 2023.02.27 |