본문 바로가기
네이버클라우드/JAVA 웹 프로그래밍

JAVA 31일차 (2023-07-05) 자바 기초 DAY29_자바 프로그래밍_DAO 객체 도입_개인프로젝트 - 마트 관리 시스템

by prometedor 2023. 7. 5.
## 36. 데이터의 등록, 조회, 수정, 삭제 기능을 캡슐화하기 : DAO 객체 도입

- XxxListener에서 데이터를 조작하는 코드를 캡슐화하여 별도의 클래스로 분리
- 인터페이스로 DAO 객체 사용법을 정의

 

데이터의 등록, 조회, 수정, 삭제 기능을 캡슐화하기 : DAO 객체 도입

ㄴ XxxListener에서 데이터를 조작하는 코드를 캡슐화하여 별도의 클래스로 분리

ㄴ 인터페이스로 DAO 객체 사용법을 정의

ㄴ dao 패키지 생성

 

ㄴ MemberDao 인터페이스 생성

 

MemberDao.java

ㄴ MemberDao 인터페이스 insert 메서드 작성

ㄴ Member 클래스 import 

 

ㄴ MemberListDao 클래스 생성

 

MemberListDao.java

ㄴ MemberDao 인터페이스에 추가한 insert 메서드 구현

 

MemberListDao.java

ㄴ App 클래스에서 해당 코드 복사해오기

ㄴ memberList => list 로 코드 변경

 

MemberListDao.java

ㄴ App 클래스에서 loadJson, saveJson 메서드 복사해오기

 

MemberListDao.java

=>

MemberListDao.java

ㄴ 생성자 추가

ㄴ fileName 을 생성자에 받아와서 loadJson 메서드를 실행하도록 함

 

MemberListDao.java

ㄴ MemberAddListener 클래스에서 해당 코드 복사해옴

ㄴ m => member

 

MemberListDao.java

ㄴ MemberAddListener 클래스에서 해당 코드 복사해옴

ㄴ m => member

 

MemberListDao.java

ㄴ filename을 받아서 해당 파일에서 JSON 데이터를 읽어와 list에 저장하는 초기화할 수 있도록 코드 작성

 

MemberListDao.java

ㄴ floadJson 메서드에 filename 넘겨줄 필요가 없으므로 제거

 

MemberListDao.java

ㄴ insert 메서드에 saveJson 메서드 추가

 

MemberListDao.java

ㄴ 데이터를 등록할 때마다 즉시 파일에 저장

 

MemberAddListener.java

ㄴ MemberAddListener 클래스에서 MemberDao 타입의 memberDao 변수를 선언

 

MemberAddListener.java

ㄴ List<Member> list => MemberDao memberDao

ㄴ super(list) => super(null)

ㄴ memberDao는 MemberDao 타입의 인스턴스 변수로, 생성자의 매개변수로 전달받은 memberDao를 초기화하는 역할을 함

=> 이렇게 초기화된 memberDao는 MemberAddListener 클래스 내에서 사용될 수 있음

 

MemberAddListener.java

ㄴ m.setNo(Member.userId++) 는 memberDao 의 insert 메서드에서 해주므로 제거

ㄴ this.list.add(m) => memberDao.insert(m) 

 

App.java

ㄴ MemberListDao 클래스는 MemberDao 인터페이스를 구현

ㄴ MemberListDao의 인스턴스를 MemberDao 타입으로 참조

ㄴ MemberDao 인터페이스에 선언된 메서드를 호출하여 MemberListDao의 구현

ㄴ MemberListDao 생성자의 매개변수로 "member.json"이 전달시키도록 함

 

App.java

ㄴ memberList => memberDao

 

App.java

ㄴ MemberListListener 는 memberDao 로 먼저 바꾸고 관련 코드 수정해보기

 

MemberListListener.java

ㄴ  MemberDao 타입의 memberDao 변수를 선언

 

MemberListListener.java

ㄴ MemberAddListener 클래스와 비슷하게 수정

 

MemberListListener.java

ㄴ Iterator => List

ㄴ memberDao 에 list 메서드 추가할 예정

 

MemberListListener.java

ㄴ while 문 for 문으로 수정

 

MemberDao.java

ㄴ MemberDao 인터페이스에 MemberListListener 클래스에서 사용할 list 메서드 추가

 

MemberListDao.java

=>

MemberListDao.java

ㄴ MemberDao 인터페이스에 추가한 list 메서드 구현

=> list 에 있는 것을 그대로 리턴

 

App 클래스 실행

ㄴ 실행 시 파일 로드 잘 됨을 확인

 

데이터 추가

ㄴ 데이터 추가 등록 할 경우 잘 실행됨을 확인

 

ㄴ 강제 종료 후 App 클래스 재실행

 

ㄴ 강제 종료 시에도 저장되는지 확인

 

MemberDao.java

ㄴ 리턴타입이 Member 인 findBy 메서드 규칙 추가

 

MemberListDao.java

=>

ㄴ MemberDao 인터페이스에 있는 findBy 메서드 실제 구현

ㄴ AbstractMemberListener 클래스의 findBy 메서드에서 해당 코드 복사해오기

 

App.java

ㄴ memberList => memberDao

 

MemberDetailList.java

ㄴ MemberDao 이용하도록 코드 수정

 

