[Project] 자바 프로젝트 리팩토링 : Library Service(1) [인터페이스 구분, 데이터 영속화, Lombok 적용]

2023. 4. 10. 00:24·◈ Refactoring/Mini : Library Service📚
728x90


- 자바 프로젝트 리팩토링 : Library Service(1)

학원 다닐 때 만들었던 프로젝트들을 하나하나 리팩토링 해봐야겠다는 마음을 먹었다.
프로젝트도 Java, JSP, Spring 이렇게 3가지여서 다양하게 리팩토링 할 수 있어 좋을 듯.

첫 번째는 미니 팀 프로젝트로 진행했던 Library Service. 웹 화면 없이 콘솔로만 작동하는 Java 프로젝트이다.

화면이 없던 프로젝트이기에 화면을 만들어 볼까도 생각해봤지만, 화면 만들고 서버 연동하는 것도 일이고 콘솔 최적화로 만들어놓은 프로젝트이다보니..

화면을 따로 만들지는 않고! 대신 코드 정리 및 데이터 영속화를 해보려고 한다.

 


 

1. Service 세분화 (User, Book, Rent 구분)

모두가 처음하는 프로젝트이다 보니, 강사님이 하나의 Service 안에서 코드 작업을 하라고 했었다.
각자 파트를 작업하고 하나의 Service로 정리하여 형상관리했던 기억이 난다.

서로 다른 기능들이 한 곳에 모여있는 건 활용도가 떨어지고 관리하기가 어렵다.
따라서 모든 서비스가 있는 LibService를 UserService, BookService, RentService로 세분화 할 것이다.

LibService 하나로 기능 관리 중
LibService 안에 모든 기능이 다 들어가 있다. / User, Book, Rent


LibService 세분화


2. 데이터 영속화

당시 데이터베이스를 배우기 전이여서, 프로젝트에 있는 DB는 실행 시 매번 초기화 되는 휘발성 데이터이다.
따로 DB를 연결하여 작업하지는 않고, 직렬화를 이용하여 해당 데이터들을 .ser 파일로 저장할 것이다.

저장할 domain에 Serializable 구현 / User, Book, Rent


 

[Student] 직렬화를 사용한 데이터 영속화

[Student] String.format을 이용한 출력 양식 정리 [Student] Lombok 적용(@Getter, @Setter) 로 배열 수정 -.." data-og-host="yermi.tistory.com" data-og-source-url="https://yermi.tistory.com/85" data-og-url="https://yermi.tistory.com/85" data-og

yermi.tistory.com


- 데이터 불러오기 및 초기 데이터 세팅

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 라이브러리도 적용하였다.

Lombok 적용


- 기존의 코드

 

GitHub - kycasdzxc/human_project: 휴먼교육센터에서 진행한 프로젝트 🏫

휴먼교육센터에서 진행한 프로젝트 🏫. Contribute to kycasdzxc/human_project development by creating an account on GitHub.

github.com

- 리팩토링 코드

 

GitHub - kycasdzxc/LibraryService: Java Project 리팩토링 : Library Service 📚

Java Project 리팩토링 : Library Service 📚. Contribute to kycasdzxc/LibraryService development by creating an account on GitHub.

github.com


- Next) 자바 프로젝트 리팩토링 : Library Service(2)

 

[Project] 자바 프로젝트 리팩토링 : Library Service(2) [Singleton 패턴 적용 및 Dao 분리]

[Project] 자바 프로젝트 리팩토링 : Library Service(1) [인터페이스 구분, 데이터 영속화, Lombok 적용] - 자바 프로젝트 리팩토링 : Library Service(1) 학원 다닐 때 만들었던 프로젝트들을 하나하나 리팩토링

yermi.tistory.com


728x90
'◈ Refactoring/Mini : Library Service📚' 카테고리의 다른 글
  • [Project] 자바 프로젝트 리팩토링 : Library Service(5) [Book 기능 리팩토링]
  • [Project] 자바 프로젝트 리팩토링 : Library Service(4) [오버로딩을 활용한 도서정보 조회 기능 수정]
  • [Project] 자바 프로젝트 리팩토링 : Library Service(3) [Singleton 오류 해결 및 User 기능 리팩토링]
  • [Project] 자바 프로젝트 리팩토링 : Library Service(2) [Singleton 패턴 적용 및 Dao 분리]
