- 데이터 저장 전용 클래스
- gettets/setters, hashCode()&equals() 오버라이딩, toString() 오버라이딩의 메서드만 있다.
<기본적인 DTO클래스 만들기>
1. 클래스의 이름은 ~DTO, ~TO, ~VO 로 정한다.
2. Serializable 인터페이스를 구현한다. (마우스 올려놓기)
- Serializable 안에는 아무것도 없다.
- 그러나 jvm은 이 인터페이스를 구현한 클래스의 객체에 대해서만 직렬화를 지원한다.
3. UID값을 정해준다. (ex. 100L) (add defualt serial version ID)
4. DB의 해당 테이블을 보고 변수 선언을 한다.
- 접근제한자: 무조건 private
5. 디폴트생성자 생성
6. 사용자생성자 생성
7. getters/setters 생성(외부에서 수정할 수 있게)
8. hashCode( )/ equals( ) 오버라이딩
9. toString( ) 오버라이딩
<향상된 DTO클래스 만들기> (빌더 디자인 패턴)
10. DTO클래스 안에 추가적으로 static 클래스(Builder) 생성
11. DTO클래스의 멤버변수를 복사해서 Builder클래스의 멤버변수로 선언
12. Builder클래스의 디폴트 생성자 생성
13. Builder클래스의 멤버변수에 대한 set메서드만 생성
- return this; 추가
- 위의 this는 DTO클래스의 객체가 아니라 Builder클래스의 객체이다.
-> 따라서 반환형을 void-> Builder 클래스로 설정
14. Builder클래스 내부에 build( )메서드를 생성 (메서드 키워드 고정)
- return new MemberDTO(this); 삽입
15. DTO클래스에 사용자 생성자를 하나 추가 (위의 메서드 본문 마우스 올려놓기-> 생성자 추가)
- (this 를 가리킬만한 매개변수를 갖고있는 생성자가 없기 때문에)
- 매개변수의 자료형은 Builder클래스
- 생성자 내부는 dto클래스의 멤버변수를 (외부에서 가져오지 않으므로) builder객체가 갖고있는 멤버변수로 초기화.
this.id = builder.id;
this.name = builder.name;
this.address = builder.address;
import java.io.Serializable;
import java.util.Objects;
public class MemberDTO implements Serializable {
private static final long serialVersionUID = 100L;
private int id;
private String name;
private String address;
public MemberDTO() {
// TODO Auto-generated constructor stub
}
public MemberDTO(int id, String name, String address) {
this.id = id;
this.name = name;
this.address = address;
}
public MemberDTO(MemberDTOBuilder builder) {
this.id = builder.id;
this.name = builder.name;
this.address = builder.address;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public static long getSerialversionuid() {
return serialVersionUID;
}
@Override
public int hashCode() {
return Objects.hash(id);
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
MemberDTO other = (MemberDTO) obj;
return id == other.id;
}
@Override
public String toString() {
return id + ":" + name;
}
public static class MemberDTOBuilder {
private int id;
private String name;
private String address;
public MemberDTOBuilder() {
// TODO Auto-generated constructor stub
}
public MemberDTOBuilder setId(int id) {
this.id = id;
return this;
}
public MemberDTOBuilder setName(String name) {
this.name = name;
return this;
}
public MemberDTOBuilder setAddress(String address) {
this.address = address;
return this;
}
public MemberDTO build() {
return new MemberDTO(this);
}
}
}
public class MainEx {
public static void main(String[] args) {
MemberDTO dto1 = new MemberDTO();
dto1.setId(1);
dto1.setName("a");
dto1.setAddress("서울");
MemberDTO dto2 = new MemberDTO(2, "q", "대전");
MemberDTO dto3 = new MemberDTO(3, "대구", "e");
MemberDTO.MemberDTOBuilder builder =
new MemberDTO.MemberDTOBuilder();
//builder = builder.setName("v");
//builder = builder.setAddress("부산");
//builder = builder.setId(4);
// builder = builder.setName("v").setAddress("부산").setId(4);
/*builder =
new MemberDTO.MemberDTOBuilder()
.setName("v")
.setAddress("부산")
.setId(4);
*/
'자바(java)' 카테고리의 다른 글
Enum(Enumeration) (0) | 2023.03.10 |
---|---|
람다식(Lambda) (0) | 2023.03.10 |
인터페이스(Interface) (0) | 2023.03.09 |
Final(변수, 메서드, 클래스) (0) | 2023.03.09 |
상속 (Inheritance) (0) | 2023.03.09 |