아이템 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을 써야하는거 아니야?
      if (car.speed() > 2 * SPEED_LIMIT) {
      	generateAudibleAlert("경찰 조심하세요!");
      }
      
      위와 같이 getSpeed()가 아닌 speed()를 사용하는 경우 자동차의 속도를 조건문에서 사용하고 있는 것을 알 수 있다.
      • 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
반응형