카페 웹사이트에서 메뉴를 크롤링해와서 샘플 데이터로 사용한다.
이때, 프로그램은 MVC 패턴에 따른다.
1. CoffeeDTO
package model;
public class CoffeeDTO {
private int num;
private String name;
private String detail;
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 getDetail() {
return detail;
}
public void setDetail(String detail) {
this.detail = detail;
}
@Override
public String toString() {
return "CoffeeDTO [num=" + num + ", name=" + name + ", detail=" + detail + "]";
}
}
먼저, 메뉴 번호(PK), 이름, 상세정보를 저장할 멤버변수를 선언해준 후, getter/setter 생성, toString() 오버라이딩까지 완료해준다.
크롤링한 데이터를 setter로 저장해줄거니까 기본 생성자 외에 따로 생성자는 생성 X
2. MemberDTO
package model;
public class MemberDTO {
private String mid;
private String mpw;
private String condition;
public String getCondition() {
return condition;
}
public void setCondition(String condition) {
this.condition = condition;
}
public String getMid() {
return mid;
}
public void setMid(String mid) {
this.mid = mid;
}
public String getMpw() {
return mpw;
}
public void setMpw(String mpw) {
this.mpw = mpw;
}
@Override
public String toString() {
return "MemberDTO [mid=" + mid + ", mpw=" + mpw + "]";
}
}
로그인 기능도 넣어줄거라서 멤버DTO에 아이디, 비밀번호, 그리고 DAO에서 검색 조건으로 사용할 condition도 선언해준 후, 전부 setter/getter 선언해준다. toString() 오버라이딩도.
3. 크롤링
package crawling;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import model.CoffeeDTO;
public class Crawling {
public static ArrayList<CoffeeDTO> makeSample() {
final String URL="https://www.coffeebeankorea.com/menu/list.asp?category=13";
Document doc=null;
try {
doc=Jsoup.connect(URL).get();
} catch (IOException e) {
e.printStackTrace();
}
ArrayList<CoffeeDTO> datas=new ArrayList<>();
int NUM=1001;
Elements elems=doc.select("span.kor");
Iterator<Element> itr=elems.iterator();
Elements elems2=doc.select("dd");
Iterator<Element> itr2=elems2.iterator();
while(itr.hasNext()) {
String name=itr.next().text();
///System.out.println(name);
String detail=itr2.next().text();
///System.out.println(detail);
itr2.next(); // 열량
itr2.next(); // 나트륨
itr2.next(); // 탄수화물
itr2.next(); // 당
itr2.next(); // 단백질
itr2.next(); // 카페인
itr2.next(); // 포화지방
///System.out.println();
CoffeeDTO data=new CoffeeDTO();
data.setNum(NUM++);
data.setName(name);
data.setDetail(detail);
datas.add(data);
}
for(CoffeeDTO coffee:datas) {
///System.out.println(coffee);
}
return datas;
}
}
import model.CoffeeDTO;
public class Crawling {
public static ArrayList<CoffeeDTO> makeSample() {
final String URL="https://www.coffeebeankorea.com/menu/list.asp?category=13";
coffeeDTO를 자료형으로 하는 ArrayList를 만들것이므로 import model.CoffeeDTO
makeSample()은 크롤링한 데이터를 가져오는 기능으로, 크롤링한 데이터는 다른 클래스에서 가져다 쓸 수 있어야 하므로 public으로 선언한다. 또, static으로 선언한 이유는 다른 클래스에서 크롤링 기능을 가져다 쓸 때 객체 생성 안하고도 바로 사용할 수 있도록 하기 위해서다. 크롤링 데이터는 특정 객체에 의존할 필요가 없어서 static으로 선언해 모든 곳에 활용할 수 있도록 한다.
URL은 변하지 않으므로 final로 선언 후 링크를 적어준다.
Document doc=null;
try {
doc=Jsoup.connect(URL).get();
} catch (IOException e) {
e.printStackTrace();
}
Document 자료형을 가지는 doc 변수를 선언해준 후,
Jsoup.connect(URL).get()을 통해 웹 사이트에 있는 HTML 데이터를 가져온다.
데이터를 가져오는 과정에서 문제가 생길 수도 있으니 예외처리도 해준다.
ArrayList<CoffeeDTO> datas=new ArrayList<>();
int NUM=1001;
크롤링한 데이터를 저장할 리스트를 하나 생성해준다.
그리고 메뉴에 고유한 번호를 부여하기 위한 변수 NUM도 선언해준다. NUM은 num 멤버변수에 사용할 용도로 선언.
Elements elems=doc.select("span.kor");
Iterator<Element> itr=elems.iterator();
Elements형 elems에 <span class= "kor"> 태그들을 가져와서 저장한다.
그리고 데이터를 하나씩 가져오기 위해서 이터레이터를 사용한다.
메뉴 이름들을 가져오는 코드.
Elements elems2=doc.select("dd");
Iterator<Element> itr2=elems2.iterator();
Elements형 elems에 <dd> 태그들을 가져와서 저장한다.
그리고 데이터를 하나씩 가져오기 위해서 이터레이터를 사용한다.
메뉴 상세 정보들을 가져오는 코드.
while(itr.hasNext()) {
String name=itr.next().text();
///System.out.println(name);
String detail=itr2.next().text();
///System.out.println(detail);
itr2.next(); // 열량
itr2.next(); // 나트륨
itr2.next(); // 탄수화물
itr2.next(); // 당
itr2.next(); // 단백질
itr2.next(); // 카페인
itr2.next(); // 포화지방
///System.out.println();
CoffeeDTO data=new CoffeeDTO();
data.setNum(NUM++);
data.setName(name);
data.setDetail(detail);
datas.add(data);
}
메뉴 이름과 메뉴 상세 정보를 가져왔다면 이제는 반복문을 통해 가져온 데이터들을 coffeeDTO 객체에 저장할 순서다.
다음 반복문은 다음 위치에 메뉴(span.kor)가 남아있을 때까지 반복한다.
String name=itr.next().text();
■ itr.next() : Iterator<Element>에서 다음 <span class="kor"> 태그를 가져온다.
■ next() : iterator의 메서드. 현재 위치에서 다음 요소로 이동하면서 해당 요소를 반환한다.
(현재 위치의 태그를 반환하고 다음 태그로 이동)
===> itr.next()를 통해 태그를 가져오고 가져온 태그에서 text()로 텍스트만 추출해서 name에 저장
String detail=itr2.next().text();
메뉴 설명도 메뉴 이름과 마찬가지로 동일한 방법으로 가져온다.
근데 이때, 메뉴 설명 뿐만 아니라 열량, 단백질 등의 영양 정보도 같이 dd코드에 포함되어있기 때문에 영양 정보도 같이 출력이 된다. 그러므로 메뉴 상세 정보 제외 dd 코드에 포함된 필요없는 정보들은 itr2.next()를 통해 건너뛴다.
CoffeeDTO data=new CoffeeDTO();
data.setNum(NUM++);
data.setName(name);
data.setDetail(detail);
datas.add(data);
}
그 후 가져온 데이터들을 저장할 data를 하나 선언해주고 set을 통해 가져온 데이터를 저장해준 후, 리스트에 추가한다.
메뉴-상세번호 한 묶음이 하나의 객체이고, data(객체) 여러 개가 리스트 datas 안에 저장되는 것!
for(CoffeeDTO coffee:datas) {
///System.out.println(coffee);
}
return datas;
그 후, 반복문을 통해 가져온 데이터들을 출력해준다.
3. Controller
package controller;
import java.util.ArrayList;
import crawling.Crawling;
import model.CoffeeDAO;
import model.CoffeeDTO;
import model.MemberDAO;
import model.MemberDTO;
import view.View;
public class Controller {
private CoffeeDAO coffeeDAO;
private MemberDAO memberDAO;
private View view;
private String member; // 로그인 여부(장바구니 정보와 같은 존재)
public Controller() {
this.coffeeDAO=new CoffeeDAO();
this.memberDAO=new MemberDAO();
this.view=new View();
this.member=null; // 처음에는 비로그인 상태
}
public void start() {
String mid=this.view.inputMid();
String mpw=this.view.inputMpw();
MemberDTO dto=new MemberDTO();
dto.setMid(mid);
dto.setMpw(mpw);
memberDAO.insert(dto);
while(true) {
if(this.member==null) {
this.view.printMenu01();
}
else {
System.out.println("CTRL 로그 : "+this.member+"님 로그인 중");
this.view.printMenu02();
}
int menu=this.view.inputMenu();
if(menu==0) {
break;
}
else if(menu==1) {
ArrayList<CoffeeDTO> samples=Crawling.makeSample();
for(int i=0;i<samples.size();i++) {
this.coffeeDAO.insert(samples.get(i));
}
}
else if(menu==2) {
this.view.printDatas(this.coffeeDAO.selectAll(null));
}
else if(menu==3) {
int num=this.view.inputNum();
String detail=this.view.inputDetail();
CoffeeDTO cdto=new CoffeeDTO();
cdto.setNum(num);
cdto.setDetail(detail);
coffeeDAO.update(cdto);
}
else if(menu==4) {
if(this.member == null) {
continue;
}
this.member=null;
}
else if(menu==5) {
if(this.member != null) {
continue;
}
mid=this.view.inputMid();
mpw=this.view.inputMpw();
MemberDTO mdto=new MemberDTO();
mdto.setCondition("LOGIN");
mdto.setMid(mid);
mdto.setMpw(mpw);
mdto=this.memberDAO.selectOne(mdto);
if(mdto != null) {
this.member=mdto.getMid(); // 비로그인 → 로그인 상태
}
}
else if(menu==6) {
while(true) {
mid=this.view.inputMid();
MemberDTO mdto=new MemberDTO();
mdto.setCondition("CHECK");
mdto.setMid(mid);
mdto=this.memberDAO.selectOne(mdto);
// dto에 데이터가 존재 ===>> 해당 아이디 사용중
// dto에 데이터가 없음 ===>> 해당 아이디 사용가능
if(mdto==null) {
// 장바구니에 제품추가 ===>> DB 사용 x CRUD x
// 중복검사 ===>> DB 사용 o CRUD o
break;
}
}
mpw=this.view.inputMpw();
MemberDTO mdto=new MemberDTO();
mdto.setMid(mid);
mdto.setMpw(mpw);
memberDAO.insert(mdto);
// PK값을 사용자가 지정하는 경우, "중복검사"
}
}
}
}
package controller;
import java.util.ArrayList;
import crawling.Crawling;
import model.CoffeeDAO;
import model.CoffeeDTO;
import model.MemberDAO;
import model.MemberDTO;
import view.View;
public class Controller {
private CoffeeDAO coffeeDAO;
private MemberDAO memberDAO;
private View view;
private String member; // 로그인 여부(장바구니 정보와 같은 존재)
public Controller() {
this.coffeeDAO=new CoffeeDAO();
this.memberDAO=new MemberDAO();
this.view=new View();
this.member=null; // 처음에는 비로그인 상태
}
우선은 import로 모델, 뷰를 모두 가져와주고 클래스 안에서는 dao, view 그리고 로그인 여부로 사용할 변수 member만 멤버변수로 선언해준다.
그리고 기본 생성자 안에서 각각 객체 생성해서 뷰, 모델에 있는 메서드를 사용할 수 있는 상태로 만들어주고, member 변수는 처음에 비로그인 상태로 시작해야 하므로 우선 null로 초기화해준다.

public void start() {
String mid=this.view.inputMid();
String mpw=this.view.inputMpw();
MemberDTO dto=new MemberDTO();
dto.setMid(mid);
dto.setMpw(mpw);
memberDAO.insert(dto);
현재 이 코드에서는 프로그램을 실행하자마자 아이디와 비번을 입력하여 무조건 회원가입 먼저 거치게 되어있다.
while(true) {
if(this.member==null) {
this.view.printMenu01();
}
else {
System.out.println("CTRL 로그 : "+this.member+"님 로그인 중");
this.view.printMenu02();
}
회원가입을 거친 후에는 메뉴 선택으로 넘어가는데, 이때 member의 상태가 null이면 비로그인 상태를 의미하므로 비로그인 메뉴 출력 메서드인 printMenu01()를 출력해주고, 만약 5번을 통해 로그인을 하여 member가 null이 아니게 되면 ㅇㅇ님 로그인 중이라는 메세지와 함께 로그인 뷰 메뉴 출력 메서드인 printMenu02()를 출력해준다.
int menu=this.view.inputMenu();
if(menu==0) {
break;
}
else if(menu==1) {
ArrayList<CoffeeDTO> samples=Crawling.makeSample();
for(int i=0;i<samples.size();i++) {
this.coffeeDAO.insert(samples.get(i));
}
}
else if(menu==2) {
this.view.printDatas(this.coffeeDAO.selectAll(null));
}
else if(menu==3) {
int num=this.view.inputNum();
String detail=this.view.inputDetail();
CoffeeDTO cdto=new CoffeeDTO();
cdto.setNum(num);
cdto.setDetail(detail);
coffeeDAO.update(cdto);
}
else if(menu==4) {
if(this.member == null) {
continue;
}
this.member=null;
}
사용자에게 입력을 받는 메서드를 가져온 후, 입력을 받아 메뉴에 들어간다.
만약 사용자가 0을 입력했다면 break로 프로그램을 종료한다.
1을 입력했을 때 : 샘플 데이터 생성
커피DTO를 자료형으로 하는 리스트 samples를 만들어서 크롤링한 데이터를 가져와 준다.
반복문을 samples 크기만큼 돌면서 samples에 하나씩 추가해준다.
2를 입력했을 때 : 샘플 데이터 출력
뷰의 printdatas 함수와 모델의 selectAll() 함수를 통해서 샘플 데이터를 전부 출력해준다.
*이때, 인자로 null을 보내는 이유 : 현재 매개변수 dto가 필요하지 않아서 그냥 null을 넘기는 것. dto는 단지 코드의 일관성을 위해 매개변수 형식을 맞추려고 사용하는 중이다.
3을 입력했을 때 : 상세설명 변경
사용자에게 숫자를 입력받아서 해당 번호 메뉴의 상세 정보를 변경한다.
번호 입력받고 상세 정보도 입력받아서
정보를 저장할 dto를 하나 생성한 후, 그 dto에 번호와 상세정보를 저장한다.
그리고 모델의 update 함수로 해당 dto를 넘겨준다.
4를 입력했을 때 : 로그아웃
로그인 하지 않은 상태라면(member가 null이라면) 아무것도 하지 않고 다음 반복으로 넘어간다. (이미 로그아웃 상태니까)
근데 로그인 상태라면 member를 null로 만들어 로그인 상태를 해제한다. (로그아웃 수행)
else if(menu==5) {
if(this.member != null) {
continue;
}
mid=this.view.inputMid();
mpw=this.view.inputMpw();
MemberDTO mdto=new MemberDTO();
mdto.setCondition("LOGIN");
mdto.setMid(mid);
mdto.setMpw(mpw);
mdto=this.memberDAO.selectOne(mdto);
if(mdto != null) {
this.member=mdto.getMid(); // 비로그인 → 로그인 상태
}
}
5를 입력했을 때 : 로그인
만약 로그인 상태라면 아무것도 하지 않고 다음 반복으로 이동
member가 null 상태라면 비로그인 상태이므로 아이디와 비밀번호를 사용자에게 입력받고
이 입력받은 정보를 저장할 dto를 하나 만든다.
condition을 이용해 해당 dto가 "로그인 요청"임을 표시해주고, 입력받은 아이디/비밀번호를 dto에 저장한다.
그리고 해당 dto의 정보가 db에 존재하는지 selectOne()을 통해 조회한다.
만약 존재하면 반환하고 없으면 null을 반환한다.
(존재하는 회원인지)
만약 일치하는 사용자가 있다면 비로그인에서 로그인 상태로 바꾼다.
(member 변수에 dto의 id를 저장한다)
else if(menu==6) {
while(true) {
mid=this.view.inputMid();
MemberDTO mdto=new MemberDTO();
mdto.setCondition("CHECK");
mdto.setMid(mid);
mdto=this.memberDAO.selectOne(mdto);
// dto에 데이터가 존재 ===>> 해당 아이디 사용중
// dto에 데이터가 없음 ===>> 해당 아이디 사용가능
if(mdto==null) {
// 장바구니에 제품추가 ===>> DB 사용 x CRUD x
// 중복검사 ===>> DB 사용 o CRUD o
break;
}
}
mpw=this.view.inputMpw();
MemberDTO mdto=new MemberDTO();
mdto.setMid(mid);
mdto.setMpw(mpw);
memberDAO.insert(mdto);
// PK값을 사용자가 지정하는 경우, "중복검사"
}
6번을 눌렀을 때 : 회원가입
아이디를 입력받는다. 아이디는 유효한 아이디를 입력할 때까지 계속 입력받아야 하므로 무한루프.
종료조건은 해당 아이디가 db에 존재하지 않을 때다.
정보를 저장할 dto를 하나 생성해주고
condition을 통해 "데이터 존재 체크" 임을 표시해준다.
입력받은 아이디를 저장해주고,
selectOne()을 통해 해당 아이디가 db에 존재하는지 확인한다.
db에 존재하지 않는 아이디일 경우 비밀번호를 입력받는다.
또, 정보 저장용 dto를 하나 생성해주고, 아이디와 비밀번호를 저장한다.
그리고 모델 insert 함수를 호출하여 회원가입을 진행한다.
5. View
뭐 뷰는.. 다음과 같다.
package view;
import java.util.ArrayList;
import java.util.Scanner;
import model.CoffeeDTO;
public class View {
private static final int MAX=6;
private static final Scanner sc=new Scanner(System.in);
public void printMenu01() { // 비로그인 상태
System.out.println("5. 로그인");
System.out.println("6. 회원가입");
System.out.println("0. 종료");
}
public void printMenu02() { // 로그인 상태
System.out.println("1. 샘플데이터생성");
System.out.println("2. 샘플데이터출력");
System.out.println("3. 상세설명변경");
System.out.println("4. 로그아웃");
}
public String inputMid() {
System.out.print("아이디입력 >> ");
String mid=sc.next();
return mid;
}
public String inputMpw() {
System.out.print("비밀번호입력 >> ");
String mpw=sc.next();
return mpw;
}
public void printDatas(ArrayList<CoffeeDTO> datas) {
if(datas.size()<=0) {
System.out.println("샘플데이터없음!");
return;
}
for(CoffeeDTO data:datas) {
System.out.println(data);
}
}
public int inputNum() {
System.out.print(">> ");
int num=sc.nextInt();
return num;
}
public String inputDetail() {
System.out.print(">> ");
String detail=sc.next();
return detail;
}
public int inputMenu() {
int num;
while(true) {
try {
System.out.print(">> ");
num=sc.nextInt();
if(0<=num && num<=MAX) { // 하드코딩 제거
break;
}
System.out.println("범위확인!");
}
catch(Exception e) {
sc.nextLine();
System.out.println("자료형확인!");
continue;
}
}
return num;
}
}
6. CoffeeDAO
package model;
import java.util.ArrayList;
public class CoffeeDAO {
private ArrayList<CoffeeDTO> datas;
private int NUM;
public CoffeeDAO() {
this.datas=new ArrayList<>();
this.NUM=1010;
}
public ArrayList<CoffeeDTO> selectAll(CoffeeDTO dto) {
ArrayList<CoffeeDTO> datas=new ArrayList<>();
for(int i=0;i<this.datas.size();i++) {
CoffeeDTO data=new CoffeeDTO();
data.setNum(this.datas.get(i).getNum());
data.setName(this.datas.get(i).getName());
data.setDetail(this.datas.get(i).getDetail());
datas.add(data);
}
return datas;
}
private CoffeeDTO selectOne(CoffeeDTO dto) {
return null;
}
public boolean insert(CoffeeDTO dto) {
try {
CoffeeDTO data=new CoffeeDTO();
data.setNum(this.NUM++);
data.setName(dto.getName());
data.setDetail(dto.getDetail());
this.datas.add(data);
}
catch(Exception e) {
return false;
}
return true;
}
public boolean update(CoffeeDTO dto) {
for(int i=0;i<this.datas.size();i++) {
if(this.datas.get(i).getNum()==dto.getNum()) {
this.datas.get(i).setDetail(dto.getDetail());
return true;
}
}
return false;
}
private boolean delete(CoffeeDTO dto) {
return false;
}
}
public class CoffeeDAO {
private ArrayList<CoffeeDTO> datas;
private int NUM;
public CoffeeDAO() {
this.datas=new ArrayList<>();
this.NUM=1010;
}
커피DTO를 자료형으로 하는 리스트 datas를 하나 만들어주고, 번호를 지정할 NUM도 하나 선언해준다.
생성자 안에서는 리스트를 빈 리스트로 초기화해주고, NUM은 1010으로 시작하도록 기본 설정해준다.
public ArrayList<CoffeeDTO> selectAll(CoffeeDTO dto) {
ArrayList<CoffeeDTO> datas=new ArrayList<>();
for(int i=0;i<this.datas.size();i++) {
CoffeeDTO data=new CoffeeDTO();
data.setNum(this.datas.get(i).getNum());
data.setName(this.datas.get(i).getName());
data.setDetail(this.datas.get(i).getDetail());
datas.add(data);
}
return datas;
}
1) selectAll()
인자는 메서드 시그니쳐의 일관성을 위해 CoffeeDTO dto로 통일.
정보를 복사할 리스트를 하나 만들어주고
리스트 크기만큼 돌면서 복사해줄건데,
먼저 객체를 저장할 data를 하나 선언해주고
번호, 이름, 상세정보를 가져와서 data 객체를 하나 만들어준다.
그리고 그 객체들(data)을 리스트 datas에 넣어준다.
리스트 반환.
2) selectOne() , delete()
private CoffeeDTO selectOne(CoffeeDTO dto) {
return null;
}
쓰지 않는 상태이니 private로 막아둔다.
3) insert()
public boolean insert(CoffeeDTO dto) {
try {
CoffeeDTO data=new CoffeeDTO();
data.setNum(this.NUM++);
data.setName(dto.getName());
data.setDetail(dto.getDetail());
this.datas.add(data);
}
catch(Exception e) {
return false;
}
return true;
}
역시나 메서드 시그니쳐 통일.
정보를 저장할 data 하나 선언해주고
번호, 이름, 상세 설명을 받아와서 저장해준 후 datas에 넣어준다.
이때, 번호는 1씩 늘어나야 하므로 NUM++ 해주고, 데이터를 가져오는 과정에서 예외가 발생할 수도 있으니 try-catch문을 이용해서 만약 예외가 발생하면 false를, 발생하지 않으면 true를 반환해준다.
4) update()
public boolean update(CoffeeDTO dto) {
for(int i=0;i<this.datas.size();i++) {
if(this.datas.get(i).getNum()==dto.getNum()) {
this.datas.get(i).setDetail(dto.getDetail());
return true;
}
}
return false;
}
리스트 크기만큼 돌면서 입력받은 번호에 해당하는 번호가 있다면
해당 번호의 상세 설명을 입력받은 상세 설명으로 바꾸고 true를 반환한다.
만약 없다면 false 반환.
7. MemberDAO
package model;
import java.util.ArrayList;
public class MemberDAO {
private ArrayList<MemberDTO> datas;
public MemberDAO() {
this.datas=new ArrayList<>();
}
private ArrayList<MemberDTO> selectAll(MemberDTO dto) {
return null;
}
public MemberDTO selectOne(MemberDTO dto) {
MemberDTO data=null;
if(dto.getCondition().equals("LOGIN")) {
for(int i=0;i<this.datas.size();i++) {
if(dto.getMid().equals(this.datas.get(i).getMid()) && dto.getMpw().equals(this.datas.get(i).getMpw())) { // mid,mpw 둘다 같다면
data=new MemberDTO();
data.setMid(dto.getMid());
data.setMpw(dto.getMpw());
break;
}
}
}
else if(dto.getCondition().equals("CHECK")) {
for(int i=0;i<this.datas.size();i++) {
if(dto.getMid().equals(this.datas.get(i).getMid())) {
data=new MemberDTO();
break;
}
}
}
return data;
}
public boolean insert(MemberDTO dto) {
try {
MemberDTO data=new MemberDTO();
data.setMid(dto.getMid());
data.setMpw(dto.getMpw());
this.datas.add(data);
}
catch(Exception e) {
return false;
}
return true;
}
private boolean update(MemberDTO dto) {
return false;
}
private boolean delete(MemberDTO dto) {
return false;
}
}
여기서도 리스트 하나 만들어주고 생성자 안에서 초기화한다.
selectAll(), update(), delete()는 사용하지 않으므로 private로 처리하고 넘어간다.
1) selectOne()
public MemberDTO selectOne(MemberDTO dto) {
MemberDTO data=null;
if(dto.getCondition().equals("LOGIN")) {
for(int i=0;i<this.datas.size();i++) {
if(dto.getMid().equals(this.datas.get(i).getMid()) && dto.getMpw().equals(this.datas.get(i).getMpw())) { // mid,mpw 둘다 같다면
data=new MemberDTO();
data.setMid(dto.getMid());
data.setMpw(dto.getMpw());
break;
}
}
}
else if(dto.getCondition().equals("CHECK")) {
for(int i=0;i<this.datas.size();i++) {
if(dto.getMid().equals(this.datas.get(i).getMid())) {
data=new MemberDTO();
break;
}
}
}
return data;
}
selectOne()은 총 2번 사용한다.
아이디 중복 검사 할 때, 그리고 로그인 할 때.
먼저, 로그인 할 때는
리스트를 순회하면서 입력한 아이디와 비밀번호가 둘 다 db 상의 정보와 동일할 때
정보 저장용 dto를 생성하고 거기에 아이디와 비밀번호를 담아서 반환한다.
만약 존재하지 않다면 null 상태 그대로 반환.
다음으로, 아이디 중복검사 할 때는
리스트를 순회하면서 입력한 아이디가 이미 존재한다면
data를 생성하고 검색을 종료한다.
만약 존재하지 않는다면 null을 반환하여 회원가입을 진행할 수 있는 상태가 된다.
'IT > JAVA' 카테고리의 다른 글
MVC 프로젝트 - 도서관 프로그램(VIEW 코드) (1) | 2025.02.11 |
---|---|
자바 복습 (0) | 2025.02.11 |
웹 크롤링 (0) | 2025.02.10 |
MVC 패턴 복습 2 (0) | 2025.02.09 |
MVC 패턴 - Model 분석 (0) | 2025.02.08 |