# 고민한 점
## ViewGenerator 위치
새로운 뷰를 생성하는 기능을 View가 갖도록 할지, ViewController가 갖도록 할지 고민했습니다.
View를 관리하는 ViewController가 가져야할 기능이라고 판단하여 ViewController에 `ViewGenerator` 인스턴스를 프로퍼티로 갖도록 변경하였습니다.
이에 따라 CalculateItemScrollView의 `didAddSubview` 메서드의 위치도 ViewController 메서드 내부로 변경되어 IBAction의 기능을 더 명확하게 파악할 수 있는 코드가 되었다고 생각합니다.
추가적으로, CalculateItemStackView가 다른 View들의 IBOutlet을 알아야 할 필요가 없게 되었습니다! 👍
```swift
// before
calculateItemStackView.add(currentItem)
inputHandler.addInput(about: currentItem)
```
```swift
// after
guard let currentItemStackView = viewGenerator.generateStackView(about: currentItem)
else { return }
calculateItemStackView.add(currentItemStackView)
calculateItemScrollView.didAddSubview(currentItemStackView)
inputHandler.addInput(about: currentItem)
```
<br/>
## 시스템 예약어 사용 지양하기
저희는 기존에 아래와 같이 시스템 예약어 operator를 ``(backtick)을 사용해서 변수명으로 선언해주었습니다.
```swift!
var operand: String = ""
var `operator`: String = ""
```
아래와 같이 시스템 예약어를 변수명으로 사용해줄 경우 발생하는 문제에 대해서 관련 자료를 찾아 생각 해보고 사용하지 않는 방식으로 변수명을 수정하게 되었습니다.
1. 코드 가독성
2. back ticks 을 붙여야해서 실수하기 쉽다.
3. 너무 노말한 이름을 쓸 경우, 다른 모듈과 겹치기 쉽다.( 시스템 프레임워크 등등 )
4. 변수는 길더라도 명확할수록 좋은 것 같다.

<br/>
## 1회 계산 이후 operand/operator 버튼 기능
저희는 리팩토링을 하면서 `휴대폰에 계산기 기본 어플`과 비슷하게 구현하려고 했습니다.
계산기 앱에서는 계산 결과를 받은 뒤에 `숫자`만 입력하면 새로운 계산이 시작되고, 계산 결과를 받은 뒤에 `연산자 기호`를 입력하면 결과 값을 가지고 계산이 시작되는 부분을 확인했습니다.
기존에는 결과 값을 받은 뒤에 숫자만 입력하면 숫자가 결과에 붙는 방식이었는데 이를 휴대폰 계산기앱 방식 그대로 수정하여 기능을 추가하게 되었습니다.
<br/>
## 파일 구조 컨벤션
* App: 어플리케이션 구동에 관련된 객체 파일
* Controller: ViewController 파일
* Common: 공통적으로 사용하는 파일
* Models: 앱 데이터, 비즈니스 로직 파일
* Views: view 파일
* Tests: test 파일
* 기타: Main Storyboard, Assets, Info.plist 등
---
<br/>
# 조언이 필요한 점
## Model
Model에 ViewGenerator와 InputHandler 파일이 들어있는 것이 조금 어색하게 느껴지기도 합니다.
ViewController에 넣기도 애매해서 위 두 가지 객체에 대한 파일은 어디에 위치시키는게 좋다고 생각하시는지 말씀 부탁드립니다🙏