Day35 실습프로젝트(Composite)
Composit Pattern
1.컴포짓 패턴의 개념
1) 정의
- 객체들의 트리를 구성하여 부분-전체 계층 구조를 나타내는 패턴이다.
- Component : 공통 인터페이스를 정의하여 단일 객체와 복합 객체가 동일한 방식으로 처리될 수 있도록 한다.
- Leaf : 트리의 말단 요소로 더이상 하위 요소를 가지지 않는 객체를 나타낸다.
- Composite : 하위 요소를 가지는 복합 객체로, 하위 요소들을 관리하고 해당 요소들에게 작업을 전달한다.
2) UML으로 이해하기
- 패턴 적용 전 : 여러객체에서 중복된 코드가 발생하며, 하나의 객체가 여러개의 역할을 한다. 
- 패턴 적용 후 : 기능별/역할별로 분리 
2.MyApp에 적용하기
1) Menu생성하기
- 메뉴 인터페이스만들기
- 추상메서드 execute()가 필요하다.
- 메뉴들의 title을 불러올 규칙이 필요하다. ```java public interface Menu { void execute(); String getTitle(); } ```
- 메뉴 추상클래스 만들기
- 메뉴그룹과 메뉴아이템의 제목이 들어 올때 저장 할 필드 값 title 필요하다.
- title을 불러올 getter가 필요하다.
- 트리노드에서 부모노드의 객체와 같은 확인하는 메서드 equals()와 hash()가 필요하다.
코드 접기/펼치기
```java import java.util.Objects; public abstract class AbstractMenu implements Menu { protected String title; public AbstractMenu(String title) { this.title = title; } @Override public boolean equals(Object object) { if (this == object) return true; if (!(object instanceof AbstractMenu that)) return false; return Objects.equals(title, that.title); } @Override public int hashCode() { return Objects.hashCode(title); } @Override public String getTitle() { return title; } } ```
- 메뉴 그룹만들기
- 추상메서드 execute()를 구현하는 메서드가 필요하다.
- root menuGroup
- root는 parent가 필요없다.
- 메뉴아이템의 값들을 List로 담을 addMenu()메서드가 필요하다.
- 메뉴아이템의 값들을 List에서 제거할 removeMenu()메서드가 필요하다.
- 메뉴아이템의 값들을 List에서 얻어올 getMenu()메서드가 필요하다.
- 메뉴아이템의 갯수를 세는 countMenu()메서드가 필요하다.
- tree menuGroup
- tree는 parent가 필요하여 부모의 parent와 menuPath를 가져오는 메서드가 필요하다.
- addMenu()에서 tree가 상위 그룹이면 setParent를 실행하는 로직을 추가한다.
코드 접기/펼치기
```java import bitcamp.myapp.util.Prompt; import java.util.ArrayList; import java.util.List; import java.util.Stack; public class MenuGroup extends AbstractMenu { private String exitMenuTitle = "이전"; private MenuGroup parent; private StackmenuPath; private List - root menuGroup
- 추상메서드 execute()를 구현하는 메서드가 필요하다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.