비트캠프/실습

231129 myapp-app-06 실습 ( 로컬변수, 클래스변수, 반복문)

보더96 2023. 11. 29. 18:12
package mystudy.myapp;

import java.util.Scanner;

public class App {

  static final String ANSI_CLEAR = "\033[0m";            // 초기화
  static final String ANSI_BOLD_RED = "\033[1;31m";      // 볼드체 + 빨간색글씨
  static final String ANSI_RED = "\033[0;31m";           // 빨간색글씨
  static final String APP_TITLE = ANSI_BOLD_RED + "[과제관리 시스템]" + ANSI_CLEAR;
  static final String[] MENUS = {
      "1. 과제",
      "2. 게시글",
      "3. 도움말",
      ANSI_RED + "4. 종료" + ANSI_CLEAR
  };

  public static void main(String[] args) {

    // 메서드 하나로 20줄 넘는 것을 한줄로 처리가능하다!!
    printMenu();

    Scanner scanner = new Scanner(System.in);

    loop:
    while (true) {
      String input = prompt(scanner);

      switch (input) {
        case "1":
          System.out.println("과제입니다.");
          break;
        case "2":
          System.out.println("게시글입니다.");
          break;
        case "3":
          System.out.println("도움말입니다.");
          break;
        case "4":
          System.out.println("종료합니다.");
          break loop;
        case "menu":
          // 코드를 기능 단위로 묶어 메서드로 정의하면
          // 메서드의 이름을 통해 해당 기능을 쉽게 유추할수 있어 유지보수에 좋다.
          printMenu();
          break;
        default:
          System.out.println("올바른번호를 입력하십시오.");
      }
    }
    scanner.close();
  }

  static void printMenu() {
    // ANSI 코드와 App 제목, 메뉴를 저장한 변수를 메서드 안에 두는 대신에
    // 클래스 블록안에 두면
    // printMenu()를 호출할때마다 변수를 만들기 않기 때문에 실행 속도나 메모리 부분에서
    // 훨씬 효율적이다.
    // 보통 메서드 호출 될때 마다 값이 바뀌는 변수가 아니라 고정 값을 같는 변수인 경우
    // 메서드 밖에 두는 것이 좋다.
    //
    System.out.println(ANSI_BOLD_RED + APP_TITLE + ANSI_CLEAR);
    System.out.println();

    for (String menu : MENUS) {
      System.out.println(menu);
    }
  }

  static String prompt(Scanner scanner) {
    System.out.print("> ");
    return scanner.nextLine();
  }
}

 

 

static final   =>  static 변수로 뒤에 final이 붙이면 변수에서 상수로 바뀌어 값을 변경할수 없다.

 

printMenu();  =>  변하지 않는 값을 메서드로 만들어 사용한다.

 

Scanner scanner = new Scanner(System.in);

scanner.nextLine();   /   scanner.nextInt() 

      =>     사용자가 입력한 한 줄의 문자열을 읽어오는 메서드 호출로,  Scanner 클래스의 nextLint()메서드이다.
               System.in 을 사용해 표준 입력에서 데이터를 읽어온다.

 

 

loop: 를 주어 { } 안에 를 지정하고 while문으로 반복문을 만든다.

while문은 무한 반복문이니 break를 지정해주고 종료합니다.라는 "4"가 나오게 되면 loop를 멈추게 

break loop; 를 해준다 그러면 loop{ } 를 지정해주었던 반복문이 멈추게 된다.

 

while 문에서 break; 를 사용하지 않으면 1234 전체가 출력된다 break는 필수!

 

scanner.close() 는 scanner객체를 닫는 메서드로, 더이상 입력을 받을수 없게 된다.

                       =>   이 메서드는 문장이 끝나면 닫아주는것을 습관화 해야한다.

 

static void printMenu() {}  => 변하는 값들을 모아둔 것으로 변하지 않은 것들은 static final로 밖으로 빼두었다. 

printMenu를 호출할때마다 변수를 만들지 않기 때문에 메모리 부분에서 훨신 효율적이다.

 

static String prompt()  =>  사용자에게 프롬프트를 표시하고, 사용자가 입력한 값을 문자열로 반환

                                    사용자가 입력한 값을 문자열로 반환해 간단한 입력 메서드를 만들수 있다.