메모장

[실습문제] 회원 상품구매 MVC패턴 2 본문

JAVA/[실습문제]

[실습문제] 회원 상품구매 MVC패턴 2

Itchild 2024. 4. 8. 17:42
728x90
반응형

 

저번시간에 이어서

  • 로그인, 로그아웃
  • 마이페이지
  • 회원탈퇴

 

항목을 추가 하였다 !

 

client 부분은 고정이기때문에 model 부분 중 Member DAO 부분과 controller 부분, client view 부분을 추가 하였다 !

Model - Member DAO

 

package model;

import java.util.ArrayList;

// 구현할 기능
// 회원목록출력
// 회원가입,로그인,로그아웃,마이페이지,회원탈퇴
public class MemberDAO {
	private ArrayList<MemberVO> datas;
	public MemberDAO() {
		datas=new ArrayList<MemberVO>();
		datas.add(new MemberVO("admin","1234","관리자")); // 아이디, 비밀번호, 
		datas.add(new MemberVO("coding_helper","timo","작은 티모"));
	}

	public ArrayList<MemberVO> selectAll(MemberVO mVO){
		return datas; // 내가 가진 현재 회원목록 반환 하면 된다
	}
	public MemberVO selectOne(MemberVO mVO){
		// 받은 값이 내 리스트에 있어 ?
		for(MemberVO v : datas) { // 전체를 쭉 훑어 봤을때
			if(mVO.getMid().equals(v.getMid())) {// 내가 받은 값이 배열에 있어 ? // 혹시 내가 받은값이 datas에 있어 ?
				if(mVO.getMpw().equals(v.getMpw()))  {//비밀번호 확인해보기
					return v;  //걔 반환해 
				}
				System.out.println(" 로그: MemberDAO: selectOne(): 비밀번호가 일치하지않습니다!");
				return null; // 비밀번호가 일치하지 않을때 
			}
		}
		System.out.println(" 로그: MemberDAO: selectOne(): 해당 아이디가 없습니다!");
		return null; // 아이디가 등록 된 것이 없을때
	}

	public boolean insert(MemberVO mVO) {  // C -> M 정보로 회원가입 가능 ?
		//mVO 가 의미하는것 == 회원가입할 정보 <--- 로직에 들어갈 내용 //mVO -> 나 회원가입 시켜줘
		//mVO를 내가가진 datas 에 넣어줄 예정
		//PK 중복검사를 해야하고, 성공하면 add()

		// 중복 검사를 꼭 하자 !!!
		// 회원가입 시켜주세요 ~~ 하면 -> 일단 아이디 중복 검사 부터 해
		// 내가 갖고있는걸 이거인지 저거인지 다 ~~~ 살펴봐야 아는 상황 --> flag 로직을 써야한다
		//		if(혹시 PK가 중복되었어?) { 
		//			return false; //실패하면 false 반환
		//		}
		//		datas에 mVO정보를 저장 add() // 중복검사가 통과가 되면 
		//		return true;


		boolean flag = false; // 처음부터 끝까지 돌면서 나와같은 아이디가 있는지 체크하겠습니다
		for(MemberVO data : datas) { // 아이디가 같은지 볼려면 데이터를 다 봐야한다. for문으로 데이터 다 ~ 보기 
			if(data.equals(mVO)) { //객체비교는 equals //오버라이딩 하러 가자 //data == mVO<--- 객체비교를 연산자로 하고 있음 xx
				// 하나라도 회원가입한 정보랑 같아 ?
				flag = true;
				System.out.println(" 로그: MemberDAO: insert(): 아이디 중복"); // 로그 달아줌 
				break;
			}
		}
		if(flag) { // PK가 중복 되었어? // 중복검사를 일단 하고 
			return false;
		}
		//if를 들어가지 않아 잘 내려왔다면 
		//datas 에 새로운 사람을 추가 하게 되고 // 새로운 아이디, 새로운 비번, 새로운 닉네임
		datas.add(new MemberVO(mVO.getMid(),mVO.getMpw(),mVO.getName())); // 객체 new 써주고 객체
		//새로운사람을 만들적에(인자였던 mVO에서 추출);	
		return true;
		//datas 에 mVO정보를 저장 add() // 중복검사 성공하면 저장을 해
		//mVO 를 datas 에 넣어줄 예정
		// 인자였던 mVO 순으로 꺼내면 됨 
		/* 51 번라인 설명 
		 *1) datas.add(new MemberVO());
		 * -> datas DB공간에 new 새로운 데이터를 추가 // new 객체
		 *2)   MemberVO(데이터1,데이터2,데이터3)
       		-> 데이터들을 mVO에서 추출하면됨
		 */



	}
	public boolean update(MemberVO mVO) {
//		정보를 입력받아서 새로운 비밀번호로 바꿔줘
//		전체를 돌려봤을때 입력한 정보와 내가 입력한 번호가 같으면 
//		새로운 비밀번호로 바꿔줘 
		
		for (int i = 0; i < datas.size(); i++) {
			if(datas.get(i).equals(mVO)) { // 새로운 것으로 변경
				datas.get(i).setMpw(mVO.getMpw()); // 기존것을 다시 설정 
				return true;
			}
		}
		return false;
	}
	public boolean delete(MemberVO mVO) {
		for (int i = 0; i < datas.size(); i++) {
			if(datas.get(i).equals(mVO)) { //전체를 돌렸을때  입력한 정보와 내가 가진 정보의 인덱스가 일치하면 
				datas.remove(i); // 삭제 한다.
				return true;
			}
		}
		return false; // 그렇지 않을시 false이다.
	}
}
 

