이번 시간엔 스위프트에서 논리식을 어떻게 평가하는지 알아보자.
false && true //false
AND 연산자는 모두 참이어야지만 true 값을 가지는데, 위의 코드는 앞에 false가 나오기 때문에 false가 나온 순간부터 && 뒤에 값은 검토도 하지 않고 바로 false라는 결론을 내린다.
true || false //true
OR 연산자는 하나라도 true가 있으면 true, 위의 코드는 앞에 true가 등장했으니 || 뒤의 코드는 검토하지 않는다.
스위프트에선 이러한 방식으로 결과 도출에 필요한 최소한의 논리식만 평가하는데, 이러한 방식을 'Short-circuit Evaluation (단락 평가) 방식'이라고 한다.
자 그럼 이러한 규칙을 응용해보자.
var a = 1
var b = 1
func updateA() -> Bool {
a += 1
return true
}
func updateB() -> Bool {
b += 1
return true
}
이런식으로 변수 a와 b의 초기값을 1로 설정해 준 후 각 변수에 1을 더해주는 메소드를 만들어 놓자.
updateA() || updateB()
print(a) //2
print(b) //1
a의 값만 1이 증가하여 2로 변한 것을 확인할 수 있다. 이는 OR 연산자는 둘중에 하나만 참이면 참을 반환하는데, 앞에 있는 updateA() 메소드가 true를 반환하기 때문에 updateB() 메소드를 호출하지 않고 결과적으론 updateA() 메소드만 호출되어서 a만 1 증가한 결과가 나오는 것이다.
한가지를 더 알아보자, 만약 updateA와 updateB의 논리식을 평가하는 과정에서 b의 값도 증가시키길 원한다면 어떻게 해야 할까? 답은 상수에 '대입'을 시켜 사용하는 것이다.
let resultA = updateA()
let resultB = updateB()
resultA || result B
print(a) //2
print(b) //2
이렇게 대입하여 논리식에 사용하게 되면, 이때는 스위프트가 단락평가 방식을 사용하지 않는다. 이러한 특징을 숙지해두고 상황에 맞게 사용하도록 하자.