전체 코드
main()
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Map<String, String> members = new HashMap<>();
init(members);
System.out.println("========= 프로그램 시작 =========");
String answer;
while(true){
System.out.println("원하는 작업을 선택해주세요. (1) 로그인 / (2) 회원가입 / (0) 프로그램 종료");
answer = br.readLine();
if(answer.equals("0")) break;
else if(answer.equals("1")){
login(br, members);
} else if(answer.equals("2")) {
join(br, members);
} else System.out.println("올바른 숫자를 입력해주세요.");
}
System.out.println("========= 프로그램 종료 =========");
br.close();
}
...
}
init()
private static void init(Map<String, String> members){
members.put("admin", "admin1234");
}
login()
private static String login(BufferedReader br, Map<String, String> members) throws IOException {
System.out.println("========== 로그인 ==========");
String id; String pw;
while(true){
System.out.print("아이디 : ");
id = br.readLine();
if(members.get(id) == null) System.out.println("아이디를 다시 입력해주세요.");
else break;
}
while(true){
System.out.print("비밀번호 : ");
pw = br.readLine();
if(!members.get(id).equals(pw)) System.out.println("비밀번호를 다시 입력해주세요.");
else break;
}
System.out.println("%s 님이 로그인하셨습니다.".formatted(id));
System.out.println("=".repeat(20));
return id;
}
join()
private static String join(BufferedReader br, Map<String, String> members) throws IOException {
System.out.println("========== 회원가입 ==========");
String id; String pw1; String pw2;
while(true){
System.out.println("아이디는 4자 이상 20자 이하, 영문 및 숫자로 구성되어야 합니다.");
System.out.print("아이디 : ");
id = br.readLine();
if(id.matches("[a-zA-Z0-9]+") && id.length() >= 4 && id.length() <= 20){
if(members.get(id) != null) {
System.out.println("이미 존재하는 아이디입니다.");
} else break;
}
}
while(true){
System.out.println("비밀번호는 6자 이상 20자 이하, 영문 및 숫자로 구성되어야 합니다.");
System.out.print("비밀번호 : ");
pw1 = br.readLine();
if(pw1.matches("[a-zA-Z0-9]+") && pw1.length() >= 6 && pw1.length() <= 20){
break;
}
}
System.out.println("비밀번호를 한 번 더 입력해주세요.");
while(true){
System.out.print("비밀번호 확인 : ");
pw2 = br.readLine();
if(!pw1.equals(pw2)) System.out.println("비밀번호가 일치하지 않습니다.");
else break;
}
members.put(id, pw1);
System.out.println("%s 님의 회원가입이 완료되었습니다.".formatted(id));
System.out.println("=".repeat(20));
return id;
}
진행 흐름
0. 회원 정보는 Map에 저장되며, admin 회원이 자동으로 저장(== 회원가입)된다.
Map<String, String> members = new HashMap<>();
init(members);
...
}
private static void init(Map<String, String> members){
members.put("admin", "admin1234");
}
1. 프로그램 시작과 동시에 사용자가 원하는 작업을 입력 받는다.
System.out.println("========= 프로그램 시작 =========");
String answer;
while(true){
System.out.println("원하는 작업을 선택해주세요. (1) 로그인 / (2) 회원가입 / (0) 프로그램 종료");
answer = br.readLine();
2-1. 1을 입력하면 login 메서드가 실행된다.
while(true){
System.out.println("원하는 작업을 선택해주세요. (1) 로그인 / (2) 회원가입 / (0) 프로그램 종료");
answer = br.readLine();
...
else if(answer.equals("1")){
login(br, members);
...
}
private static String login(BufferedReader br, Map<String, String> members) throws IOException {
System.out.println("========== 로그인 ==========");
...
}
2-2. 아이디와 비밀번호를 입력 받는다.
- 저장된 회원 목록에 해당하는 아이디가 없다면 다시 입력 받는다.
- 비밀번호가 올바르지 않으면 다시 입력 받는다.
- 올바른 아이디와 비밀번호를 입력하면 로그인이 완료된다.
private static String login(BufferedReader br, Map<String, String> members) throws IOException {
System.out.println("========== 로그인 ==========");
String id; String pw;
while(true){
System.out.print("아이디 : ");
id = br.readLine();
if(members.get(id) == null) System.out.println("아이디를 다시 입력해주세요.");
else break;
}
while(true){
System.out.print("비밀번호 : ");
pw = br.readLine();
if(!members.get(id).equals(pw)) System.out.println("비밀번호를 다시 입력해주세요.");
else break;
}
System.out.println("%s 님이 로그인하셨습니다.".formatted(id));
System.out.println("=".repeat(20));
return id;
}
3-1. 2를 입력하면 join 메서드가 실행된다.
while(true){
System.out.println("원하는 작업을 선택해주세요. (1) 로그인 / (2) 회원가입 / (0) 프로그램 종료");
answer = br.readLine();
...
else if(answer.equals("2")){
join(br, members);
...
}
private static String join(BufferedReader br, Map<String, String> members) throws IOException {
System.out.println("========== 회원가입 ==========");
...
}
3-2. 회원가입할 아이디와 비밀번호를 입력 받는다.
- 정규표현식을 통해 아이디, 비밀번호가 영문 및 숫자로 구성되어 있는지 판별한다.
- 이미 존재하는 아이디인 경우 안내와 함께 다시 입력 받는다.
- 비밀번호와 확인 비밀번호가 일치하지 않을 경우 안내와 함께 다시 입력 받는다.
- 아이디, 비밀번호, 확인 비밀번호 검증이 완료되면 회원 목록에 저장하고(members.put(id, pw1)) 회원가입이 완료된다.
private static String join(BufferedReader br, Map<String, String> members) throws IOException {
System.out.println("========== 회원가입 ==========");
String id; String pw1; String pw2;
while(true){
System.out.println("아이디는 4자 이상 20자 이하, 영문 및 숫자로 구성되어야 합니다.");
System.out.print("아이디 : ");
id = br.readLine();
if(id.matches("[a-zA-Z0-9]+") && id.length() >= 4 && id.length() <= 20){
if(members.get(id) != null) {
System.out.println("이미 존재하는 아이디입니다.");
} else break;
}
}
while(true){
System.out.println("비밀번호는 6자 이상 20자 이하, 영문 및 숫자로 구성되어야 합니다.");
System.out.print("비밀번호 : ");
pw1 = br.readLine();
if(pw1.matches("[a-zA-Z0-9]+") && pw1.length() >= 6 && pw1.length() <= 20){
break;
}
}
System.out.println("비밀번호를 한 번 더 입력해주세요.");
while(true){
System.out.print("비밀번호 확인 : ");
pw2 = br.readLine();
if(!pw1.equals(pw2)) System.out.println("비밀번호가 일치하지 않습니다.");
else break;
}
members.put(id, pw1);
System.out.println("%s 님의 회원가입이 완료되었습니다.".formatted(id));
System.out.println("=".repeat(20));
return id;
}
실행 화면
회원가입 -> 로그인 -> 프로그램 종료
admin 로그인
회원가입 시 아이디, 비밀번호 검증
로그인 시 아이디, 비밀번호 검증
* 작업 선택 시 올바른 입력값이 아니면 다시 입력 받는다.
- 회원탈퇴 기능도 고려했지만 로그인, 회원가입 흐름과 큰 차이점이 없을 것 같아 추가하지 않았다.
- 로그인 시 올바르지 않은 아이디, 비밀번호를 입력하면 단순히 "아이디(비밀번호)를 다시 입력해주세요."가 출력되고 다시 입력 받는데, 원하는 경우 로그인 작업을 끝내고 회원가입이나 프로그램 종료를 할 수 있도록 흐름을 구성해도 괜찮을 것 같다.
- 정규표현식을 살짝 잊고 있었는데, 이번 프로그램을 구현하면서 다시 공부하는 좋은 기회가 되었다.
'프로젝트 & TIL > 자바 토이 프로젝트' 카테고리의 다른 글
자바 토이 프로젝트 5 - 좌석 예약 프로그램 (0) | 2023.05.11 |
---|---|
자바 토이 프로젝트 3 - 로또 번호 생성 프로그램 (0) | 2023.05.08 |
자바 토이 프로젝트 2 - 구구단 게임 (0) | 2023.05.07 |
자바 토이 프로젝트 1 - 가위 바위 보 게임 (0) | 2023.05.06 |