**DTO(Data Transfer Object, 데이터 전송 객체)**란 프로세스 간에 데이터를 전달하는 객체를 의미합니다. 말 그대로 데이터를 전송하기 위해 사용하는 객체라서 그 안에 비즈니스 로직 같은 복잡한 코드는 없고 순수하게 전달하고 싶은 데이터만 담겨있습니다. 아래의 그림을 통해 DTO는 주로 클라이언트와 서버가 데이터를 주고받을 때 사용하는 객체임을 알 수 있습니다.
public class UserDTO {
private Long id;
private String name;
private String email;
// Constructor, Getter, Setter
}
어떤 객체 자체를 넘기는게 아니라 필요한 정보만 가져갈 수 있도록 Data Transfer Object 에 넣어서 주는 것이다!
DTO는 불변성을 가지는 것이 좋습니다. 불변성을 갖는 DTO는 상태 변화로 인해 발생할 수 있는 부작용을 방지하고, 스레드 안전성을 높여 주기 때문에 특히 멀티스레드 환경에서 유리합니다.
불변성을 유지하려면 DTO를 설계할 때 다음을 고려할 수 있습니다:
final
로 선언하여 값이 한 번 설정되면 변경할 수 없게 만듭니다.예시로, 불변성을 가진 DTO는 다음과 같이 작성할 수 있습니다:
java
코드 복사
public class UserDTO {
private final Long id;
private final String name;
private final String email;
public UserDTO(Long id, String name, String email) {
this.id = id;
this.name = name;
this.email = email;
}
public Long getId() {
return id;
}
public String getName() {
return name;
}
public String getEmail() {
return email;
}
}
이렇게 불변성을 유지하면 객체의 상태가 변하지 않기 때문에 코드가 예측 가능해지고, 변경 가능성에 대한 걱정 없이 안전하게 DTO를 여러 곳에서 사용할 수 있습니다. 다만, 불변성을 유지하는 것이 필수는 아니며, 간단한 DTO라면 필요에 따라 가변성을 허용하기도 합니다.