MemberDetailList.java

ㄴ this => memberDao

ㄴ memberDao 에 있는 findBy 메서드 이용하기 위함

 

MemberUpdateList.java

ㄴ MemberDao 이용하도록 코드 수정

 

MemberUpdateList.java

ㄴ this => memberDao

ㄴ memberDao 에 있는 findBy 메서드 이용하기 위함

 

MemberDao.java

ㄴ update 메서드 규칙 추가

 

MemberListDao.java

=>

MemberListDao.java

ㄴ MemberDao 인터페이스의 update 메서드 구현

=>

MemberDao.java

ㄴ 리턴타입을 void => int 로 변경

=>

MemberListDao.java

ㄴ 리턴타입을 void => int 로 변경하여 제대로 수정되면 1, 그렇지 않으면 0이 리턴 되도록 코드 수정

 

MemberUpdateList.java

ㄴ memberDao 의 update 메서드 사용하도록 함

 

App.java

ㄴ memberList => memberDao

 

App.java

ㄴ memberList => memberDao 먼저 변경 후 인터페이스 규칙 추가 및 구현 예정

 

MemberDeleteListener.java

ㄴ AbstractMemberListener 사용하지 않아도 되므로 제거

=>

MemberDeleteListener.java

ㄴ MemberDao 사용하도록 코드 수정

 

MemberDeleteListener.java

ㄴ memberDao 에 delete 메서드 추가할 예정

 

MemberDao.java

ㄴ delete 메서드 추가

 

MemberListDao.java

ㄴ MemberDao 의 delete 메서드 구현

 

MemberDeleteListener.java

ㄴ ActionListener 인터페이스를 따르도록 함 (BreadcrumbPrompt 때문)

 

AbstractMemberListener.java

ㄴ 해당 코드 필요 없으므로 제거

 

MemberAddListener.java

ㄴ 이제 super 생성자 호출할 필요 없음

 

MemberListListener.java

ㄴ 이제 super 생성자 호출할 필요 없음

 

MemberUpdateListener.java

ㄴ 이제 super 생성자 호출할 필요 없음

 

 

AbstractMemberListener.java

ㄴ 해당 코드 복사해서 필요한 곳에 각각 넣어주기

=>

MemberListListener.java

MemberDetailListener.java

AbstractMember.java

ㄴ position == '0' ? "관리자" : "일반직원" 코드는 간단한 코드이므로 굳이 메서드로 만들지 않고 필요한 곳으로 다시 각각 넣어줌

 

AbstractMemberListener.java

ㄴ 이제 해당 코드들은 필요 없으므로 제거

 

MemberListListener.java

ㄴ inputPosition 메서드 사용하지 않으므로 ActionListener 만 상속해도 됨

 

MemberDetailListener.java

ㄴ inputPosition 메서드 사용하지 않으므로 ActionListener 만 상속해도 됨

 

AbstractMemberListener.java

ㄴ protected => static (public 생략)

    => 인스턴스 필드 없으므로 static 으로 해줘도 됨

 

 

ㄴ AbstractMemberListener => MemberActionListener 라는 이름의 인터페이스로 변경

=>

MemberActionListener.java

ㄴ AbstractMemberListener 라는 이름의 추상클래스 대신 MemberActionListener 라는 이름의 인터페이스로 변경

 

MemberAddListener.java

ㄴ 추상 클래스에서 인터페이스로 변경되었으므로 extends => implements 로 변경

ㄴ MemberActionListener 인터페이스에 inputPosition 은 static 으로 되어있으므로 해당 이름을 주면 됨

 

MemberUpdateListener.java

ㄴ MemberAddListener 클래스와 동일하게 수정

 

App.java

ㄴ 해당 코드들 제거해도 됨

 

MemberListDao.java

ㄴ saveJson(list) 를 해줌으로써 데이터를 등록할 때마다 즉시 파일에 저장

 

MemberListDao.java

ㄴ saveJson(list) 를 해줌으로써 데이터를 등록할 때마다 즉시 파일에 저장

 

=> Board, Item 도 동일하게 적용

 

Board, Member, Item 중복 코드 해결

ㄴ JsonDataHelper 클래스 생성

 

JsonDataHelper.java

ㄴ MemberListDao 에 있는 loadJson, saveJson 메서드 잘라내옴

 

JsonDataHelper.java

ㄴ private => public static 

=>

JsonDataHelper.java

ㄴ 파라미터에 filename 다시 추가

 

JsonDataHelper.java

ㄴ private => public static 

 

JsonDataHelper.java

ㄴ 파라미터에 filename 다시 추가

 

MemberListDao.java

ㄴ JsonDataHelper 의 loadJson 이용 => 파라미터에 filename 추가

 

MemberListDao.java

ㄴ JsonDataHelper 의 saveJson 이용 => 파라미터에 filename 추가

 

MemberListDao.java

ㄴ JsonDataHelper 의 saveJson 이용 => 파라미터에 filename 추가

 

MemberListDao.java

ㄴ JsonDataHelper 의 saveJson 이용 => 파라미터에 filename 추가

 

=> Board, Item 도 동일하게 적용

ㄴ BoardDetailListener 에서 service 메서드 마지막에 boardDao.update(board); 코드 추가해주기