금일 스터디 명언 앱 설명 및 구현(~컨테이너)

황인성·2023년 4월 4일
0

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;
    }



}
profile
문제 해결을 위해 끊임없이 파고드는 걸 좋아합니다.

0개의 댓글