카테고리 없음

[iOS] 2025.03.13 Swift로 계산기 만들기 (트러블 슈팅 TIL)

ioskkt 2025. 3. 13. 20:59

 

// START!!

protocol AbstractOperation {
    func operate(_ a: Int, _ b: Int) -> Int
}
class Calculator {                     // with는 파라미터 레이블, 함수를 호출할 때 사용!
    func calculate(_ a: Int, _ b: Int, with operation: AbstractOperation) -> Int {
        return operation.operate(a, b)
    }
}

class AddOperation: AbstractOperation {
    func operate(_ a: Int, _ b: Int) -> Int {
        return a + b
    }
}
class SubtractOperation: AbstractOperation {
    func operate(_ a: Int, _ b: Int) -> Int {
        return a - b
    }
}
class MultiplyOperation: AbstractOperation {
    func operate(_ a: Int, _ b: Int) -> Int {
        return a * b
    }
}
class DivideOperation: AbstractOperation {
    func operate(_ a: Int, _ b: Int) -> Int {
        return b != 0 ? a / b : 0
    }

}
class ReminderOperation: AbstractOperation {
    func operate(_ a: Int, _ b: Int) -> Int {
        return b != 0 ? a % b : 0
    }
}

let calc = Calculator() // Calculator라는 설계도를 통해 calc라는 실체를 만들어냄.(사용할 준비)
                        // 실체(객체, 인스턴스)가 힙(Heap)의 영역에 저장됨.
let addOp = AddOperation()
let subtractOp = SubtractOperation()
let multiplyOp = MultiplyOperation()
let divideOp = DivideOperation()
let reminderOp = ReminderOperation()

print(calc.calculate(10, 20, with: addOp)) // 파라미터 레이블 with를 통해 호출!
print(calc.calculate(10, 20, with: subtractOp))
print(calc.calculate(10, 20, with: multiplyOp))
print(calc.calculate(10, 20, with: divideOp))
print(calc.calculate(10, 20, with: reminderOp))

 

트러블 슈팅 TIL

 

문제 상황

  • 발생일시 : 2025.03.11
  • 발생환경 : Playground, Swift 5, macOS 사용
  • 기능 : 나누기, 나머지 연산 구현
  • 문제 내용 : 분모가 0 인 경우 오류 발생

 

원인 분석

  • 분모 값 확인  : 분모에 0이 들어간 경우에만 오류 발생.

 

해결과정

  • 분모에 0이 들어온 경우 실행하지 않도록 코드 수정, 코드 경량화
// 초기 코드

  func divide(_ a: Int, _ b: Int) -> Int {
        return a / b
  func reminder(_ a: Int, _ b: Int) -> Int {
        return a % b
        
// 1차 수정 코드
 func divide(_ a: Int, _ b: Int) -> Int {
        if b == 0 {
            return 0
        } else {
            return a / b
        }
    }
    func reminder(_ a: Int, _ b: Int) -> Int {
        if b == 0 {
            return 0
        } else {
            return a % b
        }
    }
    
// 2차 수정코드 (삼항연산자 사용)
 func divide(_ a: Int, _ b: Int) -> Int {
        return b != 0 ? a / b : 0
    }
    func reminder(_ a: Int, _ b: Int) -> Int {
        return b != 0 ? a % b : 0
    }

 

결과

  • 분모에 0이 들어간 경우 0을 반환하여 오류를 해결함.

 

향후 개선 사항

  • 클린코드 작성