본문 바로가기
iOS Swift/Study

Swift 계산기 만들기 1탄

by 야고이 2024. 3. 6.
728x90

클래스에 사칙연산 구연하기

    class Calculator {
        var result: Double = 0.0 // 초기값 설정.
        
        // 더하기
        func add(_ number1: Double, _ number2: Double) -> Double {
            result = number1 + number2
            return result
        }
        
        // 빼기
        func substract(_ number1: Double, _ number2: Double) -> Double {
            result = number1 - number2
            return result
        }
        
        // 곱하기
        func multiply(_ number1: Double, _ number2: Double) -> Double {
            result = number1 * number2
            return result
        }
        
        // 나누기
        func divide(_ number1: Double, _ number2: Double) -> Double {
            result = number1 / number2
            return result
        }
    }

이건 구글링 해서 긁어온 코드인데 내가 모르는 부분은 지우고 아는 부분만 남겼다

근데 여기서 의문점 초기화 설정은 왜 하는 걸까?싶어서 초기화 코드 지워 봤다

 

그리고 result = number1 + number2 이렇게 변수?를 다시 설정하는게 괜히 코드를 한줄 더 작성하게 되는게 아닌가 싶어서 나는 삭제함

 

초기값 생성 안할시

class Calculator2 {    
    // 더하기
    func add(_ number1: Double, _ number2: Double) -> Double {
        return number1 + number2
    }
    
    // 빼기
    func substract(_ number1: Double, _ number2: Double) -> Double {
        return number1 - number2
    }
    
    // 곱하기
    func multiply(_ number1: Double, _ number2: Double) -> Double {
        return number1 * number2
    }
    
    // 나누기
    func divide(_ number1: Double, _ number2: Double) -> Double {
        return number1 / number2
    }
}

이대로 값을 넣어보니 문제 없이 실행 된다 그렇다면 왜?? 초기화 설정이 필요한거지 

let calculator2 = Calculator2()

Calculator2 뒤에 괄호를 여는 이유를 아직 모르는 나,,,

안 넣어 봤더니 아래 오류가 떴다

Expected member name or constructor call after type name

멤버 네임이나 생성자를 타입 이름 뒤에 불러와야한다고 한다

 

 

나머지 연산

   func remind(_ number1: Double, _ number2: Double) -> Double {
        return number1 % number2
    }

내가 아는대로 식을 만들어 넣어서 계산해 봤는데

'%' is unavailable: For floating point numbers use truncatingRemainder instead

 

이런 오류가 뜬다

찾아보니 % 모듈러스 연산자는 정수형에서만 정의되기 때문 이란다

그럼 어떻게 해야하는데요

 

에러 문구에는 truncatingRemainder 를 대신 사용하라는데 그럼 얘는 또 뭐예요

 func remind(_ number1: Double, _ number2: Double) -> Double {
//        return number1 % number2
        return number1.truncatingRemainder(dividingBy: number2)
    }

이렇게 코드를 수정하니 문제 없이 나머지가 계산 됐다

근데 보통 나머지라는건 정수 잖아 굳이 더블로 반환 할 이유가 없지?

 

    // 나누기
    func divide(_ number1: Int, _ number2: Int) -> Double {
        print(#function)
        return Double(number1) / Double(number2)
//        return number1 / number2 --> 기존 코드
    }
    
    // 나머지 연산
    func remind(_ number1: Double, _ number2: Double) -> Int {
        print(#function)
        return Int(number1) % Int(number2)
//        return number1 % number2 --> 내가 처음에 쓰고 싶던 코드
//        return number1.truncatingRemainder(dividingBy: number2)--> 더블형 나머지 받는 코드
    }

이거에 대해서는 튜터님께 달려가서 물어봤다

그렇게 바꾼 코드가 이건데 나누기 먼저 보자면

number1,2가 정수형 이고 Double로 반환 한다고 하면 IntDouble로 반환 할 수 없다고 에러가 뜬다

return에서 number1,2Double로 묶어주면 형변형이 되어서 문제 없이 값이 나온다

 

나머지 연산 부분도 같은 원리 이다

% --> 요게 정수에서만 사용 가능하기 떄문에 Int 로 감싸서 계산 하면 된다

 

계산기에 꼭 정수만 넣진 않으니 나누기 부분은 원래 코드로 바꿔주었다

 

일단 여기까지 다음편엔 완성 할 수 있길 !! ㅠㅠ

728x90

댓글