고민한 점

ViewGenerator 위치

새로운 뷰를 생성하는 기능을 View가 갖도록 할지, ViewController가 갖도록 할지 고민했습니다.

View를 관리하는 ViewController가 가져야할 기능이라고 판단하여 ViewController에 ViewGenerator 인스턴스를 프로퍼티로 갖도록 변경하였습니다.

이에 따라 CalculateItemScrollView의 didAddSubview 메서드의 위치도 ViewController 메서드 내부로 변경되어 IBAction의 기능을 더 명확하게 파악할 수 있는 코드가 되었다고 생각합니다.

추가적으로, CalculateItemStackView가 다른 View들의 IBOutlet을 알아야 할 필요가 없게 되었습니다! 👍

// before
calculateItemStackView.add(currentItem)
inputHandler.addInput(about: currentItem)
// after
guard let currentItemStackView = viewGenerator.generateStackView(about: currentItem)
else { return }

calculateItemStackView.add(currentItemStackView)
calculateItemScrollView.didAddSubview(currentItemStackView)
inputHandler.addInput(about: currentItem)

시스템 예약어 사용 지양하기

저희는 기존에 아래와 같이 시스템 예약어 operator를 ``(backtick)을 사용해서 변수명으로 선언해주었습니다.

var operand: String = ""
var `operator`: String = ""

아래와 같이 시스템 예약어를 변수명으로 사용해줄 경우 발생하는 문제에 대해서 관련 자료를 찾아 생각 해보고 사용하지 않는 방식으로 변수명을 수정하게 되었습니다.

  1. 코드 가독성
  2. back ticks 을 붙여야해서 실수하기 쉽다.
  3. 너무 노말한 이름을 쓸 경우, 다른 모듈과 겹치기 쉽다.( 시스템 프레임워크 등등 )
  4. 변수는 길더라도 명확할수록 좋은 것 같다.

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →


1회 계산 이후 operand/operator 버튼 기능

저희는 리팩토링을 하면서 휴대폰에 계산기 기본 어플과 비슷하게 구현하려고 했습니다.
계산기 앱에서는 계산 결과를 받은 뒤에 숫자만 입력하면 새로운 계산이 시작되고, 계산 결과를 받은 뒤에 연산자 기호를 입력하면 결과 값을 가지고 계산이 시작되는 부분을 확인했습니다.
기존에는 결과 값을 받은 뒤에 숫자만 입력하면 숫자가 결과에 붙는 방식이었는데 이를 휴대폰 계산기앱 방식 그대로 수정하여 기능을 추가하게 되었습니다.


파일 구조 컨벤션

  • App: 어플리케이션 구동에 관련된 객체 파일
  • Controller: ViewController 파일
  • Common: 공통적으로 사용하는 파일
  • Models: 앱 데이터, 비즈니스 로직 파일
  • Views: view 파일
  • Tests: test 파일
  • 기타: Main Storyboard, Assets, Info.plist 등


조언이 필요한 점

Model

Model에 ViewGenerator와 InputHandler 파일이 들어있는 것이 조금 어색하게 느껴지기도 합니다.
ViewController에 넣기도 애매해서 위 두 가지 객체에 대한 파일은 어디에 위치시키는게 좋다고 생각하시는지 말씀 부탁드립니다🙏