View - ClientView

 

package view;

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

import model.MemberVO;
import model.ProductVO;

// 회원가입C,로그인R,로그아웃R,마이페이지U,회원탈퇴D
// 목록출력,목록검색_이름,목록검색_가격
public class ClientView {
	private static Scanner sc=new Scanner(System.in);

	public int printClientMenu01() { // 로그인 모드 
		// 로그인 하지 않은 사용자는 상품을 구매할 수 없다.
		System.out.println();
		System.out.println("=== 프 로 그 램 모 드 ===");
		System.out.println("1. 회원가입");
		System.out.println("2. 로그인");
		System.out.println("3. 프로그램 종료");
		System.out.print("입력) ");
		return sc.nextInt(); 
	}
	public MemberVO signUp() { // 회원가입할 시에 안내 해줘야 하는것 
		System.out.println();
		System.out.println("=== 회 원 가 입 ===");
		System.out.print("아이디입력) ");
		String mid=sc.next();
		System.out.print("비밀번호입력) ");
		String mpw=sc.next();
		System.out.print("이름입력) ");
		String name=sc.next(); // 아이디 비밀번호 이름 까지 입력해서 
		return new MemberVO(mid,mpw,name); // 그것을 전달 하는것 까지 
		// vo는 단순 자료형이다 ~ view에서 활용가능, DAO는 view에서 호출 안됨 
	}
	public void signUpTrue() {
		System.out.println();
		System.out.println("회원가입 성공!");
	}
	public void signUpFalse() {
		System.out.println();
		System.out.println("회원가입 실패...");
	}
	public String getMpw() { // 비밀번호를 입력 받는다 // 회원탈퇴시 한번더 비밀번호 확인을 위해서
		System.out.println();
		System.out.println("=== 비 밀 번 호 확 인 ===");
		System.out.print("비밀번호입력) ");
		String mpw=sc.next();
		return mpw;
	}
	public String printMpw(MemberVO mVO) { // 입력값을 mVO로 받으면 밑에서 mVO를 사용할 수 있다!
		System.out.println();
		System.out.println("=== 마 이 페 이 지 ===");
		System.out.println(mVO.getName()+"님의 현재 비밀번호는 ["+mVO.getMpw()+"]입니다.");

		while(true) { // 올바른 비밀번호를 입력 할때 까지 
			System.out.print("새 비밀번호입력) ");
			String mpw=sc.next();
			if(!mpw.equals(mVO.getMpw())) { // 전 비밀번호와 일치하지 않을때 !
				return mpw;
			}
		}		
	}
	public void printFalse() {
		System.out.println();
		System.out.println("비밀번호 불일치...");
	}
	public void printMemberDeleteTrue() {
		System.out.println();
		System.out.println("회원탈퇴 성공!");
	}
	public void printMemberDeleteFalse() {
		System.out.println();
		System.out.println("회원탈퇴 실패...");
	}
	public void printMemberUpdateTrue() {
		System.out.println();
		System.out.println("비밀번호 변경 성공!");
	}
	public void printMemberUpdateFalse() {
		System.out.println();
		System.out.println("비밀번호 변경 실패!");
	}

