본문 바로가기

자바(java)

DTO(Data Transfer Object) 클래스

 - 데이터 저장 전용 클래스

 - 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