20240909 객체배열

Dodo Lee·2024년 9월 9일

==웹 서비스 기본 흐름==

클라이언트 -> 요청 -> Controller -> Service -> DB
DB -> Service -> Controller -> View -> 응답 -> 클라이언트

※ 객체 배열 ※

배열 : 같은 자료형인 변수들의 묶음
객체 배열 : 객체 참조형 변수의 묶음

2. 객체배열 선언과 할당

1) 선언
Academy[] arr;
academt arr[];
2) 할당
arr = new Academy[5];
3) 선언과 동시에 할당
Academy[] arr = new Academy[5];
--> arr[index]이 하나의 참조형 변수라고 생각

== 회원가입 ver.2 ==

Service 클래스만

1. 속성 부분

1) Scanner

private Scanner sc = new Scanner(System.in);

2) Member 5칸짜리 객체 배열 선언 및 할당

private Member[] memberArr = new Member[5];

3) 현재 로그인한 회원의 정보를 저장할 참조 변수

private Member loginMember = null;

2. 기능 부분

1) 기본 생성자(0~2 인덱스 초기화)

public MemberService(){
  memberArr[0] = new Member("user01", "pass01", "홍길동", 30, "서울");
  memberArr[1] = new Member("user02", "pass02", "계보린", 25, "경기");
  memberArr[2] = new Member("user03", "pass03", "고길동", 45, "강원");
}

2) 메뉴 출력용 메서드

public void displayMenu(){

2-1) 메뉴 선택용 변수

  int menuNum = 0;

2-2) 반복문(무조건 한 번은 실행)

  do{
    System.out.println("===회원 정보 관리 프로그램 v2===");
    System.out.println("1. 회원가입");
    System.out.println("2. 로그인");
    System.out.println("3. 회원 정보 조회");
    System.out.println("4. 회원 정보 수정");
    System.out.println("5. 회원 검색(지역)");
    System.out.println("0. 프로그램 종료");
    System.out.print("메뉴 입력 : ");
    menuNum = sc.nextInt();
    sc.nextLine();

2-3) 메뉴 선택에 따른 메서드 실행

    switch(menuNum) {
      case 1 : System.out.println(signUp()); break;
      case 2 : System.out.println(login()); break;
      case 3 : System.out.println(selectMember()); break;
      case 4 : 
        int result = updateMember();
        if(result == -1) {
          System.out.println("로그인부터 해라");
        }else if(result == 0) {
          System.out.println("수정 실패(비밀번호 오류)");
        }else {
          System.out.println("회원정보가 수정되었습니다");
        }
        break;
      case 5 : searchRegion(); break;
      case 0 : System.out.println("프로그램 종료..."); break;
      default : System.out.println("잘못입력하셨습니다. 다시 입력하세요!");
    }
}while(menuNum != 0)

3) memberArr의 비어있는 인덱스 번호를 반환하는 메서드

public int emptyIndex(){
  for(int i = 0; i < memberArr.length; i++){
    if(memberArr[i] == null){ return i;}
  }
  retrun -1;
}

4) 회원가입 메서드

public String signUp(){
  System.out.println("\n========회원 가입========");
  int index = emptyIndex();

4-1) 비어있는 인덱스가 없을 경우 : 회원 가입 불가

  if(index == -1){return}

4-2) 회원가입 정보

  System.out.print("아이디 : ");
  String memberId = sc.next();
  System.out.print("비밀번호 : ");
  String memberPw = sc.next();
  System.out.print("비밀번호 확인 : ");
  String memberPw2 = sc.next();
  System.out.print("이름 : ");
  String memberName = sc.next();
  System.out.print("나이 : ");
  int memberAge = sc.nextInt();
  System.out.print("지역 : ");
  String region = sc.next();

4-3) 비밀번호 확인

  if(memberPw.equals(memberPw2)){
    memberArr[index] = new Member(memberId, memberPw, memberName, memberAge, region);
    return "회원가입 성공!!!";
  }else{ return "회원 가입 실패!!!(비밀번호 불일치";}
}

5) 로그인 메서드

public String login(){
  System.out.println("\n========로그인========");
  System.out.print("아이디 입력 : ");
  String memberId = sc.next();
  System.out.print("비밀번호 입력 : ");
  String memberPw = sc.next();

5-1) 배열 요소를 순차접근하여 정보가 있는지 확인

  for(int i = 0; i < memberArr.length; i++) {
    if(memberArr[i] != null) { // 회원정보가 있을 경우
      if(memberArr[i].getMemberId().equals(memberId) &&
        memberArr[i].getMemberPw().equals(memberPw)) {
        loginMember = memberArr[i];
        break;
        }			
    }
  }
  if(loginMember == null){return "아이디 또는 비밀번호가 일치하지 않습니다";}
  else{return loginMember.getMemberName() + "님 환영합니다!";}
}

6) 회원 정보 조회 메서드

public String selectMember(){
  if(loginMember == null){ return "로그인 먼저 하세요";}
  return "이름 : " + loginMember.getMemberName()
	+ "\n나이 : " + loginMember.getMemberAge()
	+ "\n지역 : " + loginMember.getRegion();
}

7) 회원 정보 수정 메서드

public int updateMember(){
  if(loginMember == null){ return "로그인 먼저 하세요";}
  7-1) 수정할 회원 정보 입력 받기(이름, 나이, 지역)
  System.out.print("이름 입력 : ");
  String inpuName = sc.next();
  System.out.print("나이 입력 : ");
  int inputAge = sc.nextInt();
  System.out.print("지역 입력 : ");
  String inputRegion = sc.next();
  7-2) 비밀번호 입력 확인
  System.out.println("비밀번호 입력 : ");
  String inputPw = sc.next();
  if(inputPw.equals(loginMember.getMemberPw())) {
    loginMember.setMemberName(inpuName);
    loginMember.setMemberAge(inputAge);
    loginMember.setRegion(inputRegion);
    return 1;
  }else {return 0;}
}

8) 회원 검색(지역 메서드)

public void searchRegion(){
  System.out.println("\n========회원 검색(지역)========");
  System.out.print("검색할 지역을 입려하세요 : ");
  String inputRegion = sc.next();
  boolean flag = true;
  for(int i = 0 ; i < memberArr.length; i++) {
    if(memberArr[i] == null) {break;}
    if(memberArr[i].getRegion().equals(inputRegion)) {
      System.out.printf("아이디 : %s, 이름 : %s\n", 
		    memberArr[i].getMemberId(),
		    memberArr[i].getMemberName() );
      flag = false;
      }
    }
    if(flag) { System.out.println("일치하는 검색 결과가 없습니다!"); }
}
profile
연습생

0개의 댓글