Step-by-Step
[Spring] 3. DTO 작성 본문
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만 사용해봤는데, 추후 더 기능을 찾아볼 예정이다.
[참조]
'프로젝트 > Eggo (Mobile App)' 카테고리의 다른 글
[Spring] 6. 응답표준 (1) (0) | 2022.04.29 |
---|---|
[Spring] 5. Mapper.java와 Mapper.xml 작성 (0) | 2022.04.26 |
[Spring] 4. Service 작성 (0) | 2022.04.15 |
[Spring] 2. Controller 작성 (0) | 2022.03.30 |
[Spring] 1. Gradle 프로젝트 생성 (0) | 2022.03.28 |