종료
== 명언 앱 ==
명령) 종료while (true) { System.out.print("명령) "); String command = br.readLine().trim(); // trim() : 혹시 있을지 모를 좌우공백제거된 버전으로 주세요. if (command.equals("종료")) { break; } }
Main 클래스
와 App클래스
를 나눠서 구현한다.등록
== 명언 앱 ==
명령) 등록
명언 : 현재를 사랑하라.
작가 : 작자미상
명령) 종료else if (command.equals("등록")) { System.out.print("명언 : "); String content = br.readLine().trim(); System.out.print("작가 : "); String authorName = br.readLine().trim();
else if
를 추가하여 조건을 추가한다.등록시 생성된 명언번호 노출
== 명언 앱 ==
명령) 등록
명언 : 현재를 사랑하라.
작가 : 작자미상
1번 명언이 등록되었습니다.
명령) 종료
"1번 명언이 등록되었습니다."
만 출력하면 되므로 System.out.println("1번 명언이 등록되었습니다.");
만 넣어주면 된다.등록할때 마다 생성되는 명언번호가 증가
== 명언 앱 ==
명령) 등록
명언 : 현재를 사랑하라.
작가 : 작자미상
1번 명언이 등록되었습니다.
명령) 등록
명언 : 과거에 집착하지 마라.
작가 : 작자미상
2번 명언이 등록되었습니다.
명령) 종료
id 변수
를 생성하고 System.out.println(id++ + "번 명언이 등록되었습니다.");
를 통해 증가할 수 있도록 한다.목록
== 명언 앱 ==
명령) 등록
명언 : 현재를 사랑하라.
작가 : 작자미상
1번 명언이 등록되었습니다.
명령) 등록
명언 : 과거에 집착하지 마라.
작가 : 작자미상
2번 명언이 등록되었습니다.
명령) 목록
번호 / 작가 / 명언
----------------------
2 / 작자미상 / 과거에 집착하지 마라.
1 / 작자미상 / 현재를 사랑하라.
명령) 종료else if (command.equals("목록")) { System.out.println("번호 / 작가 / 명언"); System.out.println("-".repeat(20)); //System.out.println("------------------------"); for (int i = list.size() - 1; i >= 0; i--) { System.out.println(list.get(i)); }
system
내용은 wiseSaying
으로 나누고, 각각에 대해 controller를 추가하여 내용을 삽입한다. wiseSaying.entity
안에 WiseSaying
클래스를 넣는다.삭제
== 명언 앱 ==
명령) 등록
명언 : 현재를 사랑하라.
작가 : 작자미상
1번 명언이 등록되었습니다.
명령) 등록
명언 : 과거에 집착하지 마라.
작가 : 작자미상
2번 명언이 등록되었습니다.
명령) 목록
번호 / 작가 / 명언
----------------------
2 / 작자미상 / 과거에 집착하지 마라.
1 / 작자미상 / 현재를 사랑하라.
명령) 삭제?id=1
1번 명언이 삭제되었습니다.
명령) 종료public void remove(Rq rq) { long id = rq.getIntParam("id", -1); if (id == -1) { System.out.println("id(정수)를 입력해주세요."); return; } WiseSaying wiseSaying = findById(id); list.remove(wiseSaying); System.out.printf(id + "번 명언이 삭제되었습니다.\n"); } private WiseSaying findById(long id) { for (WiseSaying wiseSaying : list) { if (wiseSaying.getId() == id) { return wiseSaying; } } return null; }
삭제?id=1
형식으로 받으므로 위와 다르게 처리해줘야 한다.command.startsWith("삭제")
를 사용하였고Rq클래스
를 만들어 삭제할 대상을 넘겨주었다. lifeQuotesController.remove(new Rq(command));
Rq클래스
는 split()
을 사용하여 ?
일 때를 나누고, &
일 때를 나누고, =
일 때를 나눠서 값을 받은 다음 HashMap에 저장한다.getIntParam함수
를 통해 id에 대한 값을 들고오고 id에 해당하는 명언이 있을 경우 삭제한다.존재하지 않는 명언삭제에 대한 예외처리
== 명언 앱 ==
명령) 등록
명언 : 현재를 사랑하라.
작가 : 작자미상
1번 명언이 등록되었습니다.
명령) 등록
명언 : 과거에 집착하지 마라.
작가 : 작자미상
2번 명언이 등록되었습니다.
명령) 목록
번호 / 작가 / 명언
----------------------
2 / 작자미상 / 과거에 집착하지 마라.
1 / 작자미상 / 현재를 사랑하라.
명령) 삭제?id=1
1번 명언이 삭제되었습니다.
명령) 삭제?id=1
1번 명언은 존재하지 않습니다.
명령) 종료if (wiseSaying == null) { System.out.printf("%d번 명언은 존재하지 않습니다.\n", id); return; }
"명언이 존재하지 않습니다."
문구를 출력한다.== 명언 앱 ==
명령) 등록
명언 : 현재를 사랑하라.
작가 : 작자미상
1번 명언이 등록되었습니다.
명령) 등록
명언 : 과거에 집착하지 마라.
작가 : 작자미상
2번 명언이 등록되었습니다.
명령) 목록
번호 / 작가 / 명언
----------------------
2 / 작자미상 / 과거에 집착하지 마라.
1 / 작자미상 / 현재를 사랑하라.
명령) 삭제?id=1
1번 명언이 삭제되었습니다.
명령) 삭제?id=1
1번 명언은 존재하지 않습니다.
명령) 수정?id=2
명언(기존) : 과거에 집착하지 마라.
명언 : 현재와 자신을 사랑하라.
작가(기존) : 작자미상
작가 : 홍길동
명령) 목록
번호 / 작가 / 명언
----------------------
2 / 홍길동 / 현재와 자신을 사랑하라.
명령) 종료public void modify(Rq rq) throws IOException { long id = rq.getIntParam("id", -1); if (id == -1) { System.out.println("id(정수)를 입력해주세요."); return; } // 입력된 id와 일치하는 명언객체 찾기 WiseSaying wiseSaying = findById(id); if (wiseSaying == null) { System.out.printf(id + "번 명언은 존재하지 않습니다.\n"); return; } System.out.println("명언(기존) : " + wiseSaying.getContent()); System.out.print("명언 : "); String content = br.readLine().trim(); System.out.println("작가(기존) : " + wiseSaying.getAuthor()); System.out.print("작가 : "); String authorName = br.readLine().trim(); wiseSaying.setContent(content); wiseSaying.setAuthor(authorName); System.out.printf("%d번 명언이 수정되었습니다.\n", id); }
setAuthor()
, getAuthor()
로 새로 받은 값을 재정의한다.리팩토링 : 결과의 변경 없이 코드의 구조를 재조정함
service, repository 도입
controller
에서 controller,service, repository
로 세분화한다.Util
클래스는 데이터 영속성을 위해 생성하였다. 소스코드를 외우기보다 전체적인 흐름만 알면 된다.build.gradle
에 testImplementation 'org.assertj:assertj-core:3.11.1'
를 추가한다.파일을 통한 영속성
== 명언 앱 ==
명령) 등록
명언 : 현재를 사랑하라.
작가 : 작자미상
1번 명언이 등록되었습니다.
명령) 등록
명언 : 과거에 집착하지 마라.
작가 : 작자미상
2번 명언이 등록되었습니다.
명령) 목록
번호 / 작가 / 명언
----------------------
2 / 작자미상 / 과거에 집착하지 마라.
1 / 작자미상 / 현재를 사랑하라.
명령) 종료프로그램 다시 시작...
== 명언 앱 ==
명령) 목록
번호 / 작가 / 명언
----------------------
2 / 작자미상 / 과거에 집착하지 마라.
1 / 작자미상 / 현재를 사랑하라.
controller -> service -> repository -> table
data.json 빌드
== 명언 앱 ==
명령) 등록
명언 : 현재를 사랑하라.
작가 : 작자미상
1번 명언이 등록되었습니다.
명령) 등록
명언 : 현재를 사랑하라.
작가 : 작자미상
2번 명언이 등록되었습니다.
명령) 목록
번호 / 작가 / 명언
----------------------
2 / 작자미상 / 과거에 집착하지 마라.
1 / 작자미상 / 현재를 사랑하라.
명령) 삭제?id=1
1번 명언이 삭제되었습니다.
명령) 삭제?id=1
1번 명언은 존재하지 않습니다.
명령) 수정?id=2
명언(기존) : 과거에 집착하지 마라.
명언 : 현재와 자신을 사랑하라.
작가(기존) : 작자미상
작가 : 홍길동
명령) 목록
번호 / 작가 / 명언
----------------------
2 / 홍길동 / 현재와 자신을 사랑하라.
명령) 빌드
data.json 파일의 내용이 갱신되었습니다.
명령) 종료