[우아한테크코스] 5월 11일 TIL

less than 1 minute read

지하철 노선도 관리 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에러가 발생할 수 있다.
따라서 예외들을 묶어서 처리해주면 이를 막을 수 있다.