자바 명명 규칙은 크게 철자와 문법, 두 범주로 나뉜다.
규칙은 특별한 이유없인 반드시 따라야하며 이를 어긴 API는 사용하기도, 유지보수 하기도 어렵다. 철자 규칙이나 문법 규칙을 어기면 다른 프로그래머들이 코드를 읽기 어렵고, 오해할 수 있으며 오류까지 발생할 수 있다.
패키지, 클래스, 인터페이스, 메서드, 필드, 타입 변수의 이름을 다룬다.
첫 글자를 소문자로 쓴다는 점만 빼면 클래스 명명 규칙과 같다.
ex ) remove, ensureCapacity
상수 필드는 값이 불변인 static final 필드이며, static final 필드의 타입이 기본 타입이나, 불변 참조 타입이면 상수 필드다. static final 필드이면서 가리키는 객체가 불변이라면 타입은 가변이어도 상수 필드다.
상수 필드는 구성하는 모든 단어가 대문자여야 한다. 단어사이는 밑줄로 구분한다.
ex ) VALUES, NEGATIVE_INFINITY
다른 멤버와 비슷한 명명 규칙 적용
약어를 사용해도 그 변수가 사용되는 문맥에서 의미를 쉽게 유출할 수 있기 때문에 약어를 사용해도 된다.
ex ) i, denom, houseNum
입력 매개변수도 지역변수의 하나이지만, 지역변수보단 신경 써야한다.
보통 한 문자로 표현
문자 | 설명 |
---|---|
T | 임의의 타입 |
E | 컬렉션 원소의 타입 |
K,V | 맵의 키와 값 |
X | 예외 |
R | 메서드의 반환 타입 |
T,U,V or T1,T2,T3 | 임의 타입 시퀀스 |
식별자 타입 | 예 |
---|---|
패키지와 모듈 | org.junit.jupiter.api , com.google.common.collect |
클래스와 인터페이스 | Stream , FutureTask , LinkedHashMap , HttpClient |
메서드와 필드 | remove , groupingBy , getCrc |
상수 필드 | MIN_VALUE , NEGATIVE_INFINITY |
지역 변수 | i , denom , houseNum |
타입 매개변수 | T , E , K , V , X , R , U , V , T1 , T2 |
철자 규칙과 비교하면 더 유연하고 논란도 많다.
따로 규칙은 없다.
클래스와 똑같이 짓거나 (Collection, Comparator), able혹은 ible로 끝나는 형용사로 짓는다. (Runnable, Iterable, Accessible)
지배적인 규칙이 없어 명사, 동사, 전치사, 형용사가 두루 쓰인다.
ex) BindingAnnotation, Inject, ImplementedBy, Singleton
get으로 시작하는 형태는 주로 자바빈즈 명세에 뿌리를 두고 있다. 따라서 이러한 명명규칙을 따르는 도구와 어우러지는 코드를 작성한다면 이 규칙 (get-)을 사용해도 된다. getter, setter등
직접 노출될 일이 거의 없기 때문에 덜 명확하고 덜 중요하다.
지역변수 이름도 필드와 비슷하게 지으면 되나, 조금 더 느슨하다.
이펙티브 자바 3/E