Post

Item 68 - 일반적으로 통용되는 명명 규칙을 따르라

자바 언어의 명명 규칙 🎯

철자와 문법 두 범주로 나뉜다.

철자 규칙 ✔️

  • 패키지, 클래스, 인터페이스, 메서드, 필드, 타입 변수의 이름을 다룬다.
  • 특별한 이유가 없는 한 반드시 따라야 한다.

패키지 명명법

  • .으로 구분하여 계층적으로 이름을 짓는다.
  • 보통 인터넷 도메인 이름을 역순으로 사용한다.
    • ex) edu.cmu, com.google
  • 표준 라이브러리와 선택적 패키지들은 각각 javajavax로 시작한다.
  • 이름은 보통 8자 이하의 짧은 단어 혹은 약어로 한다.
    • utilitiesutil
    • abstract window toolkitawt

클래스와 인터페이스 명명법

  • 열거타입, 애너테이션도 클래스 혹은 인터페이스로 본다.
  • 하나 이상의 단어로 이뤄지며, 각 단어는 대문자로 시작한다.
  • 널리 통용되는 줄임말(max, min 등)을 제외하고는 단어를 줄여 쓰지 않는다.
  • 약자의 경우, 첫 글자만 대문자로 할지 약간의 논쟁이 있으나, 첫 글자만 대문자로 하는 게 알아보기 좋다.
    • ex) HttpUrl vs HTTPURL
    • 전체를 대문자로 하면 어디서 끊어 읽어야 하는지 구분이 어렵다.

메서드와 필드 이름 명명법

  • 첫 글자를 소문자로 하는 것 이외에는 클래스, 인터페이스 명명법과 동일하다.
    • ex) remove(), ensureCapacity()

상수 필드 명명법

  • 상수 필드란?
    • enum의 열거 이름들
    • static final 접근 제어자로 표현되는 필드
  • 모두 대문자로 쓰며, 단어 사이는 밑줄로 구분한다.
    • ex) VALUES, NEGATIVE_INFINITY

지역 변수 명명법

  • 문맥에서 의미를 쉽게 유추할 수 있는 경우에 한해 약어를 써도 된다.
  • 입력 매개변수도 지역 변수의 일종으로 본다.

타입 매개변수(제네릭) 명명법

  • T: 임의의 타입을 말한다.
  • E: 컬렉션 원소의 타입을 말한다.
  • K, V: 맵의 키와 값을 말한다.
  • X: 예외를 말한다.
  • R: 메서드의 반환 타입을 말한다.
  • T, U, V, T1, T2, T3: 임의의 타입 시퀀스를 말한다.

문법 규칙 ✔️

  • 철자 규칙과 비교했을 때, 더 유연하고 논란도 많다.

클래스와 인터페이스

  • 객체를 생성할 수 있는 클래스(열거 타입 포함)의 이름은 단수 명사나 명사구를 사용한다.
    • ex) Thread, PriorityQueue, ChessPiece
  • 객체를 생성할 수 없는 클래스라면, 보통 복수형 명사로 짓는다.
    • ex) Collectors, Collections
  • 인터페이스의 이름은 able혹은 ible로 끝나는 형용사로 짓거나 클래스와 똑같이 짓는다.
    • ex) Runnable, Iterable, Accessible / Collection, Comparator

애너테이션

  • 애너테이션은 지배적인 규칙 없이 명사, 동사, 전치사, 형용사 두루 쓴다.
    • ex) BindingAnnotation, Inject, ImplementedBy, Singleton

메서드

  • 동작을 수행하는 메서드의 이름은 동사나 동사구로 짓는다.
    • ex) append, drawImage
  • boolean값을 반환하는 메서드는 보통 is나 has로 시작하고, 명사, 명사구, 혹은 형용사로 기능하는 아무 단어나 구로 끝나도록 짓는다.
    • ex) isDigit, isProbablePrime, isEmpty, isEnabled, hasSiblings
  • 반환 타입이 boolean이 아니거나, 속성을 반환하는 메서드는 명사, 명사구, 혹은 get으로 시작하는 동사구로 짓는다.
    • ex) size, hashCode, getTime
  • 객체의 타입을 바꿔서 다른 타입의 같은 내용의 객체를 반환할 때는 toType형태로 짓는다.
    • ex) toString, toArray
  • 객체의 내용을 다른 뷰로 보여주는 메서드는 asType 형태로 짓는다.
    • ex) asList
  • 객체의 값을 기본 타입 값으로 반환하는 메서드의 이름은 보통 typeValue 형태로 짓는다.
    • ex) intValue
  • 정적 팩터리
    • ex) from, of, valueOf, instance, getInstance, newInstance, getType, newType

필드

  • 필드 이름은 클래스, 인터페이스, 메서드 이름에 비해 덜 명확하고 덜 중요하다.
  • boolean 타입의 필드 이름은 보통 boolean 접근자 메서드에서 앞 단어를 뺀 형태이다.
    • ex) initialized, composite
  • 다른 타입의 필드라면 명사나 명사구를 사용한다.
    • ex) height, digits, bodyStyle
  • 지역 변수도 필드와 비슷하게 지으면 되는데, 조금 더 느슨하다.

💡 핵심 정리

  • 표준 명명 규칙을 체화하여 자연스럽게 베어 나오도록 하자.
  • 철자 규칙은 직관적이라 모호한 부분이 적은 데 반해, 문법 규칙은 더 복잡하고 느슨하다.
  • 오랫동안 따라온 규칙과 충돌한다면 그 규칙을 맹신하지 말고 상식이 이끄는대로 따르자.
This post is licensed under CC BY 4.0 by the author.