[Spring] Dto를 만들 때 주의사항

rekv·2025년 2월 5일

Spring

목록 보기
7/15

DTO를 만들 때 주의사항

DTO의 주요 목적은 데이터를 전달하는 것이며, 전달된 후 변경되지 않는 것이 이상적이다. 따라서 DTO는 불변객체로 만드는 게 좋으므로 setter 사용을 지양해야 한다.

그렇다면 엔티티 클래스도 setter를 조심해서 만들어야 할까?

정답은 X

엔티티 클래스는 데이터베이스와 직접 매핑되는 클래스이며, JPA(Hibernate) 같은 ORM 프레임워크에서 객체 상태를 관리하기 위해 사용된다.
→ 상태 변경이 필요하기 때문에 setter 사용이 가능하고, 종종 필요함

DTO*(Data Transfer Object) 는 이름 그대로 데이터 전송을 위한 객체로, 주로 계층 간(Controller ↔ Service ↔ View) 데이터 전달을 위해 사용된다.
→ DTO는 불변성(Immutable) 을 유지하는 것이 좋으며, 따라서 setter를 지양하고 생성자 또는 빌더 패턴을 활용합니다.

불변성(Immutable)을 유지하기 위한 방법

  • 생성자 기반 초기화
public class StudentDto {
    private final String name;
    private final int age;

public StudentDto(String name, int age) {
        this.name = name;
        this.age = age;
    }

// Getter만 제공
    public String getName() { return name; }
    public int getAge() { return age; }
}
  • 빌더 패턴 활용 (Lombok):
@Getter
@Builder
public class StudentDto {
    private final String name;
    private final int age;
}

그러나 만약 DTO가 특정 상황에서 값의 변경이 필요하다면, 제한된 setter를 만들 수 있다. 하지만 이런 경우는 되도록 피하는 것이 좋다.

정리

구분Entity
목적DB와의 매핑, 상태 관리데이터 전달 및 표현
setter 사용필요 시 사용 가능 (신중히 관리)지양 (불변 객체로 유지)
대안비즈니스 로직 메서드 활용생성자, 빌더 패턴으로 초기화
상태 변경O (필요)X (불변성 유지)

0개의 댓글