Java - DTO 활용

2025. 1. 22. 13:58·Java

1. DTO 

  • DTO : 데이터 전송 객체 (setter, getter, 1차 클래스 배열)
  • 변수들을 드래그 > 우클릭 > Source > Generate getters and setters > 아래 생성됨!
  • setter를 먼저 실행하고, getter를 실행하게 되면 값을 가져와서 사용 가능 
package basic_html;
import java.util.ArrayList;

public class arr_dto {
	String name = null, email = null;

	//1차 클래스 배열
	public ArrayList<String> member(){
		//1차 클래스 배열을 생성 
		ArrayList<String> m = new ArrayList<String>();
		//getter 메소드를 실행시켜서 setter값을 받은 사항을 1차 클래스 배열에 추가
		m.add(getName());
		m.add(getEmail());
		return m;	//1차 클래스 배열 리턴
	}

	public String getName() {	//getter : 전역변수의 값을 가져오는 역할 
		return name;
	}

	public void setName(String name) {	//setter : 전역변수에 값을 이관하는 역할 
		this.name = name;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}
}

 

2. DTO 활용

package basic_html;
import java.util.ArrayList;

//arr_dto와 연계

public class arr13 {

	public static void main(String[] args) {
		
		//2차 클래스 배열 : 모든 회원 각각의 정보를 배열로 담는 역할
		ArrayList<ArrayList<String>> alldata = new ArrayList<ArrayList<String>>();
		
		//1차 클래스 배열 : 각 개인 데이터를 DTO로 회신 
		ArrayList<String> rdata = null;
		
		arr_dto ad = new arr_dto();	//DTO 클래스 객체 생성
		
		String n = "홍길동";
		String e = "hong@nate.com";
		
		ad.setName(n);	//사용자명 setter
		ad.setEmail(e);	//이메일 setter
		rdata = ad.member();	//DTO에서 생성된 1차 클래스 배열값을 받음 
		alldata.add(rdata);		//2차 클래스 배열로 배열을 추가
		
		ad.setName("유관순");
		ad.setEmail("yksoon@gmail.com");
		rdata = ad.member();
		alldata.add(rdata);
		
		System.out.println(alldata);

	}
}

😊응용문제

사용자를 추가하는 회원가입 시스템을 제작
다음과 같이 진행되도록 코드를 작성

메뉴 : 1. 회원추가 2. 회원리스트 출력 3. 시스템 종료 : 

1. 회원 추가를 선택시
"아이디를 입력하세요 : "
"고객명을 입력하세요 : "
"패스워드를 입력하세요 : "
"이메일을 입력하세요 : "

이후 메뉴선택으로 반복

2. 회원리스트 출력 선택시
등록된 회원 데이터가 콘솔로 출력 
 
3. 시스템 종료를 선택시
System.exit(0)으로 프로그램 종료
package basic_html;
import java.util.ArrayList;
import java.util.Scanner;

public class arr14 {
	public static void main(String[] args) {	
		register rg = new register();
		rg.menu();
	}
}

class register{
	Scanner sc = null;
	ArrayList<ArrayList<String>> membersdata = new ArrayList<ArrayList<String>>();
	ArrayList<String> mdata = null;
	String info[] = {"아이디","고객명","패스워드","이메일"};
	int n = 0;
	
	public void menu() {
		System.out.println("---------------");
		System.out.println("     메뉴\n1. 회원추가 \n2. 회원리스트 출력 \n3. 시스템 종료");
		System.out.println("---------------");
		System.out.println("번호를 입력해주세요 : ");
		this.sc = new Scanner(System.in);
		this.n = this.sc.nextInt();
		if(n==1) {
			//회원추가 
			System.out.println("-----회원추가-----");
			this.addmem();
			this.menu();
		}else if(n==2) {
			//회원리스트 출력
			System.out.println("----회원리스트----");
			this.prtmem();
			this.menu();
		}else if(n==3) {
			//시스템 종료
			System.out.println("종료합니다.");
			System.exit(0);
		}else {
			System.out.println("번호를 잘못입력하셨습니다.");
			this.menu();
		}
	}
	
