내부 구조를 살펴보면 이 페이지에서는 사용자 입력 받고, 처리하고 싶은 메뉴 결과에 따라 컨트롤러에 작성한 함수의 실행을 구현한다
package chicken;
import java.util.Scanner;
public class Main {
// main 함수 안에 있던 지역변수를 Main 클래스의 멤버 필드로 변경
static Handler handler = new Handler();
public static void main(String[] args) {
// 사용자와 입출력으로 상호작용하면서 프로그램을 진행하는 코드
int menu;
Scanner sc = new Scanner(System.in);
int result = 0;
do {
System.out.println("1. 메뉴 추가");
System.out.println("2. 메뉴 목록");
System.out.println("0. 종료");
System.out.print("선택 >>> ");
menu = Integer.parseInt(sc.nextLine());
switch(menu) {
case 1:
Chicken ob = input(sc);
result = handler.insert(ob);
System.out.println(result == 1 ? "추가 성공" : "추가 실패");
break;
case 2:
handler.show();
break;
}
} while(menu != 0);
System.out.println("=== 프로그램 종료 ===");
sc.close();
} // end of main
static Chicken input(Scanner sc) {
String brand, store, menu;
int price;
double starPoint;
System.out.print("브랜드 : "); brand = sc.nextLine();
System.out.print("점포명 : "); store = sc.nextLine();
System.out.print("메뉴 이름 : "); menu = sc.nextLine();
System.out.print("가격 : "); price = Integer.parseInt(sc.nextLine());
System.out.print("별점 : "); starPoint = Double.parseDouble(sc.nextLine());
Chicken ob = new Chicken(brand, store, menu, price, starPoint);
return ob;
}
}
main에서 입력을 받은 매개변수로 프로그램의 모든 작업처리는 이곳에서 수행한다
package chicken;
public class Handler { // 데이터를 제어하고, 기능을 포함하는 클래스
// 여러 데이터를 저장하기 위한 배열
Chicken[] arr = new Chicken[10];
// Chicken 타입의 객체를 전달받아서 배열의 빈 칸에 저장하는 기능(메서드)
int insert(Chicken ob) {
// data 배열에서 빈칸(null)을 찾아서, 추가하고 반복 종료
for(int i = 0; i < arr.length; i++) {
if(arr[i] == null) {
arr[i] = ob;
return 1; // 1개가 추가되었습니다
}
}
return 0; // 0개가 추가되었습니다 (빈칸이 없으면 추가할 수 없음)
}
// data 배열의 데이터 중 빈칸이 아닌것만 화면에 출력하기
void show() {
for(int i = 0; i < arr.length; i++) {
if(arr[i] != null) {
arr[i].show();
}
}
}
}
객체의 데이터를 보관하는 페이지
package chicken;
/*
* 배달 앱에서 주문 가능한 치킨 메뉴의 목록을 하나의 객체로 구성하고 싶다
* 무슨 속성이 필요할까?
*
* 브랜드, 매장(ㅇㅇ점), 메뉴이름, 가격, 별점
* 속성이 정리되면, 클래스의 멤버 필드로 구성하면 된다
*
* 속성 중심의 객체를 표현할 클래스를 작성할 때
* 여러 객체를 생각하면서 구성하지 않고,
* 단일 객체를 기반으로 생각하면서 구성한다
*/
public class Chicken {
// 클래스의 멤버 필드는 초기값을 지정하지 않아도, 0에 맞는 값으로 초기화된다
String brand;
String store;
String menu;
int price;
double starPoint;
// 객체를 생성할 때, 필요한 초기 작업(필드 초기화)을 수행할 생성자를 작성한다
// 정의된 생성자를 통하지 않고서는, 객체를 생성할 수 없다 !!
Chicken(String brand, String store, String menu, int price, double starPoint) {
// this는 생성된 객체 자기자신을 가리키는 0번째 매개변수이다
this.brand = brand;
this.store = store;
this.menu = menu;
this.price = price;
this.starPoint = starPoint;
}
// 속성이 정리되면 관련된 함수를 메서드로 작성한다
void show() {
String form = "%s %s) %s\t%,d원 (☆%.1f)"; // 서식만 지정
form = String.format(form, brand, store, menu, price, starPoint); // 값 넣기
System.out.println(form); // 출력
}
}