- 자바 프로젝트 리팩토링 : Library Service(6)
대여 기능을 작업하기 앞서, 로그인 기능과 실행부 코드를 먼저 정리해야겠다는 생각이 들었다.
기존 코드는 userID와 password를 입력 받아 User를 탐색하고, 숫자로 관리자와 일반 계정을 구분하였다.
login 메서드의 반환 타입을 int에서 User 타입으로 변경하여 변수의 재사용성을 높였다.
(그러나, 로그인된 User를 활용하는 기능은 거의 없었다..😅)
@Override
public User login(int id, String pw) {
User user = userDao.getUser(id);
if ( user != null && user.getPw().equals(pw) ) {
// 관리자 계정일 경우
if ( user.isAdmin() ) {
System.out.printf("%n관리자 계정입니다.%n");
}
// 일반 계정일 경우
else {
System.out.printf("%n%s님, 안녕하세요.%n", user.getName());
}
}
// ID가 존재하지 않는 경우, PW가 일치하지 않는 경우
else {
System.out.printf("%nID 또는 pw를 확인해주세요.%n");
user = null;
}
return user;
}
구현부에 있어야 할 내용들이 실행부에 있는 경우가 있어서 해당 코드들을 구현부 내로 이동시켰다.
@Override
public void updateAdmin(User loginUser) {
int userID = nextInt("ID를 입력해주세요. > ");
if (userID == loginUser.getId()) {
System.out.println("본인 계정의 권한 회수는 불가합니다.");
return;
}
User user = userDao.getUser(userID);
if ( user != null ) {
if( user.isBlacklist() ) {
System.out.println("해당 계정은 블랙리스트입니다.");
} else if ( !user.isAdmin() ) {
user.setAdmin(true);
System.out.printf("%s님께 관리자 권한을 부여하였습니다.%n", user.getName());
} else {
user.setAdmin(false);
System.out.printf("%s님의 관리자 권한을 회수하였습니다.%n", user.getName());
}
userDao.updateAuth(user);
} else {
System.out.println("ID를 확인해주세요.");
}
}
@Override
public void updateBlackList() {
int userID = nextInt("ID를 입력해주세요. > ");
User user = userDao.getUser(userID);
if ( user != null ) {
if( user.isAdmin() ) {
System.out.println("관리자 계정입니다.");
} else if ( !user.isBlacklist() ) {
user.setBlacklist(true);
System.out.printf("%s님이 블랙리스트로 등록 되었습니다.%n", user.getName());
} else {
user.setBlacklist(false);
System.out.println("블랙리스트가 해제되었습니다.");
}
userDao.updateAuth(user);
} else {
System.out.println("ID를 확인해주세요.");
}
}
- LibEx.java
public static void main(String[] args) throws ParseException {
UserService userService = new UserServiceImpl();
BookService bookService = new BookServiceImpl();
RentService rentService = new RentServiceImpl();
while ( true ) {
libraryIndex();
int userID = nextInt("ID를 입력해주세요. > ");
String password = nextLine("password를 입력해주세요. > ");
User user = userService.login(userID, password);
if( user != null ) {
// 관리자 계정
if ( user.isAdmin() ) {
while ( true ) {
try {
int index = nextInt("1.도서관리 2.계정관리 3.대여이력조회 4.로그아웃 > ", 1, 4);
switch (index) {
// 도서관리
case 1: System.out.printf("%n도서관리입니다.%n");
index = nextInt("1.재고조회 2.도서대여 3.도서반납 4.도서검색 5.신규도서등록 6.도서정보수정 7.도서정보삭제 8.처음으로 > ", 0, 8);
switch (index) {
// 도서 목록 조회
case 1: bookService.findBook(); break;
// 도서 대여
case 2: rentService.rentBook(); break;
// 도서 반납
case 3: rentService.returnBook(); break;
// 사서용 도서 검색
case 4: bookService.searchBook(); break;
// 도서 정보 등록
case 5: bookService.regBook(); break;
// 도서 정보 수정
case 6: bookService.modifyBook(); break;
// 도서 정보 삭제
case 7: bookService.removeBook(); break;
case 8: break;
} continue;
// 계정관리
case 2: System.out.printf("%n계정관리입니다.%n");
index = nextInt("1.계정목록 2.계정등록 3.계정정보수정 4.계정삭제 5.블랙리스트관리 6.관리자등록 7.처음으로 > ", 1, 7);
switch (index) {
// 계정 목록
case 1: userService.listUser(); break;
// 계정 정보 등록
case 2: userService.regUser(); break;
// 계정 정보 수정
case 3: userService.modifyUser(); break;
// 계정 정보 삭제
case 4: userService.removeUser(); break;
// 블랙리스트 등록, 해제
case 5: userService.updateBlackList(); break;
// 관리자 등록, 해제
case 6: userService.updateAdmin(user); break;
case 7: break;
} continue;
// 대여 이력 조회
case 3: rentService.listRent(user); continue;
// 로그아웃
case 4: System.out.println("로그아웃이 성공적으로 이루어졌습니다."); break;
} break;
} catch (NumberFormatException e) {
System.out.println("잘못 입력하셨습니다.");
} catch (RuntimeException e) {
System.out.println(e.getMessage());
}
}
}
// 일반 계정
else {
while ( true ) {
try {
int index = nextInt("1.도서검색 2.도서대여 3.도서반납 4.도서대여이력 5.로그아웃 > ", 0, 5);
switch (index) {
// 도서 검색
case 1: bookService.searchBook(); continue;
// 도서 대여
case 2: rentService.rentBook(); continue;
// 도서 반납
case 3: rentService.returnBook(); continue;
// 대여 이력 조회
case 4: rentService.listRent(user); continue;
case 5: System.out.println("로그아웃이 성공적으로 이루어졌습니다."); break;
} break;
} catch (NumberFormatException e) {
System.out.println("잘못 입력하셨습니다.");
} catch (RuntimeException e) {
System.out.println(e.getMessage());
}
}
}
}
}
}