	protected void addmem() {
		String data = null;
		arr_dto ad = new arr_dto();
		
		int i = 0;
		while(i<this.info.length) {
			System.out.println(this.info[i]+" 입력을 해주세요 : ");
			this.sc = new Scanner(System.in);
			data = this.sc.next();
			if(i==0) {
				ad.setId(data);
			}else if(i==1) {
				ad.setName(data);
			}else if(i==2) {
				ad.setPassword(data);
			}else if(i==3) {
				ad.setEmail(data);
			}
			i++;
		}
		this.mdata = ad.member();
		this.membersdata.add(this.mdata);
	}
	
	protected void prtmem() {
		//System.out.println(this.membersdata);
		int i, j;
		i = 0;
		while(i<this.membersdata.size()) {
			System.out.println("["+(i+1)+"번째 회원]");
			
			j = 0;
			while(j<this.membersdata.get(0).size()) {
				System.out.println(this.info[j]+" : "+ this.membersdata.get(i).get(j));
				j++;
			}
			i++;
		}
	}
}

 

3. 정렬

package basic_html;
/*
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Scanner;
*/
import java.util.*;

//2차 클래스 및 2차 원시 배열 모두 정렬을 사용시 1차 그룹을 먼저 정렬한 후에 2차에 반영되도록 해야함
public class arr_etc {
	public static void main(String[] args) {
		Integer number[][] = {
				{22,1,6,4,20},
				{3,9,7,33,11}
		};
		//2차 클래스 배열 선언
		ArrayList<ArrayList<Integer>> data2 = new ArrayList<ArrayList<Integer>>();
		Scanner sc = new Scanner(System.in);
		System.out.println("정렬방식 : 1.오름차순, 2. 내림차순 : ");
		int select = sc.nextInt();
		
		//반복문으로 원시배열 그룹단위별로 1차 클래스 배열로 변환 ->2차 클래스에 적용
		int w = 0;
		while(w < number.length) {
			ArrayList<Integer> data1 = new ArrayList<Integer>(Arrays.asList(number[w]));
			if(select==1) {
				Collections.sort(data1);	//1차 클래스 배열 오름차순 정렬
			}else if(select==2) {
				Collections.sort(data1,Collections.reverseOrder());	//내림차순 적용 
			}
			data2.add(data1);	//2차 클래스 배열로 적용 
			w++;
		}
		System.out.println(data2);
//		Collections.sort(data2.get(0));	//그룹별로 소트해야함 
		System.out.println(data2);
		sc.close();

	}

}
  • 원시배열을 클래스배열로 바꾸면서 정렬할때 두가지 방밥
    • 원시배열 => 먼저 sort => 클래스 배열로 전환
    • 원시배열 => 클래스 배열로 전환 => 그룹별로 sort

4. 배열 데이터 검색 

package basic_html;
import java.util.ArrayList;
import java.util.Scanner;

//Scanner를 이용하여 배열에 있는 데이터를 검색하는 방식
public class arr_etc2 {
	public static void main(String[] args) {
		String word = "삼성 엘지 휘센";
		System.out.println(word.indexOf("삼성"));		//문자열.indexOf("찾을단어")
		ArrayList<String> pd = new ArrayList<String>();
		pd.add("LG 냉장고 3단");
		pd.add("삼성 냉장고 2단 + 김치통");
		pd.add("LG 휘센 오브제 컬렉션 에어컨");
		pd.add("캐리어 2in1 에어컨");
		pd.add("위니아 공기 청정기");
		System.out.println(pd);
		
		Scanner sc = new Scanner(System.in);
		System.out.println("삼품명 검색 단어를 입력하세요 : ");
		String search = sc.nextLine();
		int count = 0;
		
		int w = 0;
		while(w < pd.size()) {
			if(pd.get(w).indexOf(search) != -1){	//해당 단어가 포함된 경우 
				System.out.println(pd.get(w));
				count++;
			}			
			w++;
		}
		//카운트 변수값을 이용하여 검색된 단어가 없을경우 메세지 출력
		if(count == 0) {
			System.out.println("상품이 존재하지 않습니다");
		}
		sc.close();
	}	
}

 

  • indexOf() :  전체 단어 중 문자열에서 몇번째에 해당 단어가 위치해있는지 확인
    • -1 : 일치하는 문자열 없음
    • 0이상 : 해당 인덱스에 문자열 존재
  • 배열에 없을 경우 처리 : 카운트 변수 따로 두고 0일때 문구 출력

😊응용문제

상품 목록 원시배열 java 파일
상품 DTO java 파일
상품 리스트 출력, 상품 검색 java 파일

상품 목록 원시배열 java 파일

package basic_html;

//각종 데이터 리스트 배열을 가지고 있는 클래스

