궁금한 것

투두메이트 클론코딩 중, Todo의 status 기본값 설정 방법

민석삼 2025. 4. 5. 22:22

투두메이트 클론 코딩 중, 새로운 todo를 만들 때 status 필드의 기본값을 설정해줘야 할 일이 생겼다. todo(할 일)의 status는 보통 PENDING(미완료)로 시작한다.

이 기본값을 어디서 정해주는 게 좋은 방식일 지 고민하게 됐다.

  • DB 테이블 생성 시 해당 필드에 default 설정 해주기
  • Java 엔티티에서 변수 선언 시 기본값 설정하기
  • 생성자에서 기본값 설정하기
  • Builder에서 기본값 설정하기 (@Builder + @Builder.Default)

각 방법을 하나씩 살펴보자.

1. DB 테이블 생성 시 해당 필드에 default 설정 해주기

위처럼 todo 테이블을 생성할 때 status의 기본값을 pending으로 설정해주는 방식이다.

DB에서 자동으로 기본값을 설정해 주지만,

Java에서 생성되는 객체에는 해당 기본값이 자동으로 반영되지 않는다. 즉 Java 엔티티와 DB간에 일관성 문제가 발생할 수 있다.

DB와 Java 코드에서 기본값을 일관성 있게 다뤄야 하기 때문에 Java 엔티티에 기본값을 명확하게 설정하는 것이 더 직관적이다. 

2. 필드 선언 시 직접 초기화

 코드가 간단하고 직관적이고, 어떤 생성자를 쓰던 이 기본값 설정이 잘 작동한다.

기본값을 변수 선언 시 자동으로 처리해주므로 생성자에서 매번 설정하지 않아줘도 된다.

클래스에 @Builder를 사용하는 경우에는 해당 필드 위에 @Builder.Default를 붙여주면 정상적으로 작동한다.

생성자에 @Builder를 사용하는 경우에는 빌더로 객체를 생성할 때 필드의 기본값이 무시될 수 있다.

(채택) 3. 생성자에서 직접 설정

생성 로직 안에서 명확하게 기본값을 부여하는 방식

빌더 패턴을 사용하지 않거나, @Builder를 생성자에 붙일 때 유용하다.

다양한 생성자가 필요할 경우 매번 기본값을 설정하는 번거로움이 있을 수 있다.

status 필드가 필수적인 경우에는, 생성자에서 명확히 설정해주면 읽기 쉽고 유지보수에 좋다.

4. 빌더에서 기본값 주기 (Builder + @Builder.Default)

객체를 빌더 패턴으로 생성할 때(Builder를 클래스에 달아줄 경우)만 기본값을 설정할 수 있다.

빌더 사용 시에만 기본값이 설정되고, 생성자 사용 시엔 기본값이 적용되지 않아 일관성 문제가 발생할 수 있고,

@Builder를 클래스 위에 쓰면

  • 불필요한 필드가 빌더에 노출될 수 있고
  • 필수 필드가 누락돼도 에러나지 않기 때문에 불완전한 객체가 생성될 수 있는

문제가 발생할 수 있으므로, Builder는 클래스가 아닌 생성자에만 붙이는게 더 안전하기도 하다.

 

 

생성자 방식과 빌더 패턴으로 객체를 생성할 때 모두 기본값이 정상적으로 저장되는 3번 방식을 채택하였다.

 

'궁금한 것' 카테고리의 다른 글

지연 로딩과 즉시 로딩의 차이  (2) 2025.05.08