목차 | |
1. | 실습 |
2. | interface |
1. 실습
▣ Product
package day05;
class Product {
private String name = new String();
private int price;
public Product() {}
public String toString(int id) {
return "(" + id + ")" + "[" + name + " : " + price + "원]";
}
public void Scanner(String name, int price) {
this.name = name;
this.price = price;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
}
▣ ProductMain
package day05;
import java.util.Scanner;
public class ProductMain {
public static void main(String[] args) {
// 키오스크 생성
// 1. 전체 상품리스트 | 2. 상품등록 | 3. 상품삭제 | 4. 상품수정 | 5. 종료
ProductController productController = new ProductController();
Scanner scan = new Scanner(System.in);
int menu = 0;
do {
// 메뉴를 받을 때 필요, 상품을 받을 떄 필요
// 스캐너를 매개변수로 전달
System.out.println("1. 전체 상품리스트 | 2. 상품등록 | 3. 상품삭제 | 4. 상품수정 | 5. 종료");
System.out.println("menu > ");
menu = scan.nextInt();
switch(menu) {
case 1:
System.out.println("--상품정보--");
productController.printProduct();
break;
case 2:
productController.insertProduct(scan);
break;
case 3:
productController.deleteProduct(scan);
break;
case 4:
productController.modifyProduct(scan);
break;
case 5:
System.out.println("키오스크를 종료합니다.");
break;
default:
System.out.println("잘못된 메뉴입니다.");
break;
}
}while(menu != 5);
scan.close();
}
}
▣ ProductController
package day05;
import java.util.Scanner;
public class ProductController {
// Product 배열 생성
// 추가, 삭제, 수정, 리스트보기
private Product[] menu = new Product[10];
private int cnt; // index 역할
public void printProduct() {
if(cnt == 0) {
System.out.println("[등록된 상품이 없습니다.]");
}else {
for(int i = 0; i < cnt; i++) {
System.out.println(menu[i].toString(i+1));
}
}
}
public void insertProduct(Scanner scan) {
char word = 'y';
String word1 = "";
int word2 = 0;
do {
System.out.println("[상품을 등록하시겠습니까? (y/n)]");
word = scan.next().charAt(0); // 1글자 입력
if(word == 'y') {
System.out.println("[상품을 등록해주세요. ex:사탕 500]");
word1 = scan.next();
word2 = scan.nextInt();
if(cnt == menu.length) {
// 5개 더 많은 길이의 배열을 생성
Product[] tmp = new Product[menu.length+5];
// 배열 복사 기존 배열의 0번지부터 새배열의 0번지부터 복사 cnt 개수만큼 복사
System.arraycopy(menu, 0, tmp, 0, cnt);
menu = tmp;
}
if(word1 != null && word2 != 0) {
Product a = new Product(); // 추가 메서드
a.Scanner(word1, word2);
menu[cnt] = a;
cnt++;
}
}else {
if(word == 'n') {
System.out.println("[상품등록을 종료합니다.]");
}else {
System.out.println("[y/n만 가능합니다.]");
}
}
}while(word != 'n');
}
public void deleteProduct(Scanner scan) {
char word = 'y';
int number = 0;
do {
System.out.println("[상품을 삭제하시겠습니까? (y/n)]");
word = scan.next().charAt(0); // 1글자 입력
if (cnt == 0) {
System.out.println("등록된 상품이 없습니다.");
word = 'n';
System.out.println("[상품삭제를 종료합니다.]");
}else if(word == 'y') {
System.out.println("[상품 번호를 입력해주세요.]");
number = scan.nextInt();
if(number > 0 && number <= cnt) {
for (int i = number - 1; i < cnt - 1; i++) {
menu[i] = menu[i + 1];
}
cnt--;
System.out.println("[상품이 삭제되었습니다.]");
} else {
System.out.println("[상품 입력값이 올바르지 않습니다.]");
}
}else {
if(word == 'n') {
System.out.println("[상품삭제를 종료합니다.]");
}else {
System.out.println("[y/n만 가능합니다.]");
}
}
}while(word != 'n');
// arraycopy를 이용한 방법 => 속도가 빠름(성능이 우수)
// int copyCnt = menu.length - index - 1;
// System.arraycopy(menu, index+1, menu, index, copyCnt);
}
public void modifyProduct(Scanner scan) {
char word = 'y';
String word1 = "";
int word2 = 0;
int number = 0;
do {
System.out.println("[상품을 수정하시겠습니까? (y/n)]");
word = scan.next().charAt(0); // 1글자 입력
if (cnt == 0) {
System.out.println("등록된 상품이 없습니다.");
word = 'n';
System.out.println("[상품수정을 종료합니다.]");
}else if(word == 'y') {
System.out.println("[상품 번호를 입력해주세요.]");
number = scan.nextInt();
System.out.println("[상품을 수정해주세요. ex:사탕 500]");
word1 = scan.next();
word2 = scan.nextInt();
if(word1 != null && word2 != 0 && number > 0 && number <= cnt) {
Product a = new Product(); // 추가 메서드
a.Scanner(word1, word2);
menu[number-1] = a;
} else {
System.out.println("[상품 입력값이 올바르지 않습니다.]");
}
}else {
if(word == 'n') {
System.out.println("[상품수정을 종료합니다.]");
}else {
System.out.println("[y/n만 가능합니다.]");
}
}
}while(word != 'n');
}
public Product[] getMenu() {
return menu;
}
public void setMenu(Product[] menu) {
this.menu = menu;
}
}
▷ 출력
2. interface
package day05;
interface Power{
void turnOn();
void turnOff();
}
interface Remocon{
void volUp();
void volDown();
}
// 상속 + 구현
// class Tv enxtends A implements B, C {}
class Tv implements Power, Remocon{
private boolean power;
private int vol;
private int ch;
@Override
public void turnOn() {
// 전원켜기
power = true;
System.out.println("전원이 켜졌습니다.");
}
@Override
public void turnOff() {
// 전원켜기
power = false;
System.out.println("전원이 꺼졌습니다.");
}
@Override
public void volUp() {
vol++;
System.out.println("vol : " + vol);
}
@Override
public void volDown() {
vol--;
System.out.println("vol : " + vol);
}
public void chUp() {
ch++;
System.out.println("ch : " + ch);
}
public void chDown() {
ch--;
System.out.println("ch : " + ch);
}
}
public class Interface01 {
public static void main(String[] args) {
Tv t = new Tv();
t.turnOn();
t.volUp();
t.volDown();
t.chUp();
t.chDown();
t.turnOff();
/* 인터페이스 : 추상메서드와 상수(final)로만 이루어진 것.
* 추상 메서드 : 메서드의 선언부만 있고, 구현부가 없는 메서드
*
* 인터페이스 키워드 : interface
* - 추상클래스 : 대부분 상속을 하기위해 사용
* - 인터페이스 : 메뉴얼 화 / 상속을 하기위해 사용
* - 기능요약서라고 함.
* - 상속키워드 : extends / 구현키웓, : implements
* - 인터페이스는 멤버변수를 포함하지 않기 때문에, 이 부분을 염두에 두고
* 메서드 정리를 해야함.
*
* - 상속 : 다중상속 불가능
* - 구현 : 다중구현 가능
* - 상속 + 구현 동시에 가능
*/
}
}
▷ 출력
'Java' 카테고리의 다른 글
Java 기초(polymorphism)- AWS 풀스택 과정 51일차 (4) | 2024.10.07 |
---|---|
Java 기초(실습)- AWS 풀스택 과정 50일차 (3) | 2024.10.04 |
Java 기초(extends, abstract)- AWS 풀스택 과정 48일차 (2) | 2024.09.30 |
Java 기초(class)- AWS 풀스택 과정 47일차 (1) | 2024.09.27 |
Java 기초(method)- AWS 풀스택 과정 46일차 (2) | 2024.09.26 |