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("상품이 존재하지 않습니다");
}
}
}