-
Notifications
You must be signed in to change notification settings - Fork 16
백엔드 코드 컨벤션
구동희 edited this page Nov 11, 2022
·
3 revisions
- 클래스 선언부와 필드 사이에 공백 하나 추가
- 어노테이션은 클래스 혹은 메소드와 가장 관련된 것을 선언부와 가깝게
- 객체 필드와 메소드 파라미터에 final 무조건 붙이기
- 패키지명은 단수로
- DTO는 매개변수가 3개 이상일 경우 생성한다
- 생성자 선언 순서
- 기본 생성자
- 모든 파라미터를 받는 생성자
- 이후 파라미터가 많은 생성자가 상단에 오도록 선언
- 테스트 메서드명을 한글로 작성한다.
- 테스트 메서드의
@DisplayName
애노테이션을 생략한다. - 테스트가 어려운 외부 서비스는 TestDouble을 적용한다.
- 테스트 클래스의 빈 주입은 필드 주입을 사용한다.
- 테스트 픽스쳐는 원시값 만을
Constants
객체에서 관리한다. - given, when, then 주석을 명시적으로 붙인다. 생략하지 않는다.
- given, when, then 절을 나누기 곤란한 경우 given, when & then 과 같이
&
으로 합쳐 작성한다.
// given & when // when & then // given & when & then
- given, when, then 절을 나누기 곤란한 경우 given, when & then 과 같이
- 예외케이스에 대한 테스트 메서드 네이밍은
~ 하면 예외가 발생한다.
로을 통일한다.@Test void 없는_카테고리를_삭제하려_하면_예외가_발생한다() { // given 나인.회원_가입을_한다(티거_이메일, 티거_이름, 티거_프로필_URL); // when & then assertThatThrownBy(() -> categoryService.delete(나인.회원().getId(), -1L)) .isInstanceOf(NoSuchCategoryException.class); }
- 생성로직에 대한 테스트 메서드 명은 "~ 생성한다."로 통일한다.
@Test void 카테고리를_생성한다() { // given 나인.회원_가입을_한다(티거_이메일, 티거_이름, 티거_프로필_URL); // when CategoryResponse actual = categoryService.save(나인.회원().getId(), 취업_카테고리_생성_요청); // then assertThat(actual.getName()).isEqualTo(취업_카테고리_이름); }
- 시나리오 기반의 문장형 테스트를 작성한다. 참고자료
- 테스트를 위한 Dto 객체는 TestClass의 필드로 선언한다.
- 테스트의 given 데이터를 문장형 테스트로 작성한다. 참고자료
- 테스트를 위한 Dto 객체는 TestClass의 필드로 선언한다.
- 클래스 이름이 MySQL 예약어와 겹치면 매핑되는 테이블 이름은 복수형으로 지정한다.
- 엔티티의 no-args constructor 는 protected 로 지정하고, 최상단에 선언
- @Query 어노테이션에서 JPQL 작성시 SELECT, FROM, WHERE 단위로 즉, 절 혹은 구 단위로 개행한다.
- @Column 어노테이션의 맨 마지막에 nullable 옵션 추가
- 도메인형 (기능별 패키지 분리)
- 엔티티 단위로 예외 클래스를 생성한다. (논의 필요)
- e.g. Schedule 클래스의 Title 필드에 대한 예외 클래스는 별도로 생성하지 않는다.