본문 바로가기

iOS 앱 개발자 프로젝트/개인 프로젝트

[Project] #2 나만의 계산기 만들기(Lv1)

 

공부한 내용을 응용해서 나만의 계산기를 만들어 보기.. 시이..작!

( project 전체보기 >> Lv1-4 나만의 계산기 project )

 

Level 1 : 아래와 같은 사칙연산 클래스를 만들기

 

Int를 사용하여 사칙연산을 수행하는 Calculator

class Calculator {
    func add(_ a: Int, _ b: Int) -> Int {
        return a + b
    }
    
    func subtract(_ a: Int, _ b: Int) -> Int {
        return a - b
    }
    
    func divide(_ a: Int, _ b: Int) -> Double? {
        guard b != 0 else {
            return nil
        }
        return Double(a) / Double(b)
    }
    
    func multiply(_ a: Int, _ b: Int) -> Int {
        return a * b
    }
}

 

※ divide 메서드는 두 개의 정수를 매개변수로 받아들여 나눈 결과를 반환한다. 단, 0으로 나누는 경우에는 nil을 반환하도록 했다. 이 때 반환 타입은 Double?로 선언되어 있으므로, 결과가 정상적으로 반환되지 않는 경우에는 nil을 반환한다. (옵셔널**)

 

→  나중에 해설 영상을 보니 튜터님은 나누기 부분의 반환자는 옵셔널 Double이 아닌, 그냥 Double로 두시고 return 값에 nil 이나 0이 아닌 0.0을 넣으셨다. return 값에 0을 넣으면 무한대(infinit)으로 출력되는데, 0.0을 넣으니 똑똑한(혹은 바보?) swift가 double로 타입을 추론하고 에러를 뱉어내지 않았다. 

    func divide(_ a: Int, _ b: Int) -> Double {
        guard b != 0 else {
            return 0.0
        }
        return Double(a) / Double(b)
    }

 

 


 

 

정수 연산만 필요한 경우라면 Int 타입을 사용할 수도 있지만

나눗셈 연산에서 소수점 이하의 결과가 필요하거나, 연산 결과가 매우 큰 경우에는 Double을 사용하는 것이 더 적합하다.

사칙연산은 일반적으로 부동소수점 숫자를 다루기 때문에 아래와 같이 Double을 사용하는 것이 낫지 않을까.

 

→  나중에 해설 영상을 보니 튜터님께서는 나눗셈 연산을 제외한 덧셈, 뺼셈, 곱셉 모두에서 int 타입을 사용하셨다. 그리고 나누기 연산의 반환자만을 Double로 사용하셨다. guard를 사용하여 값이 무한대처리 되는 부분은 방어하신 방식은 동일했다.

 

위의 연산을 Int 가 아닌 Double을 사용하여 사칙연산을 수행하는 수정된 Calculator

class Calculator {
    func add(_ a: Double, _ b: Double) -> Double {
        return a + b
    }
    
    func subtract(_ a: Double, _ b: Double) -> Double {
        return a - b
    }
    
    func divide(_ a: Double, _ b: Double) -> Double {
        guard b != 0 else {
            print("0으로 나눌 수 없습니다.")
            return 0
        }
        
        return a / b
    }
    
    func multiply(_ a: Double, _ b: Double) -> Double {
        return a * b
    }
}

// Calculator 클래스 사용 예시
let calculator = Calculator()
let sum = calculator.add(5, 3)  // 5 + 3 = 8
let difference = calculator.subtract(7, 2)  // 7 - 2 = 5
let quotient = calculator.divide(10, 2)  // 10 / 2 = 5
let product = calculator.multiply(4, 6)  // 4 * 6 = 24