나만의 계산기 만들기
이전 글에서 계산기 UI를 구현해 보겠다고 했었는데 그동안 과제하느라 오늘에서야 다시 시도해 봤다.
일단 중복되는 코드들을 정리하고 싶어서 오늘은 버튼을 컬렉션으로 묶는 방법을 알아보았다.
코드 일부분
// 생략
@IBOutlet weak var DivisionButton: UIButton!
@IBOutlet weak var MultiplicationButton: UIButton!
@IBOutlet weak var MinusButton: UIButton!
@IBOutlet weak var PlusButton: UIButton!
@IBOutlet weak var ResultButton: UIButton!
@IBAction func DivisionButtonClick(_ sender: UIButton) {
print("DivisionButton click")
}
@IBAction func MultiplicationButtonClick(_ sender: UIButton) {
print("MultiplicationButton click")
}
@IBAction func MinusButtonClick(_ sender: UIButton) {
print("MinusButton click")
}
@IBAction func PlusButtonClick(_ sender: UIButton) {
print("PlusButton click")
}
@IBAction func ResultButtonClick(_ sender: UIButton) {
print("ResultButton click")
}
// 생략
override func viewDidLoad() {
super.viewDidLoad()
// Right Button
self.DivisionButton.layer.cornerRadius = self.DivisionButton.bounds.width / 2
self.MultiplicationButton.layer.cornerRadius = self.MultiplicationButton.bounds.width / 2
self.MinusButton.layer.cornerRadius = self.MinusButton.bounds.width / 2
self.PlusButton.layer.cornerRadius = self.PlusButton.bounds.width / 2
self.ResultButton.layer.cornerRadius = self.ResultButton.bounds.width / 2
self.DivisionButton.clipsToBounds = true
self.MultiplicationButton.clipsToBounds = true
self.MinusButton.clipsToBounds = true
self.PlusButton.clipsToBounds = true
self.ResultButton.clipsToBounds = true
}
}
현실은 위 코드보다 더 많은 중복 코드들이 있었고 전부 버튼과 관련된 코드들이었다.
이 많은 코드들을 어떻게 하면 간단하게 정리하면서도 제 기능을 할 수 있도록 구현할 수 있을지에 대해 고민하다 튜터님을 찾아간 거였는데 컬렉션이라는 접근방식을 알려주셨었기에 곧장 컬렉션을 적용해 보았다.
// 생략
@IBOutlet var rightButtons: [UIButton]!
@IBAction func rightButtonClicked(_ sender: UIButton) {
if let index = rightButtons.firstIndex(of: sender) {
switch index {
case 0:
print("DivisionButton click")
case 1:
print("MultiplicationButton click")
case 2:
print("MinusButton click")
case 3:
print("PlusButton click")
case 4:
print("ResultButton click")
default:
break
}
}
}
// 생략
override func viewDidLoad() {
super.viewDidLoad()
for button in rightButtons {
button.layer.cornerRadius = button.bounds.width / 2
button.clipsToBounds = true
}
}
적용해보고 나니 확실히 코드 길이도 줄었고 가독성도 좋아졌다. 수정 전에는 버튼 하나 찾으려면 한참이었는데... 이렇게 하니까 수정이 필요한 버튼의 코드를 찾아 수정하는 것도 훨씬 수월할 것 같다.
다음은 숫자나 연산 버튼들을 Label에 연결해서 입력 시 화면에서 그 숫자가 확인되도록 만들어봐야겠다. 이걸 해내기 전까지는 UIKit 사용이 처음이라 뭔가 어색하고 막연한 느낌이 있었는데 조금 친해진 것 같아서 기분이 좋다.
그런데, 피드백
피드백 거절은 없나...🥲 숙제 검사받는 기분이라 확인하기까지 한참을 고민하다 에라 모르겠다 하고 확인했다.
그런데 이게 무슨 말...? 분명 과제 Lv4 목표가 'AbstractOperation라는 추상화된 클래스를 만들기'였는데, 사용했다고 생각한 추상화 클래스가 아니었나 보다. 그래도 튜터 님이 적절한 박식이라고 해주셔서 바사삭된 멘털이 회복됐다. 튜터님 최고...👍 그래도 요구한 조건에 맞추지 못했다는 점은 아쉬웠다.
첫 과제 및 피드백 후기
과제도 피드백도 마냥 두렵기만 했는데 네이밍이나, 깃허브 커밋 등에 대한 피드백을 보고 나니 '아, 나 이런 부분이 부족했구나' 하고 느낄 수 있어서 좋았고 이런 피드백이 아니었다면 내가 잘못된 개념을 쭉 가지고 갔을 텐데 미리 알게 되어 다행인 것 같다. 또, 튜터님의 피드백 하나하나를 곱씹다 문득 '이런 과제를 하고 또 피드백을 받고, 매일매일 억지로든 자발적으로든 블로그에 내가 공부한 것들을 정리하는 게 더 좋은 개발자, 더 나은 주니어 개발자가 될 수 있는 계단이지 않나' 하는 생각이 들었다. 돌다리도 두들겨보고 가란다고 한 계단 한 계단 확실히 짚으며 올라가고 싶어졌다. 튜터님 감사합니다!
자, 이제 할 일을 하자
'𝗔𝗦𝗦𝗜𝗚𝗡𝗠𝗘𝗡𝗧 > [내배캠] 2주차 - 계산기' 카테고리의 다른 글
[내일배움캠프] Swift 문법 2주차 기초 과제 - 계산기(04) (2) | 2024.03.25 |
---|---|
[내일배움캠프] Swift 문법 2주차 기초 과제 - 계산기(03) (0) | 2024.03.13 |
[내일배움캠프] Swift 문법 2주차 기초 과제 - 계산기(01) (0) | 2024.03.06 |