🐈⬛ github :
JavaSpringStudy/OrderSystem at main · ceginer/JavaSpringStudy
단순하게 그림으로 나타냈을 때는 이렇게 생겼다.
데코레이터를 설명할 때는 아래와 같은 그림으로 설명되어지는데, 나는 Menu를 A에 대입하고, B를 BasicMenu 라고 생각하며, Topping을 부가 기능이라 생각하여 하였다. 하지만 그 옆의 그림과 같이, 보통은 부가기능을 Decorator 클래스라 하였을 때 Decorator 클래스 밑에 휘핑, 자바칩, 초코칩, 샷추가 등의 여러 부가기능의 클래스를 따로 만들어 형성하는데 나의 경우는 그렇게 하지 않았다.
왜냐면 Topping이라는 부가기능에서 그냥 이름,가격이 이미 형성되있는 객체인데 굳이 여러개의 클래스로? 라는 생각을 했기도 했고, 내가 만든 콘솔 창 프로그램은 추가되거나 수정될 일이 거의 없고, 이미 메뉴이름, 가격이 이미 배열객체에 넣은 채로 시작되었기 때문에 밑에 클래스를 더 추가 하지 않은 채로 Topping 클래스에 모든 정보를 넣어 놓았다.
사실 데코레이터를 진행할 때 가장 중요하면서 핵심적이었던 내용은,
핵심 기능과 부가기능 클래스를 만든 뒤에, 부가기능 클래스가 핵심기능을 품어주는 것이 가장 주요한 기능인 것 같다.
Menu menu = new topping ( new basicMenu() );
→ 핵심기능을 basicMenu
클래스, 부가기능을 topping
클래스라고 가정하고, 그 둘을 모두 포함하는 핵심 메소드만을 넣어놓은 Menu
클래스가 있을 때 위 코드가 가장 핵심이 아닌가 싶다.
생성자를 통해 필드를 핵심기능의 클래스로 초기화 시켜, 핵심기능의 클래스를 사용할 수 있도록 하자!