- 자바 프로젝트 리팩토링 : Library Service(1)
학원 다닐 때 만들었던 프로젝트들을 하나하나 리팩토링 해봐야겠다는 마음을 먹었다.
프로젝트도 Java, JSP, Spring 이렇게 3가지여서 다양하게 리팩토링 할 수 있어 좋을 듯.
첫 번째는 미니 팀 프로젝트로 진행했던 Library Service. 웹 화면 없이 콘솔로만 작동하는 Java 프로젝트이다.
화면이 없던 프로젝트이기에 화면을 만들어 볼까도 생각해봤지만, 화면 만들고 서버 연동하는 것도 일이고 콘솔 최적화로 만들어놓은 프로젝트이다보니..
화면을 따로 만들지는 않고! 대신 코드 정리 및 데이터 영속화를 해보려고 한다.
1. Service 세분화 (User, Book, Rent 구분)
모두가 처음하는 프로젝트이다 보니, 강사님이 하나의 Service 안에서 코드 작업을 하라고 했었다.
각자 파트를 작업하고 하나의 Service로 정리하여 형상관리했던 기억이 난다.
서로 다른 기능들이 한 곳에 모여있는 건 활용도가 떨어지고 관리하기가 어렵다.
따라서 모든 서비스가 있는 LibService를 UserService, BookService, RentService로 세분화 할 것이다.
2. 데이터 영속화
당시 데이터베이스를 배우기 전이여서, 프로젝트에 있는 DB는 실행 시 매번 초기화 되는 휘발성 데이터이다.
따로 DB를 연결하여 작업하지는 않고, 직렬화를 이용하여 해당 데이터들을 .ser 파일로 저장할 것이다.
- 데이터 불러오기 및 초기 데이터 세팅
List<User> users = new ArrayList<User>();
{ // 초기화 블럭을 통한 데이터 불러오기
try {
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("users.ser"));
users = (List<User>) ois.readObject();
System.out.println("파일 불러오기 완료");
ois.close();
} catch (FileNotFoundException e) {
// User 데이터
users.add(new User("혁오", "981111", "010-1111-1111", 1001, "1234", true)); // 관리자
users.add(new User("너드커넥션", "981112", "010-1111-1112", 1002, "1234", false));
users.add(new User("카더가든", "981113", "010-1111-1113", 1003, "1234", false));
users.add(new User("오존", "981114", "010-1111-1114", 1004, "1234", false));
users.add(new User("설", "981115", "010-1111-1115", 1005, "1234", false));
users.add(new User("다섯", "981116", "010-1111-1116", 1006, "1234", true));
System.out.println("임시 데이터 초기화 완료");
} catch (IOException e) {
e.printStackTrace();
System.exit(0);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
- 데이터 저장
// 데이터 저장
private void save() {
ObjectOutputStream oos;
try {
oos = new ObjectOutputStream(new FileOutputStream("users.ser"));
oos.writeObject(students);
} catch (Exception e) {
e.printStackTrace();
}
}
3. Lombok 적용
겟터, 셋터, 생성자에 대한 코드 간결화를 위해 Lombok 라이브러리도 적용하였다.