실습 소개

6주차 실습은 제시된 클래스들을 적절히 추상화하여 리팩토링하는 과제입니다.

피자 클래스 추상화, 세트 메뉴 클래스 추상화 그리고 이 둘을 다시 한번 더 추상화하는 총 3가지의 작업으로 구성되어있습니다.

실습 간 주요 제한 사항들은 아래와 같습니다.

피자 클래스 추상화하기

기존 설계 살펴보기

original_class_diagram.png

위 그림은 실습에서 제공된 기존 코드들을 클래스 다이어그램으로 나타낸 것입니다.

기존 설계의 문제점들

public boolean addBacon() {
	if (isValid()) {
		return false;
	}
	
	this.toppings.add(Topping.BACON);
	++this.meatCount;
	return true;
}
    
public boolean addPeperoni() {
	if (isValid()) {
		return false;
	}
	
	this.toppings.add(Topping.PEPERONI);
	++this.meatCount;
	return true;
}

// 그 외 다른 addXXX 메서드들 다수

기존 설계에서는 위 코드 예시와 같이, 토핑을 추가하는 로직이 중복되어 존재합니다.

cheeseCount 같은 특정 토핑의 개수를 별도록 추적하는 변수들은, toppings 리스트의 size 메서드나 순회를 통해 충분히 계산 가능한 정보를 중복 저장하고 있습니다. 이는 추후 유지보수 시 데이터 일관성을 깨뜨리기 쉬운 구현입니다.