학습일기 day29 - 텍스트게시판 고도화 복습2

이건구·2023년 9월 28일
0

텍스트 게시판 고도화 회원가입 - 로그인기능까지

회원가입기능

회원가입 기능을 구현하려면 회원의 정보를 입력받아서 Article이나 Comment처럼 저장을 해야하니 이번에도 model 패키지에 클래스를 만들어준다.

package article.model;

public class Member {
    private int memberId;
    private String Id;
    private String Pw;
    private String Nname;
    private String regDate;
    public Member(String Id, String Pw, String Nname, String regDate, int LastMemberId) {
        this.Id = Id;
        this.Pw = Pw;
        this.Nname = Nname;
        this.regDate = regDate;
        this.memberId = LastMemberId;
    }

    public int getMemberId() {
        return memberId;
    }

    public void setMemberId(int memberId) {
        this.memberId = memberId;
    }

    public String getId() {
        return Id;
    }

    public void setId(String id) {
        Id = id;
    }

    public String getPw() {
        return Pw;
    }

    public void setPw(String pw) {
        Pw = pw;
    }

    public String getNname() {
        return Nname;
    }

    public void setNname(String nname) {
        Nname = nname;
    }

    public String getRegDate() {
        return regDate;
    }

    public void setRegDate(String regDate) {
        this.regDate = regDate;
    }
}

회원가입한 유저의 고유번호, 유저아이디, 유저패스워드, 닉네임, 가입일자를 저장해야하니 변수를 만들어준다.

그리고 Member 클래스와 연결해줄 MemberRepository도 만들어준다

package article.model;

import util.Util;

import java.util.ArrayList;

public class MemberRepository {
    private int LastMemberId = 0;
    private ArrayList<Member> members = new ArrayList<>();

    public void insert(String Id, String Pw, String Nname) {
        LastMemberId++;
        Member member = new Member(Id, Pw, Nname, Util.getDateTime(), LastMemberId);
        members.add(member);
    }

    public Member compareByloginId(String loginId) {
        for (Member member : members) {
            if (member.getId().equals(loginId)) {
                return member;
            }
        }
        return null;
    }

    public void memberList() {
        for (Member member : members) {
            System.out.println(member.getId());
            System.out.println(member.getPw());
            System.out.println(member.getNname());
            System.out.println(member.getRegDate());
            System.out.println(member.getMemberId());
        }
    }
}

insert() 함수를통해 실질적인 회원정보를 ArrayList에 저장해주게된다.

그리고 Controller 패키지의 Board클래스에 signup기능을 추가해주고 MemberController클래스에 signup함수를 구현해준다.

signup함수는 기존에 게시물을 저장해주는 add함수랑 같다. 아이디 패스워드 닉네임을 입력받고 MemberRepository에 저장해주면된다.

로그인기능

이번엔 login을 입력하면 아이디와 패스워드를 입력하도록하고 입력받은값이 저장해둔 ArrayList<`member>에 있는지 비교를하여 일치하는 값이 없으면 "잘못된 회원 정보입니다"를 출력하도록 해야한다.

login() 함수부터 보자.

public void login() {
        System.out.print("아이디 : ");
        String loginId = sc.nextLine();
        System.out.print("비밀번호 : ");
        String loginPw = sc.nextLine();

        String failMsg = "잘못된 회원 정보입니다.";
        Member member = memberRepository.compareByloginId(loginId);

        if (member == null) {
            System.out.println(failMsg);
            return;
        }
        if (!member.getPw().equals(loginPw)) {
            System.out.println(failMsg);
            return;
        }
        System.out.printf("%s님 환영합니다.\n", member.getNname());
        loginedMember = member;
    }

비교를 위해 compareByloginId함수를 MemberRepository클래스에 만들었다.

ublic Member compareByloginId(String loginId) {
        for (Member member : members) {
            if (member.getId().equals(loginId)) {
                return member;
            }
        }
        return null;
    }

단순하게 모든 리스트를 순회하여 회원아이디가 일치하는게 있는지 찾는 함수이다.

login함수에서 compareByloginId함수를 실행하고 나온 객체를 member객체에 저장한다.

그 값이 null이면 로그인 실패 메세지를 출력하게한다.

null이 아니라 일치하는 아이디를 찾게된다면 이번엔 입력받은 패스워드값과 일치하는 아이디를 찾은 member객체에 저장되어있는 패스워드값을 비교하여 일치하지않는다면 로그인 실패 메세지를 출력하게한다.

둘다 일치하게 된다면 return을 만나지않고 맨 아래에 출력문과 MemberController에서 선언해둔 Member loginedMember에 member를 저장하게된다.

그리고 다시 Board에 돌아와서 처음에 로그인하기전엔 명령어를 입력받는 창이 단순하게 명령어 : 였다면 로그인이 된다면 명령어[아이디(닉네임)] : 이 되도록하기위해

Member loginedMember = memberController.getLoginedMember();
            if (loginedMember == null) {
                System.out.print("명령어 : ");
            } else {
                System.out.printf("명령어[%s(%s)] : ", loginedMember.getId(), loginedMember.getNname());
            }

위 코드를 start() 함수의 while문이 실행되자마자 처음부분에 넣어준다.

단순히 MemberController 에있는 loginedMember의 값이 null이면 그냥 명령어 : 라고 출력이되고 값이있다면 그 객체의 유저아이디와 닉네임을 가져온다.

0개의 댓글