DTO(Data Transfer Object, 데이터 전송 객체)
: 데이터 전송 객체로, 계층(Layer) 간 데이터 교환을 위해 사용되는 객체입니다.
: DTO는 데이터 교환만을 위해 사용되므로, 필드, getter/setter 메서드를 가집니다.
public class StudentDTO {
private String name;
private int age;
private String address;
// 기본 생성자
public StudentDTO() {
}
// 매개변수를 받는 생성자
public StudentDTO(String name, int age, String address) {
this.name = name;
this.age = age;
this.address = address;
}
// getter와 setter 메서드
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
: 위의 코드에서는 학생의 이름, 나이, 주소를 저장하는 StudentDTO 클래스를 정의합니다. 클래스는 생성자를 가지고 있으며, 매개변수를 사용하여 객체를 초기화할 수 있습니다. 또한, 각 필드에 대한 getter와 setter 메서드를 정의하여 해당 필드에 액세스할 수 있습니다.
VO(Value Object, 값 객체)
: VO는 DTO와 유사한 개념으로, 값 그 자체를 표현하는 객체입니다.
: DTO와의 차이점은 불변성(immutable)을 유지해야 한다는 점입니다. 즉, VO의 속성이 변경될 경우, 새로운 VO 객체를 생성하여 반환합니다.
: *불변성이란 객체가 한번 생성되면, 그 내부의 상태가 변경되지 않는 것을 의미합니다.
public class StudentVO {
private final String name;
private final int age;
private final String address;
// 생성자
public StudentVO(String name, int age, String address) {
this.name = name;
this.age = age;
this.address = address;
}
// getter 메서드
public String getName() {
return name;
}
public int getAge() {
return age;
}
public String getAddress() {
return address;
}
}
: 위의 코드에서는 학생의 이름, 나이, 주소를 저장하는 StudentVO 클래스를 정의합니다. 클래스는 생성자를 가지고 있으며, 불변적인 필드로 정의되어 있습니다. 불변성을 유지하기 위해, setter 메서드가 없고, 필드에 대한 getter 메서드만 정의되어 있습니다. 이렇게 하면 객체가 생성된 후에는 객체의 상태를 변경할 수 없으므로, 안정성과 일관성을 유지할 수 있습니다.
Entity
: 데이터베이스 테이블과 매핑되는 객체입니다.
: 데이터베이스 컬럼과 일치하는 필드를 가지고 있으며, 데이터베이스와의 연동을 위한 메서드를 가지고 있습니다.
@Entity
@Table(name = "students")
public class StudentEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "name")
private String name;
@Column(name = "age")
private int age;
@Column(name = "address")
private String address;
// 생성자
public StudentEntity() {
}
public StudentEntity(String name, int age, String address) {
this.name = name;
this.age = age;
this.address = address;
}
// getter와 setter 메서드
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
: 위의 코드에서는 @Entity와 @Table 어노테이션을 사용하여 데이터베이스 테이블과 일치하는 StudentEntity 클래스를 정의합니다. 클래스는 @Id와 @GeneratedValue 어노테이션을 사용하여 데이터베이스 테이블의 기본 키와 자동 생성 전략을 정의합니다.
: 또한, 각 필드에 대한 @Column 어노테이션을 사용하여 데이터베이스 테이블의 열과 일치하는 필드를 정의합니다. 마지막으로, 클래스는 getter와 setter 메서드를 가지고 있습니다.
'spring(스프링)' 카테고리의 다른 글
[spring(스프링)] Filter와 Interceptor의 차이점 _디버깅의 눈물 (0) | 2023.04.07 |
---|---|
[spring(스프링)] Dispatcher Servlet이란? _디버깅의 눈물 (0) | 2023.04.06 |
[spring(스프링)] OAuth란? _디버깅의 눈물 (0) | 2023.03.20 |
[spring(스프링)] 스프링 시큐리티(Spring Security)란? _디버깅의 눈물 (0) | 2023.03.19 |
[spring(스프링)] 스프링 빈 라이프 사이클 _디버깅의 눈물 (0) | 2023.03.18 |