	public MemberVO signIn() {
		System.out.println();
		System.out.println("=== 로 그 인 ===");
		System.out.print("아이디입력) ");
		String mid=sc.next();
		System.out.print("비밀번호입력) ");
		String mpw=sc.next();
		return new MemberVO(mid,mpw,null);
	}

	public void signInTrue() {
		System.out.println();
		System.out.println("로그인 성공!");
	}
	
	public void signInFalse() {
		System.out.println();
		System.out.println("로그인 실패...");
	}
	
	public void printClientEnd01() {
		System.out.println();
		System.out.println("=== 프 로 그 램 종 료 ===");
	}

	public int printClientMenu02(MemberVO mVO) { // 로그인 하면 들어오는 상태 
		System.out.println();
		System.out.println("=== 사 용 자 모 드 ===");
		System.out.println(" 현재 로그인한 사용자이름 ["+mVO.getName()+"]");
		System.out.println("1. 로그아웃(사용자모드 종료)");
		System.out.println("2. 마이페이지");
		System.out.println("3. 회원탈퇴(사용자모드 종료)");
		System.out.println("4. 상품목록출력");
		System.out.println("5. 상품목록검색_이름으로 검색");
		System.out.println("6. 상품목록검색_가격으로 검색");
		System.out.println("7. 상품검색_최고가 검색"); // 하나를 검색
		System.out.println("8. 상품검색_최저가 검색");
		System.out.print("입력) ");
		return sc.nextInt();
	}

	public ProductVO getSearchFilter() { // 최저부터 최고 까지 두개를 입력받음 
		System.out.println();
		System.out.println("=== 가 격 으 로 검 색 ===");
		System.out.print("최저가격입력) ");
		int minPrice = sc.nextInt();
		System.out.print("최고가격입력) ");
		int maxPrice = sc.nextInt();
		// 인자가 두개를 반환하는 행위는 못하기 때문에
		//pVO에 담아서 넘겨준다.
		// 안쓰는 공간을 활용하여 minPrice랑 maxPrice 를 두개 한번에 넘겨준다.		
		ProductVO pVO=new ProductVO(0,"필터검색",minPrice,maxPrice);
		// searchCondition
		return pVO;
	}

	public String getSearchContent() {// 그렇다면 검색어 넣으렴 
		System.out.println();
		System.out.println("=== 이 름 으 로 검 색 ===");
		System.out.print("검색어입력) ");
		String name=sc.next();
		return name;

	}

	public void printProduct(ProductVO pVO) {
		System.out.println();
		if(pVO==null) {
			System.out.println("=== 출 력 할 상 품 없 음 ===");
			return;
		}
		System.out.println("=== 상 품 출 력 ===");
		System.out.println(pVO);
	}

	public void printProductList(ArrayList<ProductVO> pdatas) {//내가 목록을 출력하고 싶은 사람이야  //목록이 있어야 보여줄것 아니냐  목록을 받아야 보여준다.
		System.out.println();
		if(pdatas.isEmpty()) { // 혹시 비어있니 ? // 사용자편의성고려(UI/UX)
			System.out.println("=== 출 력 할 상 품 없 음 ===");
			return;
		}
		System.out.println("=== 상 품 목 록 출 력 ===");
		for(ProductVO data:pdatas) {
			System.out.println(data); // .toString()은 자동호출됩니다!
		}
	}
	public void logout() {
		System.out.println();
		System.out.println("=== 로 그 아 웃 ===");
	}
	public void printClientEnd02() {
		System.out.println();
		System.out.println("=== 사 용 자 모 드 종 료 ===");
	}
}
 

Controller - ProductController

 

package ctrl;

import java.util.ArrayList;

import model.MemberDAO;
import model.MemberVO;
import model.ProductDAO;
import model.ProductVO;
import view.AdminView;
import view.ClientView;

public class Ctrl { // DAO ,view 두개 
	private MemberDAO mDAO; // 회원가입한 사용자
	private ProductDAO pDAO; // 상품 
	private AdminView admin;
	private ClientView client;
	private MemberVO member; // 현재 로그인한 회원정보 // 멤버변수로 관리 해볼수 있다.
	//	private CommonView common;// 두개를 다 이용할때 common 을 붙임 

