본문 바로가기

Languages/JAVA

[JAVA] DTO vs VO vs Entity / DTO 살펴보기

DTO, VO, Entity에 대해 알아봅시다 😎


오늘은 DTO, VO, Entity를 비교해보고 DTO에 대해서 자세히 알아봅시다.

 

VO (Value Object)

- 값 그자체를 표현하는 객체이다.

- 로직을 포함할 수 있습니다.

- 변하지 않는 값을 가집니다(불변성).

- 주소가 달라도 값이 같으면 같다고 봅니다.

 

 

DTO (Data Transfer Object)

- 계층간 데이터 교환을 위해 사용하는 객체입니다.

- 데이터 교환만을 위해 사용하므로 로직을 갖지 않고, getter/setter 메소드만 가집니다.

- 값을 변경할 수 있습니다(가변).

 

 

Entity

- 실제 DB 테이블과 매핑되는 클래스입니다. 이를 기준으로 테이블이 생성되고 스키마가 변경됩니다.

- 로직을 포함할 수 있습니다.

- id로 구분됩니다.


DTO 살펴보기

 

public class Member {
	public int num;
	public String name;
	public String addr;
	
	
}

Member 클래스를 DTO로 만들어봅시다!

 


DTO로 만들면 이런 형태가 됩니다. 만드는 방법을 알아봅시다.

public class MemberDto {
	private int num;
	private String name;
	private String addr;
	
	public MemberDto() {
		
	}

	public MemberDto(int num, String name, String addr) {
		super();
		this.num = num;
		this.name = name;
		this.addr = addr;
	}

	public int getNum() {
		return num;
	}

	public void setNum(int num) {
		this.num = num;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getAddr() {
		return addr;
	}

	public void setAddr(String addr) {
		this.addr = addr;
	}
	
	
}

DTO 만드는 방법

필드의 접근지정자를 private로 지정하여 외부에서 필드로 직접 접근하지 못하게 만들어줍니다.

필드에 직접 접근하지 못하니 메소드로 접근해야합니다. getter와 setter를 만들어줍니다. 

setter와 getter 자동으로 만드는 방법!
마우스 우클릭 => Source => Generate getters and setters

생성자 자동으로 만드는 방법!
마우스 우클릭 => Source => Generate Constructor using Fields

이제 main에서 사용해봅시다.

 

 

1. 객체만들기

//1. MemberDto 객체를 저장할 ArrayList 객체를 생성해서 참조값을 members라는 지역변수에 담아보세요
List<MemberDto> members = new ArrayList<>();
//2.2명의 회원정보를 members에 담아보세요.
members.add(new MemberDto(1,"이00","서울"));
members.add(new MemberDto(2,"김00","부산"));

ArratList에 MemberDto를 담아봅시다.

생성자를 만들어 놓았으니 생성자를 사용하여 바로 담을 수 있습니다.

 

2. getter, setter 사용해보기

//참조 연습

members.get(0).setName("최00");

List<MemberDto> a = members;
MemberDto b = members.get(0);
int c = members.get(0).getNum(); //1
String d = members.get(0).getName();
String e = members.get(0).getAddr();

setter로 데이터를 지정할 수 있고 getter로 데이터를 얻어낼 수 있습니다.

 

3. 데이터 불러오기

//반복문 연습 (members 에 저장된 참조값 순서대로 불러내기)
for(int i=0; i<members.size(); i++) {
	MemberDto tmp=members.get(i);
	System.out.println(tmp.getName());

}

//확장 for문 사용
for(MemberDto tmp:members) {
	System.out.println(tmp.getName());
}

for문을 사용하여 모든 데이터를 불러와봅시다. 

잘 불러와진 것을 볼 수 있습니다.