public class datalist {
	public String[][] product() {
		String product[][] = { { "솔브리빙 논슬립 내구성 좋은 고급형 옷걸이", "Y", "37000", "30400", "17", "250" },
				{ "코끼리리빙 문걸이 전신거울", "Y", "265740", "258120", "2", "310" },
				{ "리빙스타 스탠드 행거 트리", "Y", "46700", "35900", "23", "16" },
				{ "스피드랙 업그레이드형 홈던트하우스 철제 선반", "N", "35900", "", "", "33" },
				{ "보노하우스 슬림서랍장 4단", "N", "30400", "", "", "70" },
				{ "보노하우스 맥스 서랍장 2단", "Y", "141000", "54900", "61", "120" },
				{ "스피드랙 업그레이드형 홈던트하우스 철제 선반 3단", "Y", "144160", "132740", "7", "44" },
				{ "스피드랙 업그레이드형 홈던트하우스 조립식 행거", "N", "30400", "", "", "57" },
				{ "리빙스타 모던 스탠드 행거 화이트", "Y", "29900", "23900", "20", "314" } };
		return product;
	}

	public String[][] notice() {
		String notice[][] = { { "“가장 널리 사용하는 LTS 버전은 자바 17”", "InfoWorld", "2025-01-08", "146" },
				{ "“입문자부터 숙련자까지” 주의해야 할 러스트 프로그래밍 실수 6가지”", "데크플레이션", "2024-12-20", "56" },
				{ "ASCII 3D 렌더러 만들기", "IT 뉴스", "2024-12-15", "98" },
				{ "깃허브 '코파일럿': 인공지능이 개발자를 대체할 수 있을까?", "BBC News 코리아", "2024-12-03", "41" },
				{ "‘펜데믹이 끝이 아니었다’··· IT가 직면한 11가지 이슈", " CIO Korea", "2024-12-03", "33" },
				{ "IT 개발자 몸값 더 오를 수밖에 없다", "ZD Net코리아", "2024-12-01", "269" } };
		return notice;
	}
}

 

상품 DTO java 파일

package basic_html;

import java.util.ArrayList;

//DTO(Data Transfer Object) => setter,getter => data => class 배열로 변환 및 java에서 값을 이관, 회신 
//VO (value object) => getter
//사수가 VO만들어 하면 dto 만드는거 getter만 체크해서 만들기 
/*
 DB에 설계
 product_nm : 상품명
 sales_use : 할인유무 (y,n)
 money : 상품가격
 sales_money : 할인가격
 discount : 할인율
 like : 추천수 
 */

//주의사항 new 잘쓰기 잘못쓰면 다 초기화됨 ㅠㅅㅠ 

//DTO 한세트  : 겟터 셋터 즉시실행 
public class product_DTO {
	String product_nm, sales_use, money, sales_money, discount, like;
	ArrayList<String> datamake= null;
	ArrayList<ArrayList<String>> alldata = new ArrayList<ArrayList<String>>();
	
	//2차배열을 생성하는 return 메소드
	public ArrayList<ArrayList<String>> alldata(){
		return this.alldata;
	}
	
	public ArrayList<String> datamake(){
		this.datamake = new ArrayList<String>();
		//getter 메소드를 1차 클래스 배열에 데이터 추가
		this.datamake.add(getProduct_nm());
		this.datamake.add(getSales_use());
		this.datamake.add(getMoney());
		this.datamake.add(getSales_money());
		this.datamake.add(getDiscount());
		this.datamake.add(getLike());
		return this.datamake;
	}
	
	public product_DTO(String result[][]) {	//즉시실행
		int w = 0;
		ArrayList<String> pd = null;
		while(w <result.length) {	//원시배열 그룹 갯수 만큼 반복
			//원시배열 값을 각 파트에 맞는 setter 메소드에 전달
			this.setProduct_nm(result[w][0]);
			this.setSales_use(result[w][1]);
			this.setMoney(result[w][2]);
			this.setSales_money(result[w][3]);
			this.setDiscount(result[w][4]);
			this.setLike(result[w][5]);
			pd = this.datamake();	//1차 클래스 배열을 로드하여 getter를 활성화 및 클래스 배열로 변환
			this.alldata().add(pd);	//1차 클래스 배열로 생성된 값을 2차 클래스 배열로 데이터 추가
			w++;
		}
		
	}

	public String getProduct_nm() {
		return product_nm;
	}

