Step-by-Step

[Spring] 3. DTO 작성 본문

프로젝트/Eggo (Mobile App)

[Spring] 3. DTO 작성

희주(KHJ) 2022. 3. 30. 18:29

Spring에 대한건 모든게 처음이라 열심히 구글링하고 깃헙에서 검색하면서 배우는 중 ㅠ_ㅠ

 

DTO(Data Transfer Object)

- 프로세스 간에 데이터를 전달하는 객체

- Client-Controller-Service-Mapper-DB 계층 간 데이터를 요청하고 받을 때 사용

- Lombok을 이용하여 setter/getter 이용

 

사용할 DTO

- 데이터베이스의 테이블 기준으로 DTO를 작성 (필드 종류, 타입도 동일)

- 해당 DTO가 어디서 사용되는지는 다음에 포스팅에서 기록할 예정

 

1. UserDTO

회원 정보를 담은 DTO 

package com.energysolution.dto;

import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@Getter
@Setter
@NoArgsConstructor
public class UserDTO {
	private String UserId;
	private String Name;
	private String Password;
	private String Email;

	public UserDTO(String UserId, String Name, String Password, String Email) {
		this.UserId = UserId;
		this.Name = Name;
		this.Password = Password;
		this.Email = Email;
	}
	
	// 출력
	public String getUserId() {
		return UserId;
	}

	public String getUserName() {
		return Name;
	}

	public String getUserPassword() {
		return Password;
	}

	public String getUserEmail() {
		return Email;
	}

	// 입력
	public void setUserId(String UserId) {
		this.UserId = UserId;
	}

	public void setUserName(String Name) {
		this.Name = Name;
	}

	public void setUserPassword(String Password) {
		this.Password = Password;
	}

	public void setUserEmail(String Email) {
		this.Email = Email;
	}

	@Override
	public String toString() {
		return "UserVO [ UserId=" + UserId + ",Name = " + Name + ", Password=" + Password + ", Email=" + Email + "]";
	}
	
	/* for VO
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null || getClass() != obj.getClass())
			return false;
		UserDTO uservo = (UserDTO) obj;
		return Objects.equals(UserId, uservo.UserId);
	}

	@Override
	public int hashCode() {
		return Objects.hash(UserId);
	}*/

}

 

2. BillDTO

고지서 내용을 담은 DTO

package com.energysolution.dto;

import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@Getter
@Setter
@NoArgsConstructor
public class BillDTO {
	
	//필요한 필드값
	private int BillId;
	private String date;
	private int TotalFee;
	
	public BillDTO(String date, int TotalFee) {
		this.date = date;
		this.TotalFee =TotalFee;
	}
		
	//출력
	public int getBillId() {
		return BillId;
	}
	public String getBilldate() {
		return date;
	}
	
	public int getTotalFee() {
		return TotalFee;
	}

	//입력
	public void setBillId(int BillId) {
		this.BillId = BillId;
	}
	public void setBilldate(String date) {
		this.date = date;
	}
	public void setTotalFee(int TotalFee) {
		this.TotalFee = TotalFee;
	}	

}

 

3. DetailBillDTO

상세 요금 고지서 내용을 담은 DTO

package com.energysolution.dto;

import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@Getter
@Setter
@NoArgsConstructor
public class DetailBillDTO {
	
	//필요한 필드값
	private int BillId;
	private int WaterFee;
	private int WaterUsage;
	private int ElectricityFee;
	private int ElectricityUsage;
	
	public DetailBillDTO( int WaterFee, int WaterUsage, int ElectricityFee, int ElectricityUsage) {
		this.WaterFee=WaterFee;
		this.WaterUsage=WaterUsage;
		this.ElectricityFee=ElectricityFee;
		this.ElectricityUsage=ElectricityUsage;
	}
	
	//출력
	public int getBillId() {
		return BillId;
	}
	public int getWaterFee() {
		return WaterFee;
	}
	public int getWaterUsage() {
		return WaterUsage;
	}
	public int getElectricityFee() {
		return ElectricityFee;
	}
	public int getElectricityUsage() {
		return ElectricityUsage;
	}
	
	//입력
	public void setBillId(int BillId) {
		this.BillId=BillId;
	}
	public void setWaterFee(int WaterFee) {
		this.WaterFee=WaterFee;
	}
	public void setWaterUsage(int WaterUsage) {
		this.WaterUsage=WaterUsage;
	}
	public void setElectricityFee(int ElectricityFee) {
		this.ElectricityFee=ElectricityFee;
	}
	public void setElectricityUsage(int ElectricityUsage) {
		this.ElectricityUsage=ElectricityUsage;
	}

}

 

4. paymentBillDTO

Bill과 User의 관계를 담은 DTO

package com.energysolution.dto;


import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@Getter
@Setter
@NoArgsConstructor
public class PaymentDTO {
	private String UserId;
	private int BillId;

	public PaymentDTO(String UserId) {
		this.UserId = UserId;
	}
	
	// 출력
	public String getUserId() {
		return UserId;
	}
	public int getBillId() {
		return BillId;
	}

	// 입력
	public void setUserId(String UserId) {
		this.UserId = UserId;
	}

	public void setBillId(int BillId) {
		this.BillId = BillId;
	}

	@Override
	public String toString() {
		return "PaymentDTO [ UserId=" + UserId + ",BillId = " + BillId+"]";
	}
}

 

5. TotalBillDTO

- BillDTO와 DetailBillDTO의 필드값을 합친 DTO

package com.energysolution.dto;

import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@Getter
@Setter
@NoArgsConstructor
public class TotalBillDTO {
	
	//필요한 필드값
	private int BillId;
	private String date;
	private int TotalFee;
	private int WaterFee;
	private int WaterUsage;
	private int ElectricityFee;
	private int ElectricityUsage;
	
	public TotalBillDTO(int BillId, String date, int TotalFee,int WaterFee,int WaterUsage,int ElectricityFee, int ElectricityUsage) {
		this.BillId = BillId;
		this.date = date;
		this.TotalFee =TotalFee;
		this.WaterFee=WaterFee;
		this.WaterUsage=WaterUsage;
		this.ElectricityFee=ElectricityFee;
		this.ElectricityUsage=ElectricityUsage;
	}
		
	//출력
	public int getBillId() {
		return BillId;
	}
	public String getBilldate() {
		return date;
	}
	public int getTotalFee() {
		return TotalFee;
	}
	public int getWaterFee() {
		return WaterFee;
	}
	public int getWaterUsage() {
		return WaterUsage;
	}
	public int getElectricityFee() {
		return ElectricityFee;
	}
	public int getElectricityUsage() {
		return ElectricityUsage;
	}

	//입력
	public void setBillId(int BillId) {
		this.BillId = BillId;
	}
	public void setBilldate(String date) {
		this.date = date;
	}
	public void setTotalFee(int TotalFee) {
		this.TotalFee = TotalFee;
	}
	public void setWaterFee(int WaterFee) {
		this.WaterFee=WaterFee;
	}
	public void setWaterUsage(int WaterUsage) {
		this.WaterUsage=WaterUsage;
	}
	public void setElectricityFee(int ElectricityFee) {
		this.ElectricityFee=ElectricityFee;
	}
	public void setElectricityUsage(int ElectricityUsage) {
		this.ElectricityUsage=ElectricityUsage;
	}

}

 

Setter와 Getter 사용 이유

외부에서 객체 필드를 직접적으로 접근하는 것을 방지하여 객체의 무결성을 보장하기 위함

※ 데이터의 무결성 : 데이터의 정확성과 일관성을 유지하고 보증하는 것

1. 필드들을 private으로 설정하여 외부의 접근 제어

2. public으로 선언된 메소드를 이용하여 외부에 들어온 값을 가공하여 필드에 저장 (Setter)

3. public으로 선언된 메소드를 이용하여 필드의 값을 가공하여 외부에 전달 (Getter)

 

Lombok

- Java의 오픈소스 라이브러리로 반복되는 메소드를 Annotation을 이용하여 자동으로 작성해주는 라이브러리

- DTO나 Model, Entity 등 여러 속성이 존재하고 Getter, Setter나 생성자 등을 매번 작성해줘야 하는 경우 이용

- Lombok을 이용해서 작성한 코드는 컴파일 과정에서 Annotation을 이용해서 코드를 생성하고 이런 결과물이 .class에 담기게 됨

+ 아직 Getter, Setter만 사용해봤는데, 추후 더 기능을 찾아볼 예정이다.

 

[참조]

https://thiago6.tistory.com/75

https://www.korecmblog.com/lombok/

Comments