JX405기_비트/Java

Day04-2 MVC 패턴을 활용하여 로그인 프로그램 만들기

_하루살이_ 2023. 1. 16. 16:22

model인 UserDTO 만들기

package model;

public class UserDTO {
    private int id;
    private String username;
    private String password;
    private String nickname;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getNickname() {
        return nickname;
    }

    public void setNickname(String nickname) {
        this.nickname = nickname;
    }

    public boolean equals(Object o){
        if (o instanceof  UserDTO){
            UserDTO u = (UserDTO) o;
            return id == u.id;
        }
        return false;
    }

    public UserDTO(UserDTO origin){
        id = origin.id;
        username = origin.username;
        password = origin.password;
        nickname = origin.nickname;
    }

    public UserDTO(){

    }



}

 

UserController 만들기

package Controller;

import model.UserDTO;

import java.util.ArrayList;

public class UserController {
    private ArrayList<UserDTO> list;
    // ArrayLis<제네릭> : ArrayList 가 어떤것을 모아두었는지 적는 것
    private int nextId;
    public UserController(){
        list = new ArrayList<>();
        nextId = 1;
    }

    // CRUD
    public void insert(UserDTO userDTO){
        userDTO.setId(nextId++);
        list.add(userDTO);
    }

    public UserDTO selectById(int id){
        for (UserDTO u : list){
            if (u.getId() == id){
                return new UserDTO(u);
            }
        }

        return null;
    }

    public void update(UserDTO userDTO){
        list.set(list.indexOf(userDTO), userDTO);
    }

    public void delete(int id){
        UserDTO u = new UserDTO();
        u.setId(id);
        list.remove(u);
    }

    public boolean validateUsername(String username){
        if (username.equalsIgnoreCase("X")){
            return false;
        }
        for(UserDTO u : list){
            if(username.equalsIgnoreCase(u.getUsername())){
                return false;
            }
        }

        return true;
    }

    public UserDTO auth(String username, String password){
        for (UserDTO u : list){
            if (username.equalsIgnoreCase(u.getUsername()) && password.equals(u.getPassword())){
                return new UserDTO(u);
            }
        }

        return null;
    }

}

 

UserViewer 만들기

package View;

import Controller.UserController;
import model.UserDTO;
import util.ScannerUtil;

import java.util.Scanner;

public class UserViewer {
    private final Scanner SCANNER;
    private UserController userController;
    private UserDTO logIn = null;

    public UserViewer(){
        SCANNER = new Scanner(System.in);
        userController = new UserController();
    }
   

    public void showIndex(){
        String message = "1. 로그인 2. 회원가입 3. 종료";
        while (true){
            int userChoice = ScannerUtil.nextInt(SCANNER, message);
            if (userChoice == 1){
                auth();
                if (logIn != null){
                    showMenu();
                }
            } else if (userChoice == 2){
                register();
            } else if (userChoice == 3) {
                System.out.println("사용해주셔서 감사합니다.");
                break;
            }
        }
    }

    private void register(){
        String message;
        message = "사용하실 아이디를 입력해주세요.";
        String username = ScannerUtil.nextLine(SCANNER, message);
        while (!userController.validateUsername(username)){
            System.out.println("해당 아이디는 사용하실 수 없습니다.");
            message = "사용하실 아이디나 뒤로 가실려면 \"X\"를 입력해주세요.";
            username = ScannerUtil.nextLine(SCANNER, message);

            if (username.equalsIgnoreCase("X")){
                break;
            }
        }
        if (!username.equalsIgnoreCase("X")){
            UserDTO u = new UserDTO();
            u.setUsername(username);

            message = "사용하실 비밀번호를 입력해주세요.";
            u.setPassword(ScannerUtil.nextLine(SCANNER,message));
            message = "사용하실 닉네임을 입력해주세요.";
            u.setNickname(ScannerUtil.nextLine(SCANNER, message));

            userController.insert(u);
        }

    }
    private void auth(){
        String message;
        message = "아이디를 입력해주세요.";
        String username = ScannerUtil.nextLine(SCANNER, message);

        message = "비밀번호를 입력해주세요.";
        String password = ScannerUtil.nextLine(SCANNER, message);

        logIn = userController.auth(username, password);

        if (logIn == null){
            System.out.println("로그인 정보가 정확하지 않습니다.");

        }

    }

    private void showMenu(){
        String message = "1. 게시판으로 2. 회원 정보관리 3. 로그아웃";
        while (logIn != null){
            int userChoice = ScannerUtil.nextInt(SCANNER,message);
            if (userChoice == 1){
                boardViewer.showMenu();
            } else if (userChoice == 2){
                printOne();
            } else if (userChoice == 3){
                logIn = null;
                System.out.println("정상적으로 로그아웃되었습니다.");
            }
        }
    }

    private void printOne(){
        System.out.println("회원 번호 : " + logIn.getId());
        System.out.println("회원 닉네임 : " + logIn.getNickname());
        System.out.println("--------------------------------------------");
        String message = "1. 수정 2. 탈퇴 3. 뒤로가기";
        int userChoice = ScannerUtil.nextInt(SCANNER,message);
        if (userChoice == 1){
            update();
        } else if (userChoice == 2){
            delete();
        }
    }

    private void update(){
        String message = "새로운 비밀번호를 입력해주세요.";
        String newPassword = ScannerUtil.nextLine(SCANNER, message);

        message = "새로운 닉네임을 입력해주세요.";
        String newNickname = ScannerUtil.nextLine(SCANNER,message);

        message = "기존 비밀번호를 입력해주세요.";
        String oldPassword = ScannerUtil.nextLine(SCANNER,message);

        if (logIn.getPassword().equals(oldPassword)){
            logIn.setNickname(newNickname);
            logIn.setPassword(newPassword);

            userController.update(logIn);
        } else {
            System.out.println("회원 정보 변경에 실패하였습니다.");
        }
    }

    private void delete(){
        String message = "정말로 삭제하시겠습니까? Y/N";
        String yesNo = ScannerUtil.nextLine(SCANNER, message);

        if (yesNo.equalsIgnoreCase("Y")){
            message = "비밀번호를 입력해주세요.";
            String password = ScannerUtil.nextLine(SCANNER, message);

            if(password.equals(logIn.getPassword())){
                userController.delete(logIn.getId());
                logIn = null;
            }
        }
    }
}

 

User 클래스에서 실행하기

package day0112;

import View.UserViewer;

public class Ex02User {
    public static void main(String[] args) {
        UserViewer userViewer = new UserViewer();
        userViewer.showIndex();
    }
}