	public void setProduct_nm(String product_nm) {
		this.product_nm = product_nm;
	}

	public String getSales_use() {
		return sales_use;
	}

	public void setSales_use(String sales_use) {
		this.sales_use = sales_use;
	}

	public String getMoney() {
		return money;
	}

	public void setMoney(String money) {
		this.money = money;
	}

	public String getSales_money() {
		return sales_money;
	}

	public void setSales_money(String sales_money) {
		this.sales_money = sales_money;
	}

	public String getDiscount() {
		return discount;
	}

	public void setDiscount(String discount) {
		this.discount = discount;
	}

	public String getLike() {
		return like;
	}

	public void setLike(String like) {
		this.like = like;
	}

}

 

상품 리스트 출력, 상품 검색 java 파일

 

package basic_html;

import java.util.ArrayList;
import java.util.Scanner;

//상품 출력 파트 java코드 : 원시 배열 => Controller에서 DTO로 원시배열 전달 => DTO => 클래스배열로 변환 => Controller에서 출력 

public class arr15 {

	public static void main(String[] args) {
		Contoller_arr15 ca = new Contoller_arr15();
		ca.menu();

	}

}

/*
 * 응용문제 해당 프로세서에 검색 단어를 입력하면 해당 상품 정보가 출력되도록 코드를 수정하시오
 */

class Contoller_arr15 {
	// 해당 외부 클래스를 인스턴스를 객체화하여 필드에 적용
	datalist dl = new datalist();

	// DTO를 로드
	product_DTO dto = null;

	// 상품 데이터
	ArrayList<ArrayList<String>> pdlist = null;

	Scanner sc = null;
	
	

	public void menu() {
		this.product_list();
		this.sc = new Scanner(System.in);
		
		System.out.println("1. 상품 리스트 출력 \n2. 상품 검색\n3. 종료");
		int mn = sc.nextInt();
		if (mn == 1) {
			this.print_list();
			this.menu();
		} else if (mn == 2) {
			this.search_product();
			this.menu();
		} else if(mn==3) {
			System.out.println("종료합니다.");
			System.exit(0);
		}else {
			System.out.println("번호를 잘못입력하셨습니다.");
			this.menu();
		}

	}

	public void product_list() {
		String result[][] = this.dl.product();
		this.dto = new product_DTO(result);
		this.pdlist = this.dto.alldata();
	}
	
	public void print_list() {
		System.out.println(this.pdlist);
	}

	public void search_product() {
		this.sc = new Scanner(System.in);
		//검색어를 통하여 해당 상품 데이터를 출력하는 기능 추가
		System.out.println("검색 : ");
		String search = sc.next();	//사용자가 입력한 검색어
		
		int count = 0;	//해당 검색 단어에 맞는 상품 갯수를 체크
		int i = 0;
		while(i < this.pdlist.size()) {
			//각 그룹별 상품 배열번호에 맞는 조건 단어를 체크
			if(this.pdlist.get(i).get(0).indexOf(search) != -1){	//해당 단어가 포함된 경우 
				System.out.println(this.pdlist.get(i).get(0));	//조건에 맞는 상품 출력
				count++;
			}			
			i++;
		}
		if(count == 0) {	//검색된 상품이 없을 경우 
			System.out.println("상품이 존재하지 않습니다");
		}

	}
}
저작자표시 비영리 변경금지 (새창열림)
'Java' 카테고리의 다른 글
  • Java - DTO 응용
  • Java - 예외처리
  • Java - 클래스 배열
  • Java - 배열
9na0
9na0
응애
  • 9na0
    구나딩
    9na0
  • 전체
    오늘
    어제
    • 분류 전체보기 (210)
      • Web (118)
      • Java (28)
      • 데이터베이스 (14)
      • 세팅 (12)
      • 과제 (3)
      • 쪽지시험 (2)
      • 정보처리기사 (4)
      • 서버 (24)
  • 블로그 메뉴

    • 링크

      • 포폴
      • 구깃
    • 공지사항

    • 인기 글

    • 태그

      macbook pro m4
      file25
      file24
      noticewriteok
      net1
      re2
      net3
      notice_writer
      net5~10
      net4
      spring-boot
      re_java10
      file25_t
      exam1_1~10
      Oracle
      ab1
      datalist
      java_io1~10
      io_dto
      net2
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    9na0
    Java - DTO 활용
    상단으로

    티스토리툴바