예르미(yermi)
예르미(yermi)
끊임없이 제 자신을 계발하는 개발자입니다👨🏻‍💻
  • 예르미(yermi)
    예르미의 코딩노트
    예르미(yermi)
  • 전체
    오늘
    어제
    • 분류 전체보기 (937)
      • ◎ Java (133)
        • Java☕ (93)
        • JSP📋 (26)
        • Applet🧳 (6)
        • Interview👨🏻‍🏫 (8)
      • ◎ JavaScript (48)
        • JavaScript🦎 (25)
        • jQuery🌊 (8)
        • React🌐 (2)
        • Vue.js🔰 (6)
        • Node.js🫒 (3)
        • Google App Script🐑 (4)
      • ◎ HTML5+CSS3 (17)
        • HTML5📝 (8)
        • CSS3🎨 (9)
      • ──────────── (0)
      • ▣ Framework (67)
        • Spring🍃 (36)
        • Spring Boot🍀 (12)
        • Bootstrap💜 (3)
        • Selenium🌕 (6)
        • MyBatis🐣 (10)
      • ▣ Tools (47)
        • API🎯 (18)
        • Library🎲 (15)
        • JitPack🚀 (3)
        • Jenkins👨🏻 (7)
        • Thymeleaf🌿 (4)
      • ▣ Server (32)
        • Apache Tomcat🐱 (14)
        • Apache HTTP Server🛡️ (1)
        • Nginx🧶 (7)
        • OracleXE💿 (4)
        • VisualSVN📡 (4)
      • ▣ OS : 운영체제 (18)
        • cmd : 명령프롬프트💻 (10)
        • Linux🐧 (8)
      • ▣ SQL : Database (56)
        • Oracle SQL🏮 (26)
        • PL SQL💾 (9)
        • MySQL🐬 (6)
        • MariaDB🦦 (6)
        • H2 Database🔠 (3)
        • SQL 실전문제🐌 (6)
      • ────────── (0)
      • ◈ Human Project (86)
        • Mini : Library Service📚 (15)
        • 화면 설계 [HTML]🐯 (10)
        • 서버 프로그램 구현🦁 (15)
        • Team : 여수어때🛫 (19)
        • Custom : Student🏫 (9)
        • Custom : Board📖 (18)
      • ◈ Yermi Project (40)
        • 조사모아(Josa-moa)📬 (5)
        • Riddle-Game🧩 (6)
        • 맛있을 지도🍚 (2)
        • 어디 가! 박대리!🙋🏻‍♂️ (5)
        • 조크베어🐻‍❄️ (4)
        • Looks Like Thirty🦉 (2)
        • Toy Project💎 (12)
        • 오픈소스 파헤치기🪐 (4)
      • ◈ Refactoring (15)
        • Mini : Library Service📚 (8)
        • 서버 프로그램 구현🦁 (1)
        • Team : 여수어때🛫 (0)
        • 쿼리 튜닝일지🔧 (6)
      • ◈ Coding Test (89)
        • 백준(BOJ)👨🏻‍💻 (70)
        • 프로그래머스😎 (2)
        • 코드트리🌳 (7)
        • 알고리즘(Algorithm)🎡 (10)
      • ◈ Study (102)
        • 기초튼튼 개발지식🥔 (25)
        • HTTP 웹 지식💡 (4)
        • 클린코드(Clean Code)🩺 (1)
        • 디자인패턴(GoF)🥞 (12)
        • 다이어그램(Diagram)📈 (4)
        • 파이썬(Python)🐍 (16)
        • 에러노트(Error Note)🧱 (34)
        • 웹 보안(Web Security)🔐 (6)
      • ◈ 공부모임 (39)
        • 혼공학습단⏰ (18)
        • 코드트리 챌린지👊🏻 (2)
        • 개발도서 100독👟 (8)
        • 나는 리뷰어다🌾 (11)
      • ◈ 자격증 공부 (37)
        • 정보처리기사🔱 (16)
        • 정보처리산업기사🔅 (9)
        • 컴퓨터활용능력 1급📼 (12)
      • ─────────── (0)
      • ◐ 기타 (113)
        • 알아두면 좋은 팁(tip)✨ (46)
        • 개발자의 일상🎈 (44)
        • 개발도서 서평🔍 (10)
        • 개발관련 세미나🎤 (2)
        • 블로그 꾸미기🎀 (9)
        • 사도신경 프로젝트🎚️ (2)
  • 인기 글

  • 최근 댓글

  • 태그

    백준
    html
    Oracle
    자바스크립트
    Java
    jsp
    Error Note
    일상
    spring
    BOJ
    CSS
    꿀팁
    SQL
    코딩 테스트
    백준 티어
    프로그래밍
    javascript
    Project
    코딩
    Database
  • 250x250
  • hELLO· Designed By정상우.v4.10.3
예르미(yermi)
[Project] 자바 프로젝트 리팩토링 : Library Service(1) [인터페이스 구분, 데이터 영속화, Lombok 적용]
상단으로

티스토리툴바