# 고민한 점 ## 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. 변수는 길더라도 명확할수록 좋은 것 같다. ![](https://i.imgur.com/ubA1bZw.png) <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에 넣기도 애매해서 위 두 가지 객체에 대한 파일은 어디에 위치시키는게 좋다고 생각하시는지 말씀 부탁드립니다🙏