forked from depromeet/effective-java-study
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[Item68]: 일반적으로 통용되는 명명 규칙을 따르라 (depromeet#157)(세미)
- Loading branch information
1 parent
90930a5
commit 89c2f89
Showing
1 changed file
with
67 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
## 🌱 철자 규칙 | ||
### ☁️ 패키지와 모듈 이름 | ||
각 요소를 `.` 으로 구분하여 **계층적**으로 짓는다. | ||
만약 조직 바깥에서도 사용될 패키지라면, 조직의 인터넷 도메인 이름을 역순으로 사용하면 된다. ex) `com.google` | ||
|
||
각 패키지 이름은 소문자를 사용한 8자 이하의 짧은 단어 혹은 **약어**를 추천한다. | ||
`utilities` 보다는 `util` 이 좋다. | ||
|
||
### ☁️ 클래스와 인터페이스 이름 | ||
하나 이상의 단어로 이루어지며, 각 단어는 대문자로 시작해야 한다 | ||
단어의 첫 글자만 딴 약자나 `max`, `min` 처럼 널리 통용되는 줄임말을 제외하고 단어를 줄여 쓰면 안된다. | ||
|
||
### ☁️ 메서드와 필드 이름 | ||
첫 글자를 소문자로 쓴다는 점만 빼면 클래스 명명 규칙과 같다. 만약 첫 단어가 약자라면, 단어 전체가 소문자여야 한다. | ||
|
||
#### 🔖 상수 필드 | ||
단, 상수 필드는 예외적으로 모두 **대문자**로 쓰며 단어 사이는 밑줄로 구분한다. | ||
```java | ||
private static final int NEGATIVE_INFINITY = XX | ||
``` | ||
주의할 점은 `static final` 필드이면서, 가리키는 객체가 불변이라면 비록 그 타입은 가변이더라도 상수 필드라는 것이다. 즉, `static final` 타입이 **기본 타입이나 불변 참조 타입**이라면 상수 필드에 해당한다. | ||
|
||
### ☁️ 타입 매개변수 | ||
타입 매개변수의 이름은 보통 한 문자로 포함한다. | ||
> | ||
`T` : 임의의 타입 | ||
`E` : 컬렉션 원소의 타입 | ||
`K`, `V`: 맵의 키와 값 | ||
`X` : 예외 | ||
`R` : 메서드 반환 타입 | ||
`T`, `U`, `V` (`T1`, `T2`, `T3`) : 임의 타입의 시퀀스 | ||
|
||
## 🌱 문법 규칙 | ||
### ☁️ 클래스 | ||
|
||
보통 **단수 명사나 명사구**를 사용한다. | ||
|
||
1. 객체를 생성할 수 없는 클래스의 이름은 보통 복수형 명사로 짓는다.(ex) `Collectors` ) | ||
2. 인터페이스 이름은 클래스와 똑같거나 `able` 혹은 `ible` 로 끝나는 형용사로 짓는다. (ex) `Runnable`, `Accessible`) | ||
3. 애너테이션은 명사, 동사, 전치사, 형용사가 두루 쓰인다. (ex) `Inject`, `ImplementedBy`) | ||
|
||
### ☁️ 메서드 | ||
어떤 동작을 수행하는 메서드 이름은 **동사나 동사구**로 짓는다. 단, 동사는 **현재형**이여야 한다. (ex) `drawImage` ) | ||
|
||
+ `is`, `has` : `boolean` 값을 반환하는 메서드 (ex) `isDigit`, `hasSiblings`) | ||
|
||
+ `명사`, `get` : 해당 인스턴스의 속성을 반환하면서 반환 타입이 `boolean` 이 아닌경우 (ex) `size`, `getTime` ) | ||
```java | ||
if (car.speed() > 2 * SPEED_LIMIT) | ||
generateAudibleAlert("경찰 조심하세요!"); | ||
``` | ||
|
||
+ `toType` : 객체의 타입을 바꿔서 다른 타입의 다른 객체를 반환하는 인스턴스 메서드 (ex) `toString`, `toArray` ) | ||
|
||
+ `asType` : 객체의 내용을 다른 뷰로 보여주는 메서드 (ex) `asList` ) | ||
|
||
+ `typeValue` : 객체의 값을 기본 타입 값으로 반환하는 메서드 (ex) `intValue` ) | ||
|
||
>🔖 **정적 팩터리 이름** | ||
from, of, valueOf, instance, getInstance, newInstance, getType, newType을 흔히 사용 | ||
|
||
|
||
### ☁️ 필드 이름 | ||
필드 이름에 관한 문법 규칙은 클래스, 인터페이스, 메서드 이름에 비해 덜 명확하고 덜 중요하다. API 설계를 잘 했다면 필드가 직접 노출될 일이 거의 없기 때문이다. | ||
|
||
+ `boolean` 타입 : boolean 접근자 메서드에서 앞 단어를 뺀 형태 | ||
+ 이외의 타입 : 명사 / 명사구 사용 |