728x90
객체 종류: DTO와 VO - 객체 목적에 따른 명칭
DTO(Data Transfer Object)
가변 객체 = 객체 내 데이터를 Getter로 조회 가능, 객체 내 데이터를 Setter로 쓰기 가능
순수하게 데이터를 담아 계층간 전달하는 객체
로직을 갖고 있지 않은 순수한 데이터 객체이며 메서드로는 getter / setter만 갖는다.
- Setter의 경우 변조 가능성 有 -> 생성자로 값을 넣어주도록 하면 전달하는 과정에서 변조가 불가능
package com.example.spring_practice.dto;
import lombok.Getter;
import lombok.Setter;
@Getter
//@Setter
public class MemberDto {
private String name;
private String email;
public MemberDto(String name, String email) {
this.name = name;
this.email = email;
}
}
VO(Value Object)
불변 객체 = 객체 내 데이터를 Getter로 조회만 가능 (쓰기 불가)
VO는 서로 다른 이름을 갖는 VO인스턴스라도 모든 속성이 같다면 두 인스턴스는 같은 객체인 것이 핵심이다.
객체의 주소를 비교하지 않도록 `equals()`와 `hashCode()`를 오버라이딩(재정의) 해주어야한다.
package com.example.spring_practice.vo;
import java.util.Objects;
public class MemberVo {
private final String email;
public MemberVo(String email) {
this.email = email;
}
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
MemberVo memberVo = (MemberVo) o;
return Objects.equals(email, memberVo.email);
}
public int hashCode() {
return Objects.hash(email);
}
}
728x90
'ASAC 웹 풀스택 > Spring Boot' 카테고리의 다른 글
Java 기본 문법 및 JVM 구성(11) - Generic, Interface, Abstract Class (0) | 2024.09.29 |
---|---|
Java 기본 문법 및 JVM 구성(10) - final, static (0) | 2024.09.29 |
Java 기본 문법 및 JVM 구성(8) - 정적 팩토리 메서드 (1) | 2024.09.28 |
Java 기본 문법 및 JVM 구성(7) - Builder: 객체 생성의, 모든 경우의 수를 지원 (0) | 2024.09.28 |
Java 기본 문법 및 JVM 구성(6) - Object(Lombok을 활용한): 객체 생성 (0) | 2024.09.28 |