-
Notifications
You must be signed in to change notification settings - Fork 1
코딩 컨벤션
기본적으로 Wooteco Java Style Guide를 따릅니다.
아래는 저희 백엔드 팀만의 추가적인 스타일 가이드입니다.
-
상수
-
멤버 변수
-
생성자
-
정적 팩토리 메서드
-
public 메서드
-
protected 메서드
-
private 메서드
-
getter 및 setter 메서드
-
getter를 먼저 작성하며, 그 다음에 setter를 작성합니다.
-
기본적으로 setter 사용을 금지하며, 의미가 명확한 별도의 메서드를 만들어 사용합니다.
-
-
equals hashCode 메서드
- equals를 먼저 작성하고 hashCode를 작성합니다.
자유롭게 작성하되, 완전한 문장으로 끝나야 합니다.
- ❌**
@DisplayName("제목이 누락되면 일기 작성에 실패해야 함")
**❌ - ⭕**
@DisplayName("제목이 누락되면 일기 작성에 실패한다.")
**⭕
-
테스트 메서드명에 테스트할 메서드명을 포함하지 않습니다.
- 메서드명 변경 시 테스트 메서드명도 함께 변경해야 하는 번거로움을 줄이기 위함입니다.
-
테스트 메서드명은 **
should_기대결과_When_조건
**규칙을 따릅니다.
예시
-
should_CreateDiary_When_ValidInput()
-
should_FailToCreateDiary_When_MissingTitle()
-
should_ThrowException_When_InvalidDateFormat()
given when then 패턴을 기반으로 테스트 코드를 작성합니다.
- 주석으로 given, when, then을 구분지어 테스트 코드를 작성합니다.
@Test
@DisplayName("일기가 성공적으로 작성된다.")
void should_CreateDiary_When_ValidInput() {
// given
// when
// then
}
@Test
@DisplayName("제목이 누락되면 일기 작성에 실패한다.")
void should_FailToCreateDiary_When_MissingTitle() {
// given
// when
// then
}
@Test
@DisplayName("유효하지 않은 날짜 형식으로 작성하려고 하면 예외가 발생한다.")
void should_ThrowException_When_InvalidDateFormat() {
// given
// when
// then
}
코드 가독성 및 개발 편의성을 위해 아래 메서드에 대해서는 Lombok 어노테이션을 사용합니다.
-
기본 생성자 →
@NoArgsConstructor(access = AccessLevel.*PROTECTED*)
- 접근 제어자는
protected
이하로 제한합니다.-
JPA Entity에서
private
로 지정 시 JPA 프록시 객체 생성에 문제가 발생할 수 있으며,public
으로 지정 시에는 객체가 무분별하게 생성될 가능성이 있습니다.
-
- 접근 제어자는
-
모든 필드를 인자로 받는 생성자 →
@AllArgsConstructor
-
final 키워드 변수만 인자로 받는 생성자 →
@RequiredArgsConstructor
-
getter 메서드 →
@Getter
-
빌더 패턴 →
@Builder
-
@Setter
- setter 메서드 대신 명확한 의도를 가진 메서드를 선언합니다.
-
@Data
- 불필요한 메서드가 생성됩니다.
-
@EqualsAndHashCode
- 불필요한 필드를 대상으로 만들어질 수 있기에 필요 시 직접 정의합니다.
@Transactional(readOnly = true)
public Page<DiaryResponse> getXXX(Long categoryId, PostSearchCondition condition, Pageable pageable) {
return diaryRepository.findXXX(categoryId, condition, pageable);
}
위 메서드처럼 파라미터가 세 개 이상일 경우, 아래와 같이 포맷팅합니다.
@Transactional(readOnly = true)
public Page<DiaryResponse> getXXX(Long categoryId,
PostSearchCondition condition,
Pageable pageable) {
return diaryRepository.findXXX(categoryId, condition, pageable);
}
테스트 코드는 아래 템플릿을 사용하면 편리합니다.
@DisplayName("")
@Test
void $END$() throws Exception {
// given
// when
// then
}