라티의 작은 일기장

[30일차] [계산기 앱] 계산기 앱 기능 구현 part.1 본문

Swift

[30일차] [계산기 앱] 계산기 앱 기능 구현 part.1

코드라티 2023. 3. 21. 23:50

 

드디어 챌린지 마지막 날이다...! 오늘은 계산기 앱의 기능 구현을 할 것이다...!

오늘 구현할 기능은 숫자 키패드를 통해 입력하는 숫자를 표시하는 것과, AC 버튼의 입력값 초기화 기능이다.

나머지는 꼭 내일까지 마무리 할거다!

 

그러기 위해서, 메인 VC의 Assistant를 켜주고, 숫자 Label의 Outlet 변수  numberOutputLabel을 선언해주자!

그리고 숫자 버튼에 대한 Action 함수를 선언해줄건데, 10개의 숫자 버튼이 있으니까 10개의 Action함수!!!! ...가 아니라

일단 하나의 Action 함수를 선언하고, 나머지 버튼에 대해서도 동작하도록 대응 작업을 해주려고 한다.

 

일단 '7' 버튼에 대해 Action 함수 tapNumberButton()을 선언해주자.

그리고 나머지 숫자 버튼들도 우클릭 드래그로 해당 Action 함수에 등록시켜주자.

그리고 다음 버튼들에 대해 Action 함수를 선언해주자.

  • AC 버튼 : tapClearButton()
  • . 버튼 : tapDotButton()
  • 나누기 버튼 : tapDivideButton()
  • 곱하기 버튼 : tapMultiplyButton()
  • 빼기 버튼 : tapSubtractButton()
  • 더하기 버튼 : tapAddButton()
  • 등호 버튼 : tapEqualButton()

전부 선언했다면 추후 연산 기능 구현을 위한 열거형 Operation을 선언해주자.

enum Operation {
  case Add
  case Subtract
  case Divide
  case Multiply
  case unknown
}

여기서 unknown case는 연산자가 선택되지 않은 상황을 다루기 위한 것이다.

다음은 클래스 내 프로퍼티들을 선언해보자.

var displayNumber = "" // Label에 표시되는 숫자를 저장
var firstOperand = "" // 첫번째 피연산자
var secondOperand = "" // 두번째 피연산자
var result = "" // 계산 결괏값
var currentOperation: Operation = .unknown // 현재 선택된 연산자

그러면 이제 선언한 Action 함수들을 구현할 준비가 끝난 것이다.

tapNumberButton() 부터 시작해보자.

@IBAction func tapNumberButton(_ sender: UIButton) {
        guard let numberValue = sender.title(for: .normal) else { return }
        if self.displayNumber.count < 9 {
          self.displayNumber += numberValue
          self.numberOutputLabel.text = self.displayNumber
}

눌러진 버튼의 title 값을 옵셔널 바인딩을 통해 저장하고 화면에 표시하되, 9자리가 넘지 않도록 구현하였다.

 

다음은 tapDotButton()이다.

@IBAction func tapDotButton(_ sender: UIButton) {
    if self.displayNumber.count < 8, !self.displayNumber.contains(".") {
      self.displayNumber += self.displayNumber.isEmpty ? "0." : "."
      self.numberOutputLabel.text = self.displayNumber
    }
  }

소숫점을 포함해서 9자리까지 표시하도록 하고, 표시하고 있는 숫자에 이미 .이 있는 경우에는 .을 추가하지 않도록 구현하였다.

 

마지막으로 tapClearButton()이다.

@IBAction func tapClearButton(_ sender: UIButton) {
    self.displayNumber = ""
    self.firstOperand = ""
    self.secondOperand = ""
    self.result = ""
    self.currentOperation = .unknown
    self.numberOutputLabel.text = "0"
  }

AC 버튼의 기능은 사실상 앱을 처음 시작했을 때의 상태로 만들어 주는 것과 같다.

따라서 모든 프로퍼티를 초기화해주고, 표시되는 숫자를 0으로 변경해주면 구현이 끝난다.

 

이제 앱을 빌드해서 결과를 확인해보자.

구현한 기능은 일단 모두 작동하는 것을 확인할 수 있다!

그런데 0을 연속으로 입력하면 00000 처럼 입력되는 문제가 있다.

이건 어떻게 해결해야 하나..?

 

 

 

 

패스트캠퍼스 바로가기 : http://bit.ly/3Y34pE0

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

> 본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.