---
# System prepended metadata

title: Untitled

---

### 과일(FruitStore) 타입은 왜 클래스로 구현하라고 요구했을까요? 
- `FruitStore` 값을 저장하고 뿌려주는 역할 (공유개념), 내부프로퍼티를 참조하고 변경할 일 생김
- class는 참조타입이기 때문에 동일한 인스턴스를 가리킬 수 있음(접근의 편의성). 만약 FruitStore 클래스를 싱글톤으로 구현할 경우 `let fruitStore = FruitStore.shared`처럼 변수에 담아도 동일한 인스턴스를 가리킬 수 있다. (구조체는 값이 복사되기 때문에 다른 인스턴스가 생김)
- FruitStore의 경우 **과일의 종류가 다른** FruitStore로 확장할 가능성이 있다.

<br/>

### 과일가게(JuiceMaker) 타입은 왜 구조체로 구현하라고 요구했을까요?
- `JuiceMaker`의 경우 쥬스를 만드는 기능만 필요하고, 내부 프로퍼티의 변경이 없음
-  `JuiceMaker`를 상속하는 경우가 없기 때문에 구조체로 정의하고, 구조체는 컴파일 시점에 어떤 함수를 실행할 지 알 수 있기 때문에 성능을 높일 수 있다.

