[Swift] Short-circuit Evaluation (단락 평가)

Geon·2022년 8월 2일

Swift 기초

목록 보기
4/10
post-thumbnail

이번 시간엔 스위프트에서 논리식을 어떻게 평가하는지 알아보자.

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

이렇게 대입하여 논리식에 사용하게 되면, 이때는 스위프트가 단락평가 방식을 사용하지 않는다. 이러한 특징을 숙지해두고 상황에 맞게 사용하도록 하자.

profile
별에 별 지식 저장해놓고 꺼내먹기📚

0개의 댓글