동일한 기능을 보장하기 위한 것. 자바의 다형성을 이용하여 코드를 줄이고 유지보수를 용이하게 함.
인터페이스를 통해 객체간의 응집도를 낮춘다.
이론
추상 메서드-선언만하고 구현하지 않은 메서드, 강제적으로 메서드 구현해야함.
상수 - 변수값이 있는데 수정을 못하는 값(절대적:구현받은 객체 수정불가)
정적(static)메서드 - 구현까지 된 메서드이며 무조건 사용해야하며 재정의 불가(절대적)
디폴트 메서드 - 구현까지 된 메서드이며 선택적으로 재정의 가능
사용예
지원하는 인터페이스를 사용 - gui ActionListner 등
내가 직접 정의해서 사용
메인 클래스
package main;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
new ItemADM();
}
}
메뉴클래스
package main;
import java.util.ArrayList;
import java.util.Scanner;
import item.Dduck;
import item.Item_DTO;
import item.Item_INF;
import item.Kimbab;
import item.Ramen;
public class ItemADM {
Scanner in = new Scanner(System.in);
Item_INF nowItem;
Item_DTO m = new Item_DTO();
ArrayList<Item_INF> iList = new ArrayList<>();
public ItemADM() {
for (;;) {
System.out.println("오늘의 메뉴----");
System.out.println("1. 라면");
System.out.println("2. 떡볶이");
System.out.println("3. 김밥");
System.out.println("4. 프로그램종료");
System.out.println("메뉴 선택>>>>");
int sel = in.nextInt();
in.nextLine();
if (sel == 1) {
nowItem = new Ramen();
running(sel);
} else if (sel == 2) {
nowItem = new Dduck();
running(sel);
} else if (sel == 3) {
nowItem = new Kimbab();
running(sel);
}else if (sel == 4) {
break;
}
}
}
public void running(int sel) {
while (true) {
menu();
int sel2 = in.nextInt();
in.nextLine();
if (sel2 == 1) {
showInfo();
} else if (sel2 == 2) {
addItem(sel);
} else if (sel2 == 3) {
payItem();
} else if (sel2 == 4) {
showBasket();
} else if (sel2 == 5) {
break;
}
}
}
private void showBasket() {
for (Item_INF i : iList) {
i.showInfo();
}
}
private void payItem() {
nowItem.pay();
}
private void addItem(int sel) {
if (sel == 1) {
System.out.println("------------");
System.out.println("라면 종류는 두가지 입니다.");
System.out.println("주문할 라면을 입력하세요(쉰라면,진라면)");
String name = in.nextLine();
System.out.println("주문할 수량을 입력하세요");
int cnt = in.nextInt();
in.nextLine();
m.setCnt(cnt);
m.setName(name);
if (name.equals("쉰라면")) {
m.setPrice(1500);
} else {
m.setPrice(2000);
}
nowItem.insert(m);
iList.add(nowItem);
} else if (sel == 2) {
System.out.println("------------");
System.out.println("떡 종류를 입력하세요(밀떡,쌀떡)");
String Dduck = in.nextLine();
System.out.println("맵기를 입력하세요(강/중간/보통)");
String hot = in.nextLine();
String name = Dduck + " / " + hot;
System.out.println("주문할 수량을 입력하세요");
int cnt = in.nextInt();
in.nextLine();
m.setCnt(cnt);
m.setName(name);
m.setPrice(2000);
nowItem.insert(m);
iList.add(nowItem);
} else if (sel == 3) {
System.out.println("------------");
System.out.println("김밥 종류는 세가지 입니다.");
System.out.println("주문할 김밥을 입력하세요(참치/일반/돈까스)");
String name = in.nextLine();
System.out.println("주문할 수량을 입력하세요");
int cnt = in.nextInt();
in.nextLine();
m.setCnt(cnt);
m.setName(name);
if (name.equals("일반")) {
m.setPrice(2000);
} else {
m.setPrice(3000);
}
nowItem.insert(m);
iList.add(nowItem);
}
}
private void showInfo() {
nowItem.showcomment();
}
public void menu() {
System.out.println("------------");
System.out.println("1. 정보보기");
System.out.println("2. 장바구니담기");
System.out.println("3. 계산하기");
System.out.println("4. 주문내역");
System.out.println("5. 이전메뉴");
System.out.println("선택하세요>>>");
}
}
아이템 인터페이스
package item;
public interface Item_INF {
public void showInfo();
public void showcomment();
public void insert(Item_DTO m);
public void pay();
}
아이템 DTO
package item;
public class Item_DTO {
String name;
int price;
int cnt;
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;
}
public int getCnt() {
return cnt;
}
public void setCnt(int cnt) {
this.cnt = cnt;
}
}
라면 클래스
package item;
public class Ramen implements Item_INF{
String kind = "라면";
String comment = "면은 그저 시작일 뿐, 국물이 라면의 완성";
String name;
int price;
int cnt;
@Override
public void insert(Item_DTO m) {
this.name = m.getName();
this.price = m.getPrice();
this.cnt = m.getCnt();
}
@Override
public void pay() {
System.out.println("지불하실 금액은 "+ price * cnt + "원 입니다.");
}
@Override
public void showInfo() {
System.out.println("------------");
System.out.println(kind);
System.out.println(name);
System.out.println("가격: "+ price);
System.out.println("수량: "+ cnt);
}
@Override
public void showcomment() {
System.out.println(comment);
}
}
김밥클래스
package item;
public class Kimbab implements Item_INF {
String kind = "김밥";
String comment = "옆구리가 터저야 제맛이지";
String name;
int price;
int cnt;
@Override
public void insert(Item_DTO m) {
this.name = m.getName();
this.price = m.getPrice();
this.cnt = m.getCnt();
}
@Override
public void pay() {
System.out.println("지불하실 금액은 "+ price * cnt + "원 입니다.");
}
@Override
public void showInfo() {
System.out.println("------------");
System.out.println(kind);
System.out.println(name);
System.out.println("가격: " + price);
System.out.println("수량: " + cnt);
}
@Override
public void showcomment() {
System.out.println(comment);
}
}
떡볶이 클래스
package item;
public class Dduck implements Item_INF {
String kind = "떡볶이";
String comment = "맛에 빠져서 하나 더먹으려니 없어졌네~~";
String name;
int price;
int cnt;
@Override
public void insert(Item_DTO m) {
this.name = m.getName();
this.price = m.getPrice();
this.cnt = m.getCnt();
}
@Override
public void pay() {
System.out.println("지불하실 금액은 "+ price * cnt + "원 입니다.");
}
@Override
public void showInfo() {
System.out.println("------------");
System.out.println(kind);
System.out.println(name);
System.out.println("가격: "+ price);
System.out.println("수량: "+ cnt);
}
@Override
public void showcomment() {
System.out.println(comment);
}
}