[Project] Jscode 4회차 코드리뷰

박상혁·2023년 5월 21일

Project

목록 보기
10/14

https://github.com/JSCODE-EDU/project-class-baksakcci/pull/5

static의 이해

[[static]]
팩토리 메서드를 다음과 같이 사용했었습니다.

클래스 안에 기능(메서드)을 만드는데
static으로 선언하게 될 경우 static 영역으로 할당되어 인스턴스 하나가 공유되어 사용됩니다.

이에, 런타임이 되기 이전에는 객체를 할당하지 않으면 사용할 수 없다는 사실을 알게 되었습니다.
static 영역에 할당되고, 나머지 메서드는 객체가 생성되지 않으면 heap 영역에 없기 때문에 사용할 수 없습니다.

역할 세분화

[[기능과 책임의 분리]]
이 부분은 기능을 구현할 때 지속적으로 생각해봐야 할 문제입니다.
역할을 어느정도로 나눠야 할지에 대한 기준이 정해지진 않았습니다.

확실한건, 기능을 역할에 맞게 분리해서 구현하는 것이 가독성에 훨씬 도움되는 것을 알 수 있었습니다.

주관적인 면이 많이 들어가 있어
계속 만들어보면서 감을 익혀나가야 될 영역인 것 같습니다.

메서드 네이밍

[[변수, 메서드 네이밍 규칙]]
같은 검증 메서드라면 이름을 통일하는 것이 좋다고 합니다.
또한, is같은 경우 boolean값을 반환할 때 사용되며, 이와 같이 정형화된 메서드 이름 짓기가 있으니 한번 공부하는 것이 좋다고 합니다.

저도 다양한 상황을 계속 겪어보면서 보다 좋은 이름을 짓기 위해 노력하겠습니다.

domain 객체에서의 액세스 메서드 사용

[[액세스 함수에 대해]]
보통 일반적으로 캡슐화를 지키기 위해 가급적 getter, setter사용을 지양하고 있다고 합니다.
하지만 @ReqeustBody가 적용된 RequestDto 객체의 경우, 역직렬화를 이룰 때 값 주입은 reflection 기술을 활용하여 주입하므로 setter는 필요없지만, getter를 보고 필드 명을 알 수 있기 때문에 getter의 세팅은 필수적입니다.
https://bbbicb.tistory.com/46

이처럼 Framework에서 필수적으로 요구된다면 액세스 메서드를 사용해야 되지만,
외부에서 요구하는 것이 아니면 쓰지 않는 것을 지양한다 합니다.

람다식의 사용

boardPage.map(board -> {
	BoardResponseDto boardResponseDto = BoardResponseDto.fromEntity(board);
	return boardResponseDto;
});

기존에는 람다식을 이렇게 사용했다면

Page boardDtoPages = boardPage.map(BoardResponseDto::fromEntity);

이렇게 static 메서드의 사용이라면 간단하게 작성할 수 있습니다.

이렇게 구현하여 기능 구분이 확실해졌습니다!

HTTP status 관련 constant

상태 값 관련하여 상수로 구현된(불변) 값들이 존재합니다.
이를 사용하면 훨씬 가독성이 좋아지고 오타날 가능성이 줄어듭니다.

ResponseEntity.status()

Builder와 static factory method

[[객체 생성에 대해]]
두개 중 어떤 것을 사용해야 할지 고민했습니다.

나중에 요구사항이 추가될 것을 대비하여 생성인자가 많이 있는 경우에 사용하기 좋은 Builder로 구현하였습니다.

그리고 어차피 Dto도 domain이 바뀌면 같이 수정해야 하기 때문에
매개변수의 의존관게에 대해서는 신경쓰지 않아도 될 것 같습니다.

❗Builder를 사용하게 될 경우 다중 콜론 연산자를 사용할 수 없게 됩니다!
그래서 일단 임시로 static factory method를 남겨놓았습니다.

JPA delete, deleteById

[[deleteById, delete]]
커스텀 예외처리가 자동으로 이루어지는 줄 알았습니다.
내부 로직을 들여다보니, 예외처리를 하는 경우도 있고 아닌 경우도 있지만
find를 통해 유효성 검사가 이루어지는 것을 확인했습니다.

하지만 해당 예외는 ExceptionHandler에서 잡지 못합니다.
이에, 커스텀으로 만들기 위해서는 findById()로 먼저 있는지 없는지 확인 할 필요가 있습니다.

public void delete(Long id) {  
	boardRepository.findById(id).orElseThrow(() -> new NoSuchElementException("게시판을 찾을 수 없습니다."));  
	boardRepository.deleteById(id);  
}
profile
개발 노트

0개의 댓글