Java

Java 기초(interface)- AWS 풀스택 과정 49일차

awspspgh 2024. 10. 2. 18:03
목차
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;
	}
}

 

▷ 출력

출력 (1)

 

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
		 * - 인터페이스는 멤버변수를 포함하지 않기 때문에, 이 부분을 염두에 두고
		 * 	 메서드 정리를 해야함.
		 * 
		 * - 상속 : 다중상속 불가능
		 * - 구현 : 다중구현 가능
		 * - 상속 + 구현 동시에 가능
		 */

	}

}

 

▷ 출력

출력 (2)