롯데리아 햄버거로 보는 상속

Jan 28, 2024
롯데리아 햄버거로 보는 상속

1. 롯데리아 앱 만들기

1-1. 기본 버거 만들기 (상태 - 생성자 - getter 는 세트)
notion image
상태를 만들었으면 당연히 세트처럼!!
notion image
생성자도 만들어줌. 초기화 해야하니까!
notion image
getter도 만들어줌!!!! 세트! 상태가 만들어지면 생성자와 getter는 객체지향에서 세트처럼 만들어줘야 한다.
notion image
notion image
name은 매개변수로 받아서 오면 되니까 name 으로 작성
 
1-2. 쉬림프 버거 만들기
notion image
디폴트 생성자가 없어서 오류! 당황하지 말게나
notion image
Burger 클래스한테 상속 받아서 쓰면 되니까 필드값은 material 만 추가하면 됨. alt + insert로 생성자를 만들면 자동으로! super까지 딱!
notion image
당연히 한 세트인 getter도 넣어준다.
notion image
LotteApp 클래스에 새우버거를 만들어줌. (ShrimpBurger는 Burger를 상속 받는다.) Burger b2 = new ShrimpBurger("새우버거", 2000, "새우"); 이미 Burger클래스에 출력문이 있으니, 상속받는 ShrimpBurger는 출력문이 필요없다.
 
1-3. 컴포지션 사용
잘 만들어진 클래스를 상속이 아닌 걸로 사용하고 싶다 > 필요한 클래스들을 ‘상태’로 가짐
notion image
BurgerSet에서 필요한 Burger와 Coke의 클래스를 상태 값으로 가진 것을 확인.
notion image
컴포지션 결합 코드!!! 버거세트가 버거랑 콜라 클래스를 다 가지는것! 만들어진 걸 버거세트한테 전달한다!!
notion image
//결과
 
1-4. 가격 출력
getter로 가격을 출력하려면 이렇게 써야함. 힘들다! > 총 가격을 확인할 수 있는 메소드를 만드는게 편하겠다.
notion image
notion image
결과값이 1000 / 1000 나옴. 복잡하다.
 

<합산해서 표시해보자>

notion image
notion image
notion image
그래서 burger.getPrice()로 호출 가능!
 

 
notion image
Burger burger 는 Burger burger = new Burger()를 매개변수로 받았다는 것과 같은 말
 
 

완성된 코드

package ex06.example7; public class LotteApp { public static void main(String[] args) { Burger b1 = new Burger("기본버거", 1000); //[Burger] Burger b2 = new ShrimpBurger("새우버거", 2000, "새우"); //[Burger, ShrimpBurger] Coke c1 = new Coke("콜라", 1000); System.out.println(); BurgerSet set = new BurgerSet(new Burger("기본버거", 1000), new Coke("콜라", 1000)); System.out.println(); System.out.println("총 가격은 : " + set.getTotalPrice()); // System.out.println(set.getBurger().getPrice()); // System.out.println(set.getCoke().getPrice()); } }
 
package ex06.example7; public class Burger { private String name; private int price; public Burger(String name, int price) { this.name = name; this.price = price; System.out.println(name+"가 만들어졌어요"); } public String getName() { return name; } public int getPrice() { return price; } }
 
package ex06.example7; public class ShrimpBurger extends Burger { private String material; //재료 public String getMaterial() { return material; } public ShrimpBurger(String name, int price, String material) { super(name, price); this.material = material; } }
 
package ex06.example7; public class Coke { private String name; private int price; public Coke(String name, int price) { this.name = name; this.price = price; System.out.println(name + "가 만들어졌습니다."); } public String getName() { return name; } public int getPrice() { return price; } }
 
package ex06.example7; //컴포지션 사용 public class BurgerSet { //has 관계. Burger와 Coke를 가짐 private Burger burger; private Coke coke; //필요한 애들을 상태로 가짐. //생성자로 초기화 할거라 빈값 public BurgerSet(Burger burger, Coke coke) { this.burger = burger; this.coke = coke; System.out.println("버거 세트가 만들어졌어요."); } public int getTotalPrice() { return burger.getPrice() + coke.getPrice(); } public Burger getBurger() { return burger; } public Coke getCoke() { return coke; } }
 
 
Share article

codingb