Main클래스
package pakcage1;
public class Main {
public static void main(String[] args) {
Container.init();
// Container의 init메서드를 호출함(스캐너 기능이 부여된 메서드)
App.run();
// run메서드를 static으로 만들어주었고,
// 인스턴스화 되지 않은 App 클래스를 통해서 바로 접근할 수 있음.
Container.close();
// Container의 close메서드를 호출함(스캐너 기능을 종료하는 메서드)
// 스캐너를 종료 스캐너가 계속 실행되고있으면 메모리소요가 크기 때문에 종료까지 정해줌.
}
}
App클래스
package pakcage1;
import pakcage1.system.controller.SystemController;
import pakcage1.wiseSaying.controller.WiseSayingController;
public class App {
public static void run() { // run메서드 실행 세부로직을 실행하는 메서드
SystemController systemController = new SystemController(); // 각 객체에 할당된 기능(종료기능) 메서드를 호출하기 위한 클래스 인스턴스화
WiseSayingController wiseSayingController = new WiseSayingController(); // 각 객체에 할당된 기능(등록, 목록 기능) 메서드를 호출하기 위한 클래스 인스턴스화
System.out.println("===명언 앱==="); // 명언앱 안내문
while (true) { //
System.out.print("명령 : "); // 명령 안내문
String command = Container.getScanner().nextLine().trim();
// 문자열자료형의 command변수에 스캐너에 한줄 입력되는걸 공백제거까지 해서 넣어주겠다.
if (command.equals("종료")) { // if 문이 시작되는데, command에 종료라는 값이 입력되면,아래로직을 실행한다.
// .equals로 변수의 '값'을 비교해준다.
systemController.종료();
break; // while 반복문 탈출
} else if (command.equals("등록")) { // command에 등록이라는 값이 입력되면, 아래 로직을 실행한다.
wiseSayingController.등록();
} else if (command.equals("목록")) {
wiseSayingController.목록();
} else if (command.equals("도움말")) {
System.out.println("1. 종료"); // 종료 안내문
System.out.println("2. 등록"); // 등록 안내문
System.out.println("3. 목록"); // 목록 안내문
System.out.println("=============="); // 구획선 안내문
} else {
System.out.println("유효하지 않은 명령입니다.");
}
}
}
}
WiseSaying 클래스
package pakcage1.wiseSaying.entity;
public class WiseSaying {
private int id; // 목록 기능에서 '번호' 값을 담기 위한 WiseSaying클래스의 인스턴스 변수
private String wiseSaying; // 목록 기능에서 '명언' 값을 담기 위한 WiseSaying클래스의 인스턴스 변수
private String authorName; // 목록 기능에서 '작가' 값을 담기 위한 WiseSaying클래스의 인스턴스 변수
public WiseSaying (int id, String wiseSaying, String authorName) { // 각 번호, 명언, 작가 값을 매개변수로 받아줌.
// 밑의 과정은 인스턴스 변수 안에 매개변수를 할당하는 과정
// 그 이유는 인스턴스 변수가 private로 선언되었기 때문에 get메서드를 이용해서 불러와야 하기 때문.
this.id = id;
this.wiseSaying = wiseSaying;
this.authorName = authorName;
}
public int getId() { // WiseSaying클래스의 인스턴스 변수 id를 다른 클래스에서 호출하기 위한 get메서드
return id;
}
public String getWiseSaying() { // WiseSaying클래스의 인스턴스 변수 wiseSaying를 다른 클래스에서 호출하기 위한 get메서드
return wiseSaying;
}
public String getAuthorName() { // WiseSaying클래스의 인스턴스 변수 authorName를 다른 클래스에서 호출하기 위한 get메서드
return authorName;
}
}
SystemController 클래스
package pakcage1.system.controller;
public class SystemController {
public void 종료() {
System.out.println("프로그램이 종료되었습니다."); // 프로그램이 종료되었다는 안내문 출력
}
}
WiseSayingController 클래스
package pakcage1.wiseSaying.controller;
import pakcage1.Container;
import pakcage1.wiseSaying.entity.WiseSaying;
import java.util.ArrayList;
public class WiseSayingController {
int id = 1; // int 형으로 id라는 변수를 1로 초기화 명언의 넘버링을 위해 선언된 변수
ArrayList<WiseSaying> arrlist = new ArrayList<>();
// ArrayList에 WiseSaying 을 타입으로 지정해서 arrlist는 WiseSaying클래스에 있는 정보를 담을 수 있는 (가변적)배열이 됐다.
public void 등록() { // 등록 기능을 담고있는 메서드(App클래스의 if else문 안에서 호출됨.)
System.out.printf("명언을 입력하세요 : "); // 명언을 입력하라는 안내문
String wiseSay = Container.getScanner().nextLine().trim(); // 스캐너로 한 줄로 공백까지 제거해서 입력받은 값이
// 문자열 자료형 wiseSay 변수에 들어간다.
System.out.printf("작가를 입력하세요 : "); // 작가를 입력하라는 안내문
String author = Container.getScanner().nextLine().trim(); // 스캐너로 한 줄로 공백까지 제거해서 입력받은 값이
// 문자열 자료형 author에 들어간다.
arrlist.add(new WiseSaying(id, author, wiseSay));
System.out.printf("%d번 명언이 등록되었습니다.\n", id); // 위에서 선언한 id값이 출력문에 들어가서 등록되었다고 안내문 출력
id++; // id가 1씩 증가한다. 왜? : 명언이 추가될수록 값이 올라가야 누적된 값이 표시되기 때문에
}
public void 목록() { // 목록 기능을 담고있는 메서드(App클래스의 if else문 안에서 호출됨.)
System.out.println("번호 / 작가 / 명언"); // 번호 / 작가 / 명언 안내문
System.out.println("=".repeat(30)); // 구획선 안내문(.repeat를 사용해서 해당 문자열을 몇 번 반복해줄지 지정 가능.)
for (int i = arrlist.size() - 1; i >= 0 ; i--) { // i 안에 배열의 길이값만큼 할당하고 i를 0 이하로 떨어지지 않게 감소시킨다.
WiseSaying wiseSaying = arrlist.get(i); // 그리고 i값을 해당 배열의 인덱스값으로 지정하면 인덱스값이 바뀔때마다 해당 배열의 값을 끝에부터 하나씩 불러올 수 있다.
System.out.printf("%d / %s / %s\n", wiseSaying.getId(), wiseSaying.getAuthorName(), wiseSaying.getWiseSaying());
// 해당 배열의 번호 / 작가 / 명언 내용을 각각 담고있는 get메서드를 인스턴스화 한 클래스(WiseSaying)를 통해서 불러온다.
}
}
}
Container 클래스
package pakcage1;
import java.util.Scanner;
public class Container {
private static Scanner sc;
public static void init () {
sc = new Scanner(System.in); // 스캐너 실행(시스템으로 값을 입력받겠다.)기능을 할당.
}
public static void close() {
sc.close(); // 스캐너를 종료해주는 메서드(.close)
}
public static Scanner getScanner () { // 할당된 스캐너 변수 sc를 리턴할 수 있는 Scanner 타입 메서드
return sc;
}
}