티스토리 뷰
[Java] DTO(Data Transfer Object) or VO(Value Object) /getter(), setter()
Happyoon ~ 2021. 11. 9. 12:16DTO는 Data 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) {
}
}
}
'development > Java' 카테고리의 다른 글
- Total
- Today
- Yesterday
- 자바스크립트
- brute force
- R
- Case When
- 큐
- 백준
- bootstrap
- jsp
- baekjoon
- Django
- 문자열
- web
- Oracle
- 장고
- python
- 브루트 포스
- CSS
- 스프링
- jQuery
- 고득점 키트
- 프로그래머스
- 덱
- 단계별로풀어보기
- 파이썬
- 정렬
- Java
- 자바
- javascript
- append
- html
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |