카테고리 없음

스위프트 계산기만들면서 guard let 사용해보자

kingarthur 2024. 6. 5. 19:50

맨 처음 guard let 만난적은 

진짜 아무것도 없는 베이스에서 만나이 만들기 

프로젝트를 진행했을 때다 

 

그때는 왜 사용해야 하는지는 이해는 전혀 못 했지만 지금은 이해간다 

단순하게 따지면 오류를 방지하기 위해서다 

 

class Calculator {
    var input1: Double
    var input2: Double
    
    init(input1: Double, input2: Double) {
        self.input1 = input1
        self.input2 = input2
    }
    
    func sum() -> Double {
        return input1 + input2
    }
    func sub() -> Double {
        return input1 - input2
    }
    func div() -> Double {
        return input1 / input2
    }
    func mul() -> Double {
        return input1 * input2
    }
    
}
let s = Calculator(input1: 10  , input2: 20)
s.div()
s.sum()

내가 처음 원초적인 코드로 만들어보았다. 

하지만 문제에서 원하는 것은 String 받고 결과값을 제출하는 것이기에 

다시 생각하게 되었다. 

 

그래서 첫번째 방식

class cal {
    var input1: String
    var input2: String
    
    init(input1: String, input2: String) {
        self.input1 = input1
        self.input2 = input2
    }
    
    func sum() -> Double {
        if Double(input1) != nil && Double(input2) != nil {
            return Double(input1)! + Double(input2)!
        } else {
            return 0
        }
    }
    
}

let c = cal(input1: "20", input2: "33")
c.sum()

if 문을 통해서 더블을 nil 값일 수있기 때문에 언랩핑을 해줘야한다. 

첫번째는 이렇게 스트링을 더블로 변경해서 문제를 풀어보았다. 

 

class Cal {
    var input1: String
    var input2: String
    
    init(input1: String, input2: String) {
        self.input1 = input1
        self.input2 = input2
    }
    
    func sum() -> Double {
        guard let deInput1 = Double(input1), let deInput2 = Double(input2) else {
            return 0
        }
        return deInput1 + deInput2
    }
    
    
}

let c = Cal(input1: "10", input2: "20")
c.sum()

두번째는 guard let 이용해서 안전하게 호출을 하는 방식이다 

스위프트 권장 사항에도 guard let 사용하길 바란다고 되어 있다 

 

요렇게 나와있다 ㅎㅎㅎ else 필수라고 되어 있다 꼭 사용해야된다 

닐 값이 나올 수 있기 때문에 return 0 값을 주어야 한다 꼭 기억하자 

 

class Cal {
    var input1: String
    var input2: String
    var DeInput1: Double? {return Double(input1)}
    var DeInput2: Double? {return Double(input2)}
    
    init(input1: String, input2: String) {
        self.input1 = input1
        self.input2 = input2
    }
    
    func sum() -> Double {
        guard let deInput1 = c.DeInput1 , let deInput2 = c.DeInput2 else {
            return 0
        }
        return deInput1 + deInput2
    }
    
    
}

let c = Cal(input1: "10", input2: "20")
c.sum()

이번 방법은 리턴값을 미리 더블로 받아서 계산을 하는 방식이다. 

가장 마지막 단계로 정리가 되었다. 

더 깔끔하게 될 수 있을거 같지만 난 여기까지 해보았다. 

 

다양한 방식으로 동일한 코드를 작성 할 수 있다는게 신기하기도 하다

어떤게 더 효율적인 코드인지 알고 싶지만 아직까진 나의 능력밖이다 

나중에 꽤 능력치가 올라가면 유효성 검사도 많이 해보고 싶다.

 

오늘도 많은 것을 배워보고 간다. 내일도 화팅