<커피숍 만들기>
- 필요한 것 : 손님, 바리스타, 메뉴판(메뉴목록이라는 object가 들어있다), 커피
* 모든 object 는 생명력이 있다고 생각해야 한다.
ㄴ 모든 오브젝트는 역할(부모)을 가진다.
ㄴ역할(부모)을 가지면 책임(메서드)을 가진다.
ㄴ오브젝트는 다른 오브젝트들과 메시지(함수의 호출)를 통해서 협력할 수 있다.
ㄴ오브젝트는 대체될 수 있다.
- 손님 class 만들기
* 책임 : 주문
- 메뉴 class 만들기
* 책임 : 메뉴 선택
* 가격도 같이 return 해줘야 하기 때문에 String으로 만들면 안된다!
- 메뉴 아이템 만들기
- 바리스타 만들기
- 커피 만들기
* 메뉴아이템을 받아야 한다.
뼈대만들기 끝!
* CoffeeApp
package coffeeshop;
import java.util.ArrayList;
public class CoffeeApp {
public static void main(String[] args) {
//메뉴, 바리스타, 손님
Consumer consumer = new Consumer();
Barista barista = new Barista();
MenuItem m1 = new MenuItem("아메리카노", 1500);
MenuItem m2 = new MenuItem("카페라떼", 2500);
MenuItem m3 = new MenuItem("카푸치노", 4000);
ArrayList<MenuItem> menuItems =
new ArrayList<>();
menuItems.add(m1); //시작번지 0번지 부터!
menuItems.add(m2);
menuItems.add(m3);
Menu menu = new Menu(menuItems); //컬렉션에 담긴것
// System.out.println(menuItems.get(1).getName());
consumer.주문("카푸치노", menu, barista);
}
}
* Consumer
package coffeeshop;
public class Consumer {
public void 주문(String menuName, Menu menu, Barista barista) {
// 손님 -> 메뉴판에 메세지를 보낸다. (메뉴 선택해줘)
MenuItem menuItem = menu.메뉴선택(menuName);
if(menuItem == null) {
System.out.println(menuName + "은 우리 커피숍에 없습니다.");
}else {
// 손님 -> 바리스타 메세지를 보낸다. (커피 생성해줘)
Coffee coffee = barista.커피생성(menuItem);
System.out.println("커피 나왔습니다.");
System.out.println(coffee.getName());
System.out.println(coffee.getPrice());
}
}
}
* Menu
package coffeeshop;
import java.util.ArrayList;
import lombok.Data;
@Data
public class Menu {
// 메뉴 아이템 들(컬렉션)
private ArrayList<MenuItem> menuItems;
public Menu(ArrayList<MenuItem> menuItems) {
super();
this.menuItems = menuItems;
}
public MenuItem 메뉴선택(String menuName) {
for (MenuItem menuItem : menuItems) {
if(menuItem.getName().equals(menuName)) {
return menuItem;
}
}
return null;
}
}
* Barista
package coffeeshop;
public class Barista {
public Coffee 커피생성(MenuItem menuItem) {
return new Coffee(menuItem);
}
}
* MenuItem
package coffeeshop;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor // no 매개변수 constructor (빈생성자)
@AllArgsConstructor // 모든 매개변수가 있는 constructor
// 클래스 자료형 : beans = Table(DB)
public class MenuItem {
private String name;
private int price;
}
* Coffee
package coffeeshop;
import lombok.Data;
@Data
public class Coffee {
private String name;
private int price;
public Coffee(MenuItem menuItem) {
this.name = menuItem.getName();
this.price = menuItem.getPrice();
}
}
<단방향 연결 리스트(Linked List)>
연결리스트는 각 노드가 데이터와 포인터를 가지고 한 줄로 연결시키면서 자료를 저장하는 자료구조이다. 배열과 비교 했을때, 데이터를 삽입/삭제 할 경우 데이터의 재구성에 용이하다. 반면 특정 위치의 데이터를 검색하기 위해서는 연결리스트를 처음부터 끝까지 순회해야 하므로 비효율적이다(셀렉트가 느리다).
<ArrayList>
- 배열이랑 동일하다. 차이점은 크기가 가변적이라는 것!
(가변배열)
- 장점 : 크기가 가변적이다.
데이터들이 순차적으로 저장되어 랜덤으로 엑세스 할 수 있다.
검색 효율이 매우 뛰어나다!
- 단점 : 데이터가 삭제 될 수록 빈 공간이 많아진다.
* 웹프로그래밍할때는 배열말고 이거 쓰면 됨
<Generic>
- 클래스 생성시 타입을 결정한다.
- E - Element, K - key, V - value, T - Type, N- Number
* 어떤 데이터를 받을지 모를때는 Object를 사용하면 된다(어떤 데이터도 다 받을 수 있다.)
단, 캐스팅 해야하는 단점이 있음
사용할때 불편하다!
그렇기 때문에 제네릭을 사용하면 된다.
- Wrapper 클래스 : 기본자료형을 class화 시켜주는 기술
* int 자리에는 레퍼런스만 들어갈 수 있다
* 이렇게 바꿔줘야한다.
- Wrapper class 종류
기본형 타입 - Wrapper class
byte - Byte
short - Short
int - Integer
long - Long
float - Float
double - Double
char - Charater
boolean - Boolean
'Java programing > 프로그래밍 언어 활용' 카테고리의 다른 글
Java - json (0) | 2020.04.06 |
---|---|
Java - 접근지정자, 자바 입출력 (0) | 2020.04.06 |
Java - 햄버거 만들기 (composite) (0) | 2020.04.03 |
Java - 추상클래스(abstract) 2, 인터페이스 (0) | 2020.03.31 |
Java - 상속, 추상클래스(abstract) 1 (0) | 2020.03.30 |