Skip to content

Commit

Permalink
[Item68]: 일반적으로 통용되는 명명 규칙을 따르라 (depromeet#157)(세미)
Browse files Browse the repository at this point in the history
  • Loading branch information
semi-cloud authored Sep 10, 2023
1 parent 90930a5 commit 89c2f89
Showing 1 changed file with 67 additions and 0 deletions.
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 접근자 메서드에서 앞 단어를 뺀 형태
+ 이외의 타입 : 명사 / 명사구 사용

0 comments on commit 89c2f89

Please sign in to comment.