Calculator_3

봄이아빠·2024년 11월 22일
2

Sparta Project

목록 보기
4/10

Trouble

콤마를 넣는 작업 진행 중 처음 콤마가 삽입된 뒤로는 콤마가 더 추가가 안되는 문제가 발생했다.
이 문제를 생각하다 보니 포맷을 지정하는 메서드의 위치도 문제가 있었다.
포맷은 어쨌든 연산이 아닌 ui의 일부니까 연산이 모두 끝난 후 ui를 업데이트 하는 과정에서 처리하는 게 맞았다.

그래서 원래 위치였던 Model - CalculatorData에서
View - DisplayLabel로 옮기면서 계산 시 ,를 다시 없애고 추가하는 과정이 필요없어졌다.


위치를 바꾸면서 문제가 되는 부분을 찾았다.
컴마를 넣기 위해 넣은 count변수를 0으로 초기화 하지 않고 계속 3인지 체크했기 때문에 2번째부터 컴마가 없기 시작했다.
이제 다 해결된 줄 알고 이것저것 넣어봤는데
이번엔 -를 붙이면 안 되는 문제가 발생했다.
거기에 소수점을 제외하면서 처리해야 하는 부분도 남아있었다.

-를 빼기 위해 -가 있는지 검사하고
알고리즘을 공부하면서 알게된 split을 사용해 소수점 이전과 이후로 나누어 컴마를 붙이는 작업을 했다.

  private func formatNum(num: String) -> String {
        let splitNum = num.split(separator: ".")
        let isNegative: Bool = num.contains("-")//음수 처리를 위한 체크
        var intPart: Substring.SubSequence = splitNum[0]
        let decimalPart: Substring.SubSequence? = (splitNum.count > 1 ? splitNum[1] : nil)//정수와 소수부분 체크
        var commaFormatString: String = ""
        var commaCount: Int = 0
        
        if isNegative {//음수라면 - 제거
            intPart.removeFirst()
        }
        
        for num in intPart.reversed() {
            if commaCount == 3 {
                commaFormatString.append(",")
                commaCount = 0
            }
            commaFormatString.append(num)
            commaCount += 1
        }
        
        if let decimalPart = decimalPart {
            commaFormatString = String(commaFormatString.reversed() + "." + String(decimalPart))
        } else {
            commaFormatString = String(commaFormatString.reversed())
        }
        
        if isNegative {
            commaFormatString = "-" + commaFormatString
        }
        
        return commaFormatString
    }

간단한 사칙연산 계산기를 만드는데 생각보다 정말 많은 부분을 신경쓰고 다양한 예외 상황이 발생했다.

이번 과제에 주어진 시간 중 절반 이상은 이론 공부와 알고리즘 공부 그리고 설계를 생각했는데 결과물을 보니 잘못된 선택이었나 싶었다.

머리로는 이렇게 저렇게 하면 되겠다고 막연하게 생각하던 부분이 실제로는 훨씬 복잡한 코드나 구조를 필요로 했다.
내 생각보다 UIKit에서 뷰의 계층을 만들고 예외적인 Stack을 처리하고 기본 프레임워크로는 불만족스러운 상황에 대한 대처가 많은 시간을 필요로 했다.(그래서 대부분 제대로 처리하지 못했다.)
이런 안일한 생각은 결국 시간 관리 실패로 이어졌다.

책으로, 이론 공부로는 이렇게 코드를 짜고 방치하면 안 된다는 걸 배웠지만 일단 만들어야 하다보니 하드코딩된 부분이나 불필요하게 복잡한 코드가 발생한 부분도 있었다.
이러면 안 된다는 걸 알지만 그냥 두고 넘겨야 하니 뭔가 신경쓰이고 괴로웠다.
이번엔 저번 야구 게임에서 처리해두었던 상태변수나 예외처리에 대해서는 아직 한 줄도 적지 못했다.

시간이 있었다면 내가 다 처리했을까 얼마나 시간이 필요했을까 하는 생각을 바탕으로 다음 프로젝트는 좀 더 보수적으로 시간을 계획하고 프로젝트를 시작해야겠다.

그래도 저번 야구 게임을 통해 배운 연관값을 가진 열거형과 클로저 딕셔너리를 이번에 활용해서 생각보다 편하게 계산 로직을 만들었다.
이번 실패를 경험 삼아서 다음 프로젝트는 좀 더 나은 퍼포먼스를 보일 수 있게 잘 갈무리해야겠다.

4개의 댓글

comment-user-thumbnail
2024년 11월 22일

원래 머리론 알지만 가슴은 지맘대로랍니다. 고생하셧어요 닥토닥토

1개의 답글
comment-user-thumbnail
2024년 11월 22일

과제를 제출하고 나서도 콤마를 적용하는 모습 캬

1개의 답글