	public Ctrl() { 
		mDAO=new MemberDAO();
		pDAO=new ProductDAO();
		admin=new AdminView();
		client=new ClientView();
		member=null; // 자동로그인을 해제하면 이게 초기화가 된다  
		// 세션 로그인 데이터 라고 부름 ~ 나중에 웹가서 배우기  
		// 프로그램을 실행한다고 해서 , 갑자기 로그인 되지는 않기 때문에 null 로 초기화 
	}

	public void startApp() {
		while(true) {
			int action=client.printClientMenu01();
			if(action==1234) { // 관리자 모드 진행  1234야?
				while(true) { // 관리자 모드 진입
					action=admin.printAdminMenu();
					if(action==1) { // 회원목록 출력
						//1. 사용자가 관리자인 상황 
						//if(action==1) // 2. 관리자가 회원목록볼래~

						//model.selectAll(); // 모델.회원목록줘(); 
						// 3. V가 C한테 말합니다. 회원목록보겠다는데?
						// 4. C가 아, 회원목록데이터가 필요하구나? ㅇㅋ
						// 5. M한테 회원목록 좀 줘~
						// 6. M이 selectAll()합니다.

						ArrayList<MemberVO> mdatas=mDAO.selectAll(null); //selectAll하려면
						//인자가 있어야 하는데 넘겨줄 인자가 우리에겐 없기 때문에 그냥 null로 한다.
						// 7. AL<MVO>가 반환되고 C는 그걸-

						//view.회원 목록 출력(datas);
						admin.printMemberList(mdatas); // view 목록
						// 8. -V한테 줍니다.


						// 줄인 코드
						//admin.printMemberList(mDAO.selectAll(null));
					}
					else if(action==2) { // 관리자 모드 종료 
						admin.printAdminEnd();
						break;
					}
				}
			}
			else if(action==1) { // 회원가입
				//				int action=client.printClientMenu01(); 
				// 1. 사용자가 CONSOLE에 회원가입 할래 1번 입력
				//2. V는 입력한 값을 C한테 전달 -> 전달된값 action 

				//				else if(action==1) 
				// 3. C는 아 회원가입 하고 싶구나 ? ㅇㅋ


				// 아이디,비밀번호, 이름 입력까지 해서 그것을 전달 하는 것 까지 
				MemberVO mVO = client.signUp(); // 정보들을 mVO에 담는다.
				//회원가입 정보 = view.회원가입화면(); 뷰야 회원가입 화면 (); 띄워야지 
				// 그러면 회원가입 정보를 받아와야지 
				//4.C는 V한테 회원가입할 정보를 입력받아오라고 지시  // client.signup 
				//5.V는 사용자한테 회원가입 창 보여줌 // 회원가입 입력을 받도록 세팅
				//6.사용자는 정보를 입력  // 사용자가 입력을 완료 
				//7.V는 사용자가 입력한 정보를 C한테 전달  signup에서 수행한 것들 mVO에 담음 // 회원가입 정보

				// 회원가입이니까 mDAO가 맞다.
				boolean flag = mDAO.insert(mVO); // true로 해놓은 상태 // 회원가입이니까 mDAO와 pDAO 둘중 ---> mDAO가 맞다.
				//boolean 성공실패여부 = mDAO.insert(a);
				//8.C는 이 정보를 M한테 전달  // model아 회원가입 정보좀 줘야겠다. // model.회원가입(a); // 회원가입은 == insert에 해당
				//9.M은 회원가입을 수행 ---> model insert쪽에서 기능 수행
				// boolean 성공실패 여부 = model.insert(a);
				//10.M은 insert()가 잘 되었는지 아닌지를 T,F 반환 ---> boolean


				if(flag) {//성공했어 ?
					client.signUpTrue();//view.성공화면();
				}else {
					client.signInFalse();// view.실패화면();
				}
				//11.C는 결과에 따라 맞는 V화면을 보여줄수 있도록 지시
				//12.사용자는 V가 보여주는 화면에 보게됨 


				// 코드를 줄이면 이렇게 변함 
				//				if(mDAO.insert(client.signUp())) {
				//					client.signUpTrue();
				//				}
				//				else {
				//					client.signUpFalse();
				//				}
			}
			else if(action==2) { // 로그인

				// 아이디입력해봐! 라고 V가 사용자에게 요청
				// 비밀번호도 같이 입력해
				MemberVO mVO = client.signIn(); //로그인 할거야 // 아이디랑 비번 입력하는 메서드 
				// 회원가입 할때도 썼던 메서드


				member=mDAO.selectOne(mVO); // model을 실행 시켜야 할 때
				// 있는지 없는지 좀 알려줘  // 등록된 정보에 있는 애인지 알려줘
				// member에는 유효한 사용자 정보 or null
				// 유효한 사용자 정보 == "현재 로그인한 회원"---> member // 반환된 애가 현재 로그인 한 애 
				// C는 이 정보가 있는지, 그리고 맞는지(==유효한지)
				// 위의 여부를 M한테 판단을 부탁함
				//  --->> selectOne() // 로그인할때 등록된 아이디 인지 아닌지


				if(member==null) { //없는 아이디랑 비번이면 // 로그인이 안된것 
					//null을 반환 == 없거나, 비밀번호가 틀림!
					// -> 로그인 실패 V
					//  => 프로그램 모드에 계속 있어야함...
					client.signInFalse();
					continue;
					// 프로그램 모드에 계속 존재
				}
				//로그인 성공
				client.signInTrue(); // 로그인이 된것 
				// M은 VO를 반환 == 존재하는 회원
				// -> 로그인 성공 V
				//  => 다음 스텝으로 이동

				// 새로운 루프 시작 
				while(true) { // 로그인을 정상적으로 진행 됐다면 // 사용자 모드로 진입 
					action=client.printClientMenu02(member); // 로그인된 사용자의 정보를 넘겨 받았다.
					if(action==1) { // 로그아웃
						// 현재 로그인한 회원 이기 때문에 

						// 사용자가 로그아웃을 원하면, 
						//C에 mdata가 현재 존재하는데, 이걸 
						//제거하고 

						//로그아웃이 되었음을 사용자에게 알려주자 !
						//만약 DB가 건드려 진다면 v->c->m->c->v 이지만 
						//로그아웃은 M을 부르는 일이 없다 . 
						//로그아웃은 DB를 건드리지 않고 m부분을 건드리지 않기 때문에 V->C->V로 진행 

						client.logout(); // 로그아웃합니다
						client.printClientEnd02(); // 사용자 모드 종료
						break;
					}
					else if(action==2) { // 마이페이지
						// 마이페이지
						//사용자가 마이페이지를 원하여 action으로 들어온다.
						// 뷰가 비번을 입력받음
						//client.printMpw(); // 이걸 받아서 어디다 저장하고 넘겨야지 !
						String mpw = client.printMpw(member);   
						// String 으로 반환 했으니 무조건 String에 담아
						//v에서 변경할 정보를 입력받는다.
						//(비밀번호 변경 시 비밀번호를 입력받는 메서드 활용)

						//뷰가 비번을 c에게 전달. 객체 하나 생성
						MemberVO mdata = new MemberVO(member.getMid(),mpw,null); 
						// c는 이걸 m에게 묶어서 보낼건데 
						// 일단 객체 공간에 담는다.
						// 전달만 할때
 
                        boolean flag=mDAO.update(mdata); // model을 실행 시켜야 할때 
						//c->model로 묶어서 보낸 정보를 m.update()수행해달라고 부탁함
						//m-> c 로 다시 전달해준다.
						if(flag) { // 성공하면 //비밀번호 변경 성공 !
							client.printMemberUpdateTrue();
						}
						else {//비밀번호 변경 실패 !
							client.printMemberUpdateFalse();
						}
					}

					//c에서 성공시 비밀번호 변경 성공 !
					//실패시 비밀번호 변경 실패 띄우기 .


					else if(action==3) { // 회원탈퇴
						// 현재 로그인 한 상황 -> 이미 멤버에 들어가있는 상황
						//						String mpw = view.비밀번호 입력해봐 (); // 비밀번호를 입력 하면
						String mpw = client.getMpw(); // view에게 비밀번호만 다시 입력받도록 값을 받는다.
						if(!member.getMpw().equals(mpw)) { // !flag인 상황 // 같은지 아닌지 체크 
							// 현재 로그인한 사람의 비밀번호와 사용자가 입력한 비밀번호를 확인하는 로직
							// 같은 비밀번호가 아니라고 했을시
							// 비밀번호가 불일치 한다고 생각 하고 not! 을 붙임 
							//비밀번호 불일치
							client.printFalse(); // 비밀번호 실패 메세지 띄움 
							continue; // 비밀번호가 일치 않았다면 ~ continue
						}
						// if 에 안들어갔다면 일치! 이제 삭제 진행 
						//						 mDAO.delete(member)  << 이거 자체가 if문에서 수행되어버리기때문에
						//						 boolean flag=mDAO.delete(member);
						//						 if(flag) 와 동일하기때문에 수행됩니다
						if(!mDAO.delete(member)) { // !flag 인 상황 //model.delete(지금 로그인 한 사람)이 잘 안됐다면 false
							//회원 정보 삭제가 안됐다면 
							client.printMemberDeleteFalse(); // 회원 탈퇴 실패
							continue; // 의문 : false가 나올확률이 있을까 ? 굉장히 희박 
							// 근데 혹시나 해커가 뚫을 수도 있을경우를 대비해 유효성을 만들자
						}
						client.printMemberDeleteTrue();  // 회원 탈퇴 성공
						client.printClientEnd02(); //사용자 모드 종료
						break;
					}
					// 잘됐으면 true 

					// 비밀번호를 한번더 확인 하는 로직이 있으면 더 좋다  // 회원탈퇴를 하려면 비밀번호를 입력해 
					// 비밀번호가 불일치 (본인이 아닐수 있을때) -> 회원탈퇴x

					// 비밀번호 일치 시 
					// -> 로그인이 되어있는 회원을 
					// 전체 회원 목록에서 제거



					else if(action==4) { // 상품목록출력 // 상품은 그냥 보여주기만 하면됨 
						// M에서 받아서 C 출력 
						ArrayList<ProductVO> pdatas=pDAO.selectAll(null);
						client.printProductList(pdatas); // 회원목록출력이랑 맥락이 같다.
					}
					else if(action==5) { // 상품목록검색_ 이름으로 검색 // 검색은 상품의 이름을 입력받아서 보여줘야 된다는 차이점이 있다.
						String name = client.getSearchContent(); // 검색어를 뷰로 부터 받아오기
						// 검색어를 뭘 받아올래 ?
						// 그 검색어를 모델 한테 넘겨주기 
						ProductVO pVO = new ProductVO (0,name,0,0); // 우리는 이름만 필요하니까 
						pDAO.selectAll(pVO);
						ArrayList<ProductVO> pdatas = pDAO.selectAll(pVO);
						client.printProductList(pdatas);

					}
					else if(action==6) { // 상품목록검색_가격으로 검색
						//사용자가 V에서 검색을 하고싶다고 말하면서 버튼을 누른다.
						// 무엇을 검색으로 받아올래 ? price
						// C가 V한테 검색할 것을 받아오라고 한다
						// V는 사용자에게 검색에 대해 가격을 입력받아온다.
						// V가 가격을 받아와 C에게 전달한다.
						ProductVO pVO=client.getSearchFilter();

						// C는 M에게 넘겨서 이 가격에 대해 가장 비싼 상품검색해줘라고 전달한다
						pDAO.selectAll(pVO);
						// M은 가격을 입력받아 그 가격에 대한 정보를 검색한다.
						// M에서 검색한 정보를 C에게 전달한다.
						ArrayList<ProductVO> pdatas=pDAO.selectAll(pVO);
						// C는 V에게 검색한 정보를 전달한다.
						// V는 사용자에게 보여준다.
						client.printProductList(pdatas);
						// C는 View 검색완료 안내멘트를 띄운다.


					}
					else if(action==7) { // 상품검색_최고가 검색
						ProductVO pVO=new ProductVO(0,"최고가",0,0);
						ProductVO data=pDAO.selectOne(pVO);
						client.printProduct(data);
					}
					else if(action==8) { // 상품검색_최저가 검색
						ProductVO pVO = new ProductVO(0,"최저가",0,0);
						ProductVO data = pDAO.selectOne(pVO);
						client.printProduct(data);
					}
				}
			}
			else if(action==3) { // 프로그램종료
				client.printClientEnd01();
				break;
			}
		}
	}
}
 

 

 

728x90
반응형