
소프트웨어를 설명할때 도메인 : 사용자들이 관심을 가지고 있는 특정 분야나 주제. 최소한의 범주
도메인… 축구라는 도메인 일땐, 골기퍼가 포함된게 맞지만, 공격수라는 도메인에선 골기퍼가 있으면 x
우리 앱에는 어떤 기능들이 필요할까… 회의를 함.
이벤트 스토밍. (브레인 스토밍 같은 것). 비슷한 기능을 하는 애들끼리 모아놓으면 범주가 됨
그 범주와 범주끼리 또 묶고… (추상화하고(부모가 되고)), 쪼개고… 그런 식으로 설계를 함.
도메인 주도 설계. ddd 라고 함. 제일 어려움.
우리 앱에 필요한 모든 기능들을 나열해서 범주화 시키는 것
CTO - 헥사라는분
손님이 테이블에 앉아 메뉴판을 잠시 훑어본 후 커피를 주문한다.
>> 해당 부분에서 메뉴판은 손님이 오기 전에 만들어져 있어야하니 static.. 대신, 1개밖에 못만들어지겟지!!
오브젝트 - 커피, 메뉴판, 손님, 바리스타
바리스타는 행위로 makingcoffee를 받것지?
주문이라는 행위는 손님이 받겟지? - 손님이 해당 메서드를 받아야겟지?
고객(명사) - 주문()
-JAVA입장에서 동사는 주문(행위)./ DB입장에서 동사는 TABLE - 행위에 대한 히스토리(저장)도 필요하다.
바리스타(명사) - 커피 생산()
커피(명사)

오브젝트에 저장된 데이터 = heap에 저장 = 메모리에 저장 = 컴터가 꺼지면,.. 끝장. 그러니 DB에 저장해야 한다. 꺼졋다 켜질땐, DB데이터를 불러와서 객체를 초기화시키는 것
코드
new의 책임이 누구껍니까!!!
자기의 행위 - 책임
고객과 바리스타 - 협력 / 오더는 바리스타 - 협력
협력은 그 오브젝트의 메서드를 호출할 수 잇어야함.

일케하면,, 손님이 주문 할때마다 바리스타가 만들어지는 것
의존적인 관계는 무조건 생성자로 넘겨줌!! (손님은 바리스타에게 의존 - 고객이 바리스타에게 커피 만들어줘ㅠㅠ 하고 요청. 바리스타가 없으면 커피를 절대 못먹으니까!! 의존!)

이게 바로 컴포지션
질럿의 new는 게이트웨이. new권한이 게이트웨이한테 잇음

지금 고객이 바리스타가 필요한거니까! 넘겨주는 것임
new하는 위치가 정말 중요
의존적인 관계는 생성자로 주입받음. (컴포지션 문법(의존적)임… has관계. 버거세트에서! 롯데앱에서! 햇음!)

왜 바리스타는 커피를 리턴햇을가? 자기께 아니니까!! 고객꺼니까! 줘야하니까!
package coffee; public class Barista { public Coffee makeCoffee() { //바리스타가 가지고 있는 행위 return new Coffee(); //커피 객체를 받아서 커피를 리턴해줘야 함. 그래서 Coffee //바리스타가 커피를 만드니까, 바리스타가 커피를 new하는 것 } }
package coffee; public class Coffee { public String name = "아메리카노"; }
package coffee; public class Customer { private Barista barista; public Customer(Barista barista) { this.barista = barista; } public void order(String menuName) { //메뉴이름을 매개변수로 받고, 해당하는 이름이 있으면 주는 Coffee coffee = barista.makeCoffee(); //오더는 바리스타랑 협력(오브젝트-오브젝트) 함. System.out.println(coffee.name+"을 받았습니다."); } }
package coffee; import java.util.List; public class Menu { private List<String> item; //컴포지션해서 들고있으면 된다. //메뉴 아이템을 굳이 객체로 만들 필요 x //만약 (아메리카노,1000)이면 오브젝트로 (커스텀 자료형으로) 만들어야함. //아메리카노, 카푸치노, 마끼야토, 에스프레소 public Menu(List<String> item) { this.item = item; } }
package coffee; public class CoffeeApp { public static void main(String[] args) { //커피를 new할 수는 없음. new 권한이 main에 없어서 (질럿-게이트웨이) Barista barista = new Barista(); Customer customer = new Customer(barista); customer.order("아메리카노"); } }
2년차까지는 모방의 연속. 그전까지 절대로 스스로 응용할 수 있는 레벨에 도달하기 힘듬. 스스로 코딩 못한다.
어? 나잘하네? 하면 공부해라. 돈 안오른단 말이다.
Share article