티스토리 뷰

728x90
반응형

DTOData Transfer Object의 약어로 Value Object, 즉 VO라고도 불린다.

오로지 정보를 보관, 전달을 위해 생성된 클래스로, 매개변수를 정리할 수 있고 코드를 간결하게 만드는데 도움이 된다.

 

전에, 리모콘을 예시로 들면서 메소드는 보통 접근지정자를 public으로, 필드는 private으로 설정한다고 언급했었다. 

DTO를 사용하지 않으면 다른 클래스에서 private 필드에 접근할 수 있는 방법이 없다.  

하지만 DTO를 사용하면 private 필드에 접근할 수 있다

 

getter() 메소드를 통해 멤버 변수에 저장된 값을 참조할 수 있고, setter() 메소드를 통해 멤버 변수에 원하는 값을 ㅈ전달할 수 있다. 

 

예시를 통해 살펴보자.


"DTO 클래스 생성하기"

 

예제 1

MemberDto.java - getter(), setter() 사용해보기

package test.mypac;
/*
 * Data Transfer Object 의 약어 DTO
 */
public class MemberDto {
	private int num;
	private String name; 
	private String addr;
	//num 필드에 대한 setter 메소드
	public void setNum(int num) {
		this.num = num;
	}
	//name 필드에 대한 setter 메소드
	public void setName(String name) {
		this.name = name;
	}
	//addr 필드에 대한 setter 메소드
	public void setAddr(String addr) {
		this.addr = addr;
	}
	
	public int getNum() {
		return num;
	}
	public String getName() {
		return name;
	}
	public String getAddr() {
		return addr;
	}
	
}

필드를 선언하고, get을 입력 후, ctrl+space bar을 누르면 getter메소드를 자동완성할 수 있다.

마찬가지로, set을 입력 후, ctrl+space bar을 누르면 setter 메소드를 자동완성할 수 있다.


MainClass12.java - DTO를 활용하여 객체의 private 필드에 접근하기

package test.main;

import test.mypac.MemberDto;

public class MainClass12 {
	public static void main(String[] args) {
		//MemberDto 객체 생성해서 참조값을 dto1에 담기
		MemberDto dto1 = new MemberDto();
		//private 필드 접근 불가
		//dto1.num = 1;
		
		//setter 메소드를 이용해서 num에 1 전달하기
		dto1.setNum(1);
		dto1.setName("김구라");
		dto1.setAddr("노량진");
		
		//dto1에 저장된 값 참조하기
		//private 필드 접근 불가
		//int num = dto1.num;
		
		int num = dto1.getNum();
		String name = dto1.getName();
		String addr = dto1.getAddr();
	}

}

DTO를 활용하여 private 필드에 setter와 getter을  통해 접근할 수 있는 모습을 확인할 수 있다.


"DTO에 모든 필드를 인자로 갖는 생성자 생성하기"

 

예제 2

다음의 문제를 풀어보자.

 

1) 회원 두 명의 정보를 MemberDto 객체에 각각 담아 보세요. MemberDto 객체의 참조값을 담을 지역 변수의 이름은 mem1, mem2로 만들어주세요.

MemberDto mem1 = new MemberDto();
mem1.setNum(1);
mem1.setName("김ㅇㅇ");
mem1.setAddr("송파구");

MemberDto mem2 = new MemberDto();
mem2.setNum(2);
mem2.setName("이ㅇㅇ");
mem2.setAddr("광진구");

2) MemberDto mem2 = new MemberDto(2,"이ㅇㅇ","광진구")와 같이, 객체를 생성하며 값을 전달할 수 있도록 MemberDto 클래스에 생성자를 만들어보세요.

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

 


전체 코드

MemberDto.java

package test.mypac;
/*
 * Data Transfer Object 의 약어 DTO
 * 
 * 
 */
public class MemberDto {
	private int num;
	private String name; 
	private String addr;
	
	//생성자 2개를 추가해보세요
	public MemberDto() {
		
	}
	public MemberDto(int num, String name, String addr) {
		this.num = num;
		this.name = name;
		this.addr = addr;
	}
	
	//num 필드에 대한 setter 메소드
	public void setNum(int num) {
		this.num = num;
	}
	//name 필드에 대한 setter 메소드
	public void setName(String name) {
		this.name = name;
	}
	//addr 필드에 대한 setter 메소드
	public void setAddr(String addr) {
		this.addr = addr;
	}
	
	public int getNum() {
		return num;
	}
	public String getName() {
		return name;
	}
	public String getAddr() {
		return addr;
	}
	
}

MainClass13.java

package test.main;

import test.mypac.MemberDto;

public class MainClass13 {
	public static void main(String[] args) {
		/*
		 * 회원 두 명의 정보를 MemberDto 객체에 각각 담아 뵤세요.
		 * MemberDto 객체의 참조값을 담을 지역 변수의 이름은 mem1, mem2로 만들어주세요.
		 */
		
		MemberDto mem1 = new MemberDto();
		mem1.setNum(1);
		mem1.setName("김ㅇㅇ");
		mem1.setAddr("송파구");
		
		MemberDto mem2 = new MemberDto(2,"ㅇㅇ","광진구");
		
	}

}

"Generate Constructor, Generate getters and setters를 통해 generate하기"

 

위의 예제들에서, ctrl+space bar을 통해 getter과 setter들을 만들었었고, 생성자는 직접 만들어보았다. 

생성자와 getters, setters를 더 편리하게 만드는 방법을 소개해보겠다.


★ [ 객체를 생성할 클래스의 작성법 ]

1. private  접근 지정자로 필요한 필드를 data type 을 고려해서 만든다.
2. default 생성자를 만든다.
3. 모든 필드의 값을 생성자의 인자로 전달 받아서 필드에 저장하는 생성자를 generate 한다.
4. 모든 필드의 접근 메소드 즉 setter, getter 메소드를 generate 한다.
     

<generate 하는 방법>

마우스 우클릭 => Source => Generate Constructor / Generate getters and setters


예제 3

 

다음의 문제를 풀어보자.

1. MemberDto 객체를 저장할 ArrayList 객체를 생성해서 참조값을 members라는 지역 변수에 담아보세요.

ArrayList<MemberDto> members = new ArrayList<>();

2. 2명의 회원 정보를 members에 담아보세요.

members.add(new MemberDto(1,"김ㅇㅇ","송파구"));
members.add(new MemberDto(2,"이ㅇㅇ","광진구"));

전체 코드

MainClass14.java

package test.main;

import java.util.ArrayList;
import java.util.List;

import test.mypac.MemberDto;

public class MainClass14 {
	public static void main(String[] args) {
		//1. MemberDto 객체를 저장할 ArrayList 객체를 생성해서 참조값을 members라는 지역 변수에 담아보세요.
		ArrayList<MemberDto> members = new ArrayList<>();
		//2. 2명의 회원 정보를 members에 담아보세요.
		members.add(new MemberDto(1,"김ㅇㅇ","송파구"));
		members.add(new MemberDto(2,"이ㅇㅇ","광진구"));
		
		//참조연습
		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();//송파구
		
		//반복문 연습(members에 저장된 참조값 순서대로 불러내기)
		for(int i=0;i<members.size();i++) {
			MemberDto tmp = members.get(i);
		}
		//확장 for문
		for(MemberDto tmp:members) {
			
		}
	}

}
반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함