Skip to content

BE 컨벤션

준팍(junpak) edited this page Jul 11, 2023 · 1 revision

BE 코드 컨벤션


괜찮을지도 Java Style Guide우아한테크코스 Java Style Guide를 기준으로 작성되었습니다.

우아한테크코스 Java Style Guide와 다른 부분, 추가적인 부분을 아래 명시합니다.

기존 내용과 다른 부분은 제목에 목차를 명시, 새로 추가된 부분은 ✅  를 표기하였습니다.




3.4.2 클래스 내용 순서

아래 순서에 따라 클래스 내용을 작성합니다.


  1. 상수
  2. 멤버 변수(필드)
  3. 생성자
  4. 정적 팩토리 메서드
  5. 일반 메서드
  6. getter
  7. equals & hashCode

일반 메서드 간 순서는 접근제어자 관계 없이, 메서드 호출 순서대로 위→ 아래로 작성합니다.


4.5.1 어디서 줄바꿈 하는가?

기존 컨벤션에 덧붙여,

  1. 파라미터의 개수가 3개 이상이면 각 파라미터를 쉼표 (,) 단위로 줄바꿈합니다.

  2. 파라미터의 개수가 3개 미만이지만 타입 혹은 변수명의 길이로 인해 열 제한(120자)을 초과할 경우 각 파라미터를 쉼표 (,) 단위로 줄바꿈합니다.

    public Line(List<Station> stations) {
    		this.id = id;
    		this.name = name;
    		this.stations = stations;
    	}
    
    public Line(
    		Long id,
    		String name,
    		List<Station> stations
    	) {
    		this.id = id;
    		this.name = name;
    		this.stations = stations;
    	}
  3. 한 줄에는 한 개의 점(.)만 허용합니다.

    memberRepository.findAll()
    		.stream()
    		.map()
    		...

✅ 메서드 길이와 들여쓰기

  1. 하나의 메서드 길이는 최대 15줄입니다. 기준은 메서드 선언부를 제외한, 블록의 줄 수입니다.
  2. 들여쓰기(indent)의 depth가 2를 넘지 않도록 합니다. 1까지만 허용합니다.
  • 단, 이 제한으로 인해 메서드를 분리하는 것이 가독성 저하로 이어질 경우 구성원 간 합의 하에 일부 허용이 가능합니다.

✅ Final 키워드

멤버 변수(필드) 외에는, 특별한 이유가 없다면 final 키워드를 사용하지 않습니다.

  • 기계적으로 적용한 final 키워드로 인한 가독성 저하 및 팀원간 코드 통일성 파괴를 피하기 위함입니다.
  • 단, 구현 내용 상 final 키워드의 적용이 필요하다고 생각되는 경우 구성원 간 합의 하에 일부 허용이 가능합니다.

✅ 코드 편리성 라이브러리 : Lombok

  1. Builder 패턴, Getter 메서드, 빈 생성자에 대해서는 Lombok 어노테이션으로 대체합니다.
    • 반복적인 코드 사용을 줄여 코드 편의와 가독성을 높이기 위함입니다.
  2. @Builder, @Getter, @NoArgsConstructor 외의 어노테이션 사용을 금지합니다.
    • 생성자의 파라미터 순서 변화로 발생할 수 있는 오류를 방지하기 위해 @AllArgsConstructor, @RequiredArgsConstructor 의 사용을 금지합니다.
    • @NoArgsConstructor 의 접근제어자는 protected 이하로 선언합니다.

✅ 테스트 메서드

  • 테스트 메서드 이름은 영문으로 작성합니다.
  • 접미사로 ~Test는 붙이지 않습니다.
    • 네이밍 컨벤션 : 대상 메서드 이름_성공 실패 여부
  • DisplayName에 ~하면 ~한다 라고 명시합니다.
    • 예외테스트의 경우, 어떤 예외인지까지 명시
  • 바디에 given, when, then 주석을 반드시 붙입니다.
void createTopic_Success() {
		// 성공 테스트
}

void createTopic_FailByNonExistingPlace() {
		// 실패 테스트, 원인 명시
}

void createTopic_FailByInvalidName() {
		// 실패 테스트, 원인 명시
}