Naming
- 기본적으로 네이밍은 누구나 알 수 있는 쉬운 단어를 선택한다.
- 변수는 CamelCase를 기본으로 한다.
- userEmail, userCellPhone ...
- URL, 파일명 등은 kebab-case를 사용한다.
- 패키지명은 단어가 달라지더라도 무조건 소문자를 사용한다.
- ENUM이나 상수는 대문자로 네이밍한다.
- 함수명은 소문자로 시작하고 동사로 네이밍한다.
- getUserId(), isNormal() ...
- 클래스명은 명사로 작성하고 UpperCamelCase를 사용한다.
- 객체 이름을 함수 이름에 중복해서 넣지 않는다. (= 상위 이름을 하위 이름에 중복시키지 않는다.)
- line.getLength() (O) / line.getLineLength() (X)
- 컬렉션은 복수형을 사용하거나 컬렉션을 명시해준다.
- List ids, Map<User, Int> userToIdMap ...
- 이중적인 의미를 가지는 단어는 지양한다.
- 의도가 드러난다면 되도록 짧은 이름을 선택한다.
- retreiveUser() (X) / getUser() (O)
- 단, 축약형을 선택하는 경우는 개발자의 의도가 명백히 전달되는 경우이다. 명백히 전달이 안된다면 축약형보다 서술형이 더 좋다.
- 함수의 부수효과를 설명한다.
-
함수는 한가지 동작만 수행하는 것이 좋지만, 때에 따라 부수 효과를 일으킬 수도 있다.
fun getOrder() {
if (order == null) {
order = Order()
}
return order
}
-
위 함수는 단순히 order만 가져오는 것이 아니라, 없으면 생성해서 리턴한다.
-
그러므로 getOrder() (X) / getOrCreateOrder() (O)
- LocalDateTime -> xxxAt, LocalDate -> xxxDt로 네이밍
- 객체를 조회하는 함수는 JPA Repository에서 findXxx 형식의 네이밍 쿼리메소드를 사용하므로 개발자가 작성하는 Service단에서는 되도록이면 getXxx를 사용하자.
Structure
- 패키징은 다음과 같이 한다.
- config (SpringSecurity의 SecurityConfig의 경우 config에 해당)
- controller
- order
- OrderResisterController
- OrderCancelController
- customer
- CustomerResisterController
- service (주요 비지니스 로직)
- customer
- CustomerResisterService
- dto (데이터 캐리어를 사용할 때에는 dto를 만들어 사용)
- LoginDto
- UserDto
- domain (jpa와 관련된 entity 객체들을 만들 때에는 domain 사용)
- Order
- User
- util (Date 형식을 맞춰준다거나 여기저기에서 불러 쓰는 객체의 경우 여기에 두고 사용)
- Controller에서는 최대한 어떤 Service를 호출할지 결정하는 역할과 Exception처리만을 담당하자.
- Controller 단에서 로직을 구현하는 것을 지양한다.