728x90
목차
1. 회원 관리 프로그램
■ User
package j12_배열;
// Entity(정보를 담는다)
public class J12_User {
private String username; // 사용자이름(아이디, 계정)
private String password; // 비밀번호
private String name; // 성명
private String email; // 이메일
// ctrl + space(자동완성)
public J12_User() {
}
// alt + shift + s
public J12_User(String username, String password, String name, String email) {
super();
this.username = username;
this.password = password;
this.name = name;
this.email = email;
}
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 getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public String toString() {
return "J12_User [username=" + username + ", password=" + password + ", name=" + name + ", email=" + email + "]";
}
}
■ UserRepository
package j12_배열;
// 저장소
// Entity + 비즈니스 로직
public class J12_UserRepository {
private J12_User[] userTable;
public J12_UserRepository(J12_User[] userTable) {
this.userTable = userTable;
}
// 외부로 가져가기 위해 getter 작성
public J12_User[] getUserTable() {
return userTable;
}
public void saveUser(J12_User user) {
extendArrayOne();
userTable[userTable.length - 1] = user;
}
private void extendArray(int length) {
J12_User[] newArray = new J12_User[userTable.length + length];
transferDataToNewArray(userTable, newArray);
userTable = newArray;
}
private void extendArrayOne() {
J12_User[] newArray = new J12_User[userTable.length + 1];
transferDataToNewArray(userTable, newArray);
userTable = newArray;
}
private void transferDataToNewArray(J12_User[] oldArray, J12_User[] newArray) {
for (int i = 0; i < oldArray.length; i++) {
newArray[i] = oldArray[i];
}
}
public J12_User findUserByUsername(String username) {
J12_User user = null;
for (J12_User u : userTable) {
// null 체크를 해줘야 함
if (u == null) {
continue;
}
if (u.getUsername().equals(username)) {
user = u;
break;
}
}
return user;
}
}
■ UserService
package j12_배열;
import java.lang.module.FindException;
import java.util.Scanner;
// 비즈니스 로직
// 기능을 가지고 있는 클래스
public class J12_UserService {
private Scanner scanner;
private J12_UserRepository userRepository;
// 결합도가 낮은 코드
public J12_UserService(Scanner scanner) {
// 변수에서 바로 선언하게되게 하면 컴파일 시 자동으로 생성되게 때문(사용하지 않았을 경우 메모리 소모)
this.scanner = scanner;
}
// 결합도가 높은 코드
public J12_UserService(J12_UserRepository userRepository) {
// 생성되었을 때 선언
scanner = new Scanner(System.in);
this.userRepository = userRepository;
}
public void run() {
boolean loopFlag = true;
char select = '\0';
while (loopFlag) {
showMainMenu();
select = inputSelect("메인 ");
loopFlag = mainMenu(select);
}
}
public void stop() {
for (int i = 0; i < 10; i++) {
try {
Thread.sleep(500);
System.out.println("프로그램 종료중...(" + (i + 1) + "/10)");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("프로그램 종료");
}
private char inputSelect(String menuName) {
System.out.print(menuName + "메뉴 선택 : ");
char select = scanner.next().charAt(0);
// 버퍼 비워줌
scanner.nextLine();
return select;
}
private void showMainMenu() {
System.out.println("========<< 메인메뉴 >>========");
System.out.println("1. 회원 전체 조회");
System.out.println("2. 회원 등록");
System.out.println("3. 사용자 이름으로 회원 조회");
System.out.println("4. 회원 정보 수정");
System.out.println("==============================");
System.out.println("q. 프로그램 종료");
System.out.println();
}
private void showUsers() {
J12_User[] users = userRepository.getUserTable();
System.out.println("========<< 회원 전체 조회 >>========");
for (J12_User user : users) {
System.out.println(user.toString());
}
System.out.println("====================================");
}
private void registerUser() {
J12_User user = new J12_User();
System.out.println("========<< 회원 등록 >>========");
System.out.print("사용자이름 : ");
user.setUsername(scanner.nextLine());
System.out.print("비밀번호 : ");
user.setPassword(scanner.nextLine());
System.out.print("성명 : ");
user.setName(scanner.nextLine());
System.out.print("이메일 : ");
user.setEmail(scanner.nextLine());
userRepository.saveUser(user);
}
private void showUser() {
J12_User user = null;
System.out.println("========<< 회원 조회 >>========");
user = verifyUsername();
if (user == null) {
System.out.println("존재하지 않는 사용자이름입니다.");
return;
}
System.out.println(user.toString());
System.out.println("===============================");
}
private void updateUser() {
J12_User user = verifyUsername();
if (user == null) {
System.out.println("존재하지 않는 사용자이름입니다.");
return;
}
boolean loopFlag = true;
char select = '\0';
while (loopFlag) {
showUpdateMenu(user);
select = inputSelect("수정");
loopFlag = updateMenu(user, select);
}
}
private void showUpdateMenu(J12_User user) {
System.out.println("========<< 수정 메뉴 >>========");
System.out.println("사용자 이름 : " + user.getUsername());
System.out.println("===============================");
System.out.println("1. 비밀번호 변경");
System.out.println("2. 이름 변경");
System.out.println("3. 이메일 변경");
System.out.println("===============================");
System.out.println("b. 뒤로가기");
System.out.println();
}
private void updatePassword(J12_User user) {
String oldPassword = null;
String newPassword = null;
String confirmPassword = null;
System.out.println("========<< 비밀번호 변경 >>========");
System.out.print("기존 비밀번호 입력 : ");
oldPassword = scanner.nextLine();
if (!comparePassword(user.getPassword(), oldPassword)) {
System.out.println("비밀번호가 일치하지 않습니다.");
return;
}
System.out.print("새로운 비밀번호 입력 : ");
newPassword = scanner.nextLine();
System.out.print("새로운 비밀번호 확인 : ");
confirmPassword = scanner.nextLine();
if (!comparePassword(newPassword, confirmPassword)) {
System.out.println("새로운 비밀번호가 서로 일치하지 않습니다.");
return;
}
user.setPassword(newPassword);
System.out.println("비밀번호 변경 완료.");
}
private void updateName(J12_User user) {
String newName = null;
System.out.print("새로운 이름 입력 : ");
newName = scanner.nextLine();
user.setName(newName);
System.out.println("이름 변경 완료.");
}
private void updateEmail(J12_User user) {
String newEmail = null;
System.out.print("새로운 이메일 입력 : ");
newEmail = scanner.nextLine();
user.setEmail(newEmail);
System.out.println("이메일 변경 완료.");
}
private boolean comparePassword(String prePassword, String nextPassword) {
return prePassword.equals(nextPassword);
}
private boolean mainMenu(char select) {
boolean flag = true;
if (isExit(select)) {
flag = false;
} else {
if (select == '1') {
showUsers();
} else if (select == '2') {
registerUser();
} else if (select == '3') {
showUser();
} else if (select == '4') {
updateUser();
} else {
System.out.println(getSelectedErrorMessage());
}
System.out.println();
}
return flag;
}
private boolean updateMenu(J12_User user, char select) {
boolean flag = true;
if (isBack(select)) {
flag = false;
} else {
if (select == '1') {
updatePassword(user);
} else if (select == '2') {
updateName(user);
} else if (select == '3') {
updateEmail(user);
} else {
System.out.println(getSelectedErrorMessage());
}
}
System.out.println();
return flag;
}
// 리팩토링 기법
private boolean isExit(char select) {
return select == 'q' || select == 'Q';
}
private boolean isBack(char select) {
return select == 'b' || select == 'B';
}
// 후에 잘못된 부분 수정을 위해 return함
private String getSelectedErrorMessage() {
return "###<< 잘못된 입력입니다. 다시 입력하세요. >>###";
}
private J12_User verifyUsername() {
String username = null;
System.out.print("사용자이름 : ");
username = scanner.nextLine();
return userRepository.findUserByUsername(username);
}
}
■ UserMain
package j12_배열;
public class J12_UserMain {
public static void main(String[] args) {
J12_User[] users = new J12_User[0];
J12_UserRepository userRepository = new J12_UserRepository(users);
J12_UserService service = new J12_UserService(userRepository);
service.run();
service.stop();
}
}