[우아한테크코스] 5월 11일 TIL
지하철 노선도 관리 2차 피드백
[oop] 객체지향으로 구현하라
객체에게 일과 책임을 주어 일을 분담하는 것이 객체지향 프로그래밍의 원칙이다.
Line, Station, Section이 dto처럼 행동하는 것에 대해 의구심을 갖자.
[java] 생성자 추가
정적팩토리메서드를 추천하는 이유?
[database] 빈 값의 처리
Hibernate(jpa)나 Mybatis에서는 조회한 데이터가 없는 경우 예외가 아닌 null을 던진다.
이를 생각해서 조회 시 값이 없는 경우 Optional로 받아서 처리해 확인하고 빈 경우 예외를 발생하도록 하였다.
[Spring] java bean validation
@NotBlank
: 공백이면 안된다.
@Positive
: 0보다 큰 숫자.
@NotNull
: null이면 안된다.
@AssertTrue(message = "시작일은 종료일보다 과거로 설정해야 합니다.")
: 커스텀 메시지 처리 가능
implementation 'org.springframework.boot:spring-boot-starter-validation'
로 의존성 추가
멤버변수 위에 아래와 같이 어노테이션 추가
public class Station {
private Long id;
@NotBlank
private String name;
}
컨트롤러에는 @Valid
추가
나머지 bean에는 @Validated
추가
- [참고] (https://meetup.toast.com/posts/223)
[java] 두가지 예외 catch
try {
long lineId = lineDao.save(line);
return Line.of(lineId, line);
} catch (DataAccessException | NullPointerException exception) {
throw new DuplicateLineException();
}
[exception] custom exception의 사용
언제 써야하는가?
내가 했던 것처럼 전부 IllegalArgumentException
을 상속하게 되면
controllerAdvice가 Illegal을 잡아서 400으로 던짐으로 사실은 개발자의 잘못으로 500 에러가 나야함에도
400에러가 발생할 수 있다.
따라서 예외들을 묶어서 처리해주면 이를 막을 수 있다.