- PR 형식은 아래와 같습니다
<예시>
설명
변경사항
테스트 항목
기본적으로 master-develop branch가 존재하며 PR merge를 요청하는 branch는 develop입니다
dev에서 분기한 branch의 이름은 feat/이슈넘버 or xxx, fix/이슈넘버 or xxx , refactor/xxx 로 지정해주세요
- PR을 Merge 하기 위해선 반드시 1명 이상의 Approve가 필요합니다.
- PR은 Sqush and merge 옵션으로 merge합니다
- master <- develop으로 Merge 시에는 Create a merge commit 옵션으로 Merge합니다
- PR 제목은 아래와 같이 지어주세요. (issue가 없다면 생략해주세요)
(#issue-number) 내용 요약
- master <- develop PR 생성 시 develop에 merge된 pr 목록을 내용에 적어주세요.
- master, develop branch에는 commit할 수 없습니다.
- master는 prod에 배포하는 브랜치이기 떄문에 주의해주세요.
코드 리뷰 참고 글을 읽어주세요
- 왜 개선이 필요한지 이유를 충분한 설명해 주세요.
- 답을 알려주기보다는 스스로 고민하고 개선 방법을 선택할 수 있게 해주세요.
- 코드를 클린 하게 유지하고, 일관되게 구현하도록 안내해 주세요.
- 리뷰 과정이 숙제검사가 아닌 학습과정으로 느낄 수 있게 리뷰해 주세요.
- 리뷰를 위한 리뷰를 하지 마세요. 피드백 할 게 없으면 칭찬해 주세요.
리뷰어의 책임이 50%라는 마음으로 리뷰를 부탁드립니다
Commit 양식은 해당 사이트를 참고해주세요
<type>[optional scope]: <description>
[optional body]
[optional footer(s)]
- 위의 양식을 준수하며 제목과 본문은 한글로 작성해주세요
- type은 영어로 작성해주세요
예시 )
feat: 우아킷 쿠폰 발행 기능 추가
//본문은 한줄 띄워주세요
xxx 쿠폰 발행을 만족하기 위해....
- 커밋 로그를 보고 흐름을 이해할 수 있도록 작성 부탁드려요
- 명확한 제목과 자세한 본문 작성을 부탁드려요
네이버 핵데이 컨벤션을 따라주세요
https://naver.github.io/hackday-conventions-java/#line-wrapping-position
클린 코드를 함께 고민보아요!
파라미터에는 final을 붙혀주세요
120글자가 넘을 때 파라미터 개행 규칙
// 최지원 우승!!
public OrderService(
final OrderRepository orderRepository, // Tab 2번
final CartItemRepository cartItemRepository,
final MemberRepository memberRepository,
final ExchangeRateProvider exchangeRateProvider
){
this.orderRepository=orderRepository;
this.cartItemRepository=cartItemRepository;
this.memberRepository=memberRepository;
this.exchangeRateProvider=exchangeRateProvider;
}
return OrderResponse.of(
order.getId(), // Tab 1번
order.getOrderPrice(),
order.getExchangeRate(),
orderItemResponses
);
stream 개행 규칙
stream(). 이후에 줄바꿈을 하며 줄바꿈 시 탭 2번을 한다
//최준영 우승!
@Transactional(readOnly = true)
public OrderResponses readOrders(final Long memberId){
final Member member=getMemberById(memberId);
final List<OrderResponse> response=orderRepository.findAllByMember(member).stream()
.map(order->readOrder(order.getId()))
.collect(toList());
return OrderResponses.from(response);
}
클래스 선언 괄호 다음에 한 줄 띄우고 필드 명시
@Service
public class OrderService {
//한 줄 띄우기
private OrderRepository orderRepository;
private OrderValidator orderValidator;
클래스 메서드 순서
상수 - 엔터 - 필드 - 생성자 - 스태틱 메서드 - 비즈니스 메서드 - 게터 - 이퀄스/해시코드 - 투스트링
참조되는 method는 참조하는 메서드 바로 아래에 둔다
많이 참조되는 메서드는 제일 아래로 내린다
domain,vo는 정적 팩터리 메서드 사용 권장
public static CommentResponse from(CommentResult commentResult){
return CommentResponse.builder()
.commentId(commentResult.commentId())
.content(commentResult.content())
.nickname(commentResult.nickname())
.articleId(commentResult.articleId())
.createdAt(commentResult.createdAt())
.isWritten(commentResult.isWritten())
.build();
}
필드가 4개 이상부터 빌더를 추가한다
생성자는 public으로는 설정하지 않는다(new 방지)
static import를 하지않는다 (assertJ 라이브러리 제외)
테스트 픽스쳐 사용을 적극적으로 할 것 (builder 형식으로) 헬퍼 메서드는 given,when,then에 상관없이 래핑한다
테스트 메서드의 DisplayName는 자연스러운 네이밍으로 가져가되 구체성을 드러낸다
메서드 네이밍은 간단하게 가져가되 예외상황일때 좀 더 자세하게 적는다 (시간 많이 쓰지 않기)
ex)"장바구니에 담긴 상품을 주문하면 주문이 등록되고 장바구니가 비워진다"
@Test
@DisplayName("장바구니에 담긴 상품을 주문하면 주문이 등록되고 장바구니가 비워진다")
void order(){