자바 언어의 명명 규칙
- 크게 철자와 문법 두 가지로 나뉜다.
철자 규칙
- 특별한 이유가 없는 한 반드시 따라야 한다.
- 지키지 않을 경우 API는 사용하기 어렵고, 유지보수하기 어렵다.
- 가독성이 떨어진다.
패키지와 모듈 이름
- 각 요소를 점(.)으로 구분하여 계층적으로 짓는다.
- 조직 외부에서도 사용될 수 있다면, 조직의 웹 도메인 이름을 역순으로 사용한다.
- 웹 도메인 이름은 전세계적으로 유일하므로 패키지 이름의 충돌을 피할 수 있다.
- ex. com.google
- 예외적으로 표준 라이브러리와 선택적 패키지들은 java와 javax로 시작한다.
- 각 요소는 8자 이하의 짧은 단어 혹은 약어를 추천한다.
- ex. utilities보다는 util처럼 의미가 통하는 약어를 사용하는 것도 좋다.
- ex. 여러 단어로 구성된 이름이라면 awt처럼 첫글자를 사용하는 것도 좋다.
클래스와 인터페이스 이름
- 하나 이상의 단어로 이루어지며, 각 단어는 대문자로 시작한다.
- ex. List, FutherTask
- 단어의 첫글자만 딴 약자나 max, min처럼 널리 통용되는 줄임말을 제외하고는 단어를 줄여 쓰면 안 된다.
메소드와 필드 이름
- 첫 글자를 소문자로 쓴다는 점만 빼면 클래스 명명 규칙과 같다.
- ex. remove, ensureCapacity 등
- 단 상수 필드는 예외다.
- 모두 대문자로 쓰며 단어 사이는 밑줄로 구분한다.
- ex. VALUES, NEGATIVE_INFINITY 등
더보기
- 상수 필드는 static final 필드를 의미한다. 이는 모든 인스턴에서 값이 공유되며, 한 번 할당되면 변경되지 않는 필드라는 의미이다.
- 상수 필드의 타입이 기본 타입이거나 불변 참조 타입(item 17)인 경우, 해당 필드는 상수 필드로 간주된다.
- ex. static final int MAX_COUNT = 10; // 기본 타입(int)의 상수 필드
- ex. static final String ID = "id"; // 불변 참조 타입(String)의 상수 필드
- 가변 참조 타입의 경우, 필드 자체의 참조값은 변경되지 않지만, 필드가 가리키는 객체의 상태는 변경될 수 있으므로, 해당 필드가 가리키는 객체도 불변이어야 상수 필드로 간주된다.
- 지역 변수의 경우, 비교적 유추하기 쉬우므로 약어를 사용해도 좋다.
- ex. i, denom, houseNum 등
타입 매개변수
- 입력 매개변수도 지역변수이지만, 문서에 등장하는 만큼 지역변수보다는 신경써야 한다.
- T: 임의의 타입
- E: 원소의 타입
- K와 V: 맵의 키와 값
- X: 예외
- R: 메소드 반환 타입
- 임의 타입의 시쿼스: T, U, V 혹은 T1, T2, T3
문법 규칙
클래스
- 객체를 생성할 수 있는 클래스(열거 타입 포함)
- 보통 단수 명사나 명사구를 사용한다.
- ex. Thread, PriorityQueue, ChessPiece 등
- 객체를 생성할 수 없는 클래스(item 4)
- 보통 복수형 명사를 사용한다.
- Collectors, Collections 등
- 인터페이스
- i) 클래스와 동일하게 사용
- ii) able 혹은 ible로 끝나는 형용사 사용
- ex. Runnable, Iterable, Accessible
메소드
- 어떤 동작을 수행하는 메소드
- 동사나 동사구로 짓는다.
- ex. append, drawImage
- boolean 값을 반환하는 메소드
- is, has(드물게)로 시작
- 명사나 명사구 혹은 형용사로 기능하는 아무 단어나 구로 끝나도록 짓는다.
- ex. isDigit, isProbablePrime, isEmpty, isEnabled, hasSiblings 등
- 반환 타입이 boolean이 아니거나 해당 인스턴스의 속성을 반환하는 메소드
- 명사나 명사구 혹은 get으로 시작하는 동사구로 짓는다.
- ex. size, hashCode, getTime 등
- 객체의 타입을 바꿔서, 다른 타입의 또 다른 객체를 반환하는 인스턴스 메소드
- 보통 toType 형태로 짓는다.
- ex. toString, toArray 등
- 객체의 내용을 다른 뷰로 보여주는 메소드(item 6)
- asType 형태로 짓는다.
- ex. asList 등
- 객체의 값을 기본 타입 값으로 반환하는 메소드
- 보통 typeValue 형태로 짓는다.
- ex. intValue 등
- 정적 팩터리
- 다양하지만 from, of, valueOf, instance, getInstance, newInstance, getType, newType(item 1)을 흔히 사용한다.
필드 이름
- 클래스, 인터페이스, 메소드 이름에 비해 덜 명확하고 덜 중요하다.
- API 설계를 잘 했다면 필드가 직접 노출될 일이 거의 없기 때문이다.
- boolean 타입의 필드
- 보통 boolean 접근자 메소드에서 앞 단어를 뺀 형태다.
- ex. initialized, composite 등
- 다른 타입의 필드
- 명사나 명사구를 사용한다.
- ex. height, digits, bodyStyle 등
- 지역변수
- 필드와 비슷하나 더 느슨하다.
'Language > Java' 카테고리의 다른 글
[effective java] 아이템 70. 복구할 수 있는 상황에는 검사 예외를, 프로그래밍 오류에는 런타임 예외를 사용하라. (0) | 2023.07.31 |
---|---|
[effective java] 아이템 69. 예외는 진짜 예외 상황에만 사용하라. (0) | 2023.07.31 |
[effective java] 아이템 67. 최적화는 신중히 하라. (0) | 2023.07.31 |
[effective java] 아이템 66. 네이티브 메서드는 신중히 사용하라. (0) | 2023.07.27 |
[effective java] 아이템 65. 리플렉션보다는 인터페이스를 사용하라. (0) | 2023.07.27 |