You are currently viewing [Swift] 비교 연산자와 조건문(Comparison Operators and Conditionals)
swift

[Swift] 비교 연산자와 조건문(Comparison Operators and Conditionals)

비교 연산자와 조건문 (Comparison Operators and Conditionals)

이번 영상에서는 두 값을 비교하여 프로그램의 흐름을 제어하는 방법에 대해 알아보겠습니다.

비교 연산자

두 값을 비교할 때는 다음과 같은 비교 연산자(comparison operators)를 사용합니다. 이 연산자들은 true 또는 false라는 불리언(Bool) 값을 결과로 반환합니다.

기호의미예시결과
==같다 (Equal to)5 == 5true
!=같지 않다 (Not equal to)5 != 4true
>크다 (Greater than)5 > 4true
<작다 (Less than)5 < 4false
>=크거나 같다5 >= 5true
<=작거나 같다5 <= 4false

중요! ⚠️

==는 비교 연산자이고, =는 할당 연산자입니다. ==는 두 값이 같은지 확인하는 반면, =는 변수나 상수에 값을 넣는 역할을 합니다. 두 개를 혼동하지 않도록 매우 주의해야 합니다.


조건에 따라 코드를 실행하는 if

if문은 주어진 조건이 true인지 false인지를 확인합니다. 조건이 true일 경우에만 if문 뒤에 오는 중괄호 { } 안의 코드를 실행합니다.

Swift
if 2 < 3 { // 2는 3보다 작으므로 이 조건은 true 입니다.
    print("이 블록은 실행됩니다.")
}

if 2 > 3 { // 2는 3보다 크지 않으므로 이 조건은 false 입니다.
    print("이 블록은 절대 실행되지 않습니다.")
}

실용 예제: 은행 계좌 출금

은행 계좌에 최소 $5를 남겨야 하는 정책이 있다고 가정해 봅시다.

Swift
let bankBalance: Double = 10.00
let withdrawal: Double = 5.00

처음에는 ‘크다(>)’ 연산자를 사용해 코드를 작성할 수 있습니다.

Swift
if bankBalance - withdrawal > 5.00 {
    print("출금이 허용됩니다.")
} else {
    print("출금이 거부됩니다.") // 이 코드가 실행됩니다.
}

하지만 이 코드에는 논리적 오류가 있습니다. 잔액이 정확히 5.00이 될 경우, 5 > 5false이므로 출금이 거부됩니다. 이 문제를 해결하려면 ‘크거나 같다(>=)’ 연산자를 사용해야 합니다.

Swift
if bankBalance - withdrawal >= 5.00 { // 5 >= 5는 true 입니다.
    print("출금이 허용됩니다.") // 이제 이 코드가 올바르게 실행됩니다.
} else {
    print("출금이 거부됩니다.")
}

여러 조건을 확인하는 if-else if-else 구조

여러 조건을 순차적으로 확인하고 싶을 때 else if를 사용할 수 있습니다.

if-else if의 핵심 규칙:

위에서부터 순서대로 조건을 확인하다가, 가장 먼저 true가 되는 조건의 코드 블록만 실행하고 즉시 전체 구조를 빠져나옵니다. 따라서 조건의 순서가 매우 중요합니다.

예를 들어, 잔액이 정확히 $7이 되면 특별 대출 자격이 주어진다고 가정해 봅시다. 만약 일반적인 조건을 먼저 확인하면, 특별 조건을 확인할 기회조차 얻지 못할 수 있습니다.

Swift
let bankBalance = 17.0
let withdrawal = 10.0
let remaining = bankBalance - withdrawal // 7.0

// 잘못된 순서의 예
if remaining >= 5.0 { // 이 조건이 true (7 >= 5)
    print("출금이 허용됩니다.") // 이 코드만 실행되고 즉시 종료됩니다.
} else if remaining == 7.0 {
    print("특별 대출 자격이 주어집니다!") // 이 코드는 확인조차 되지 않습니다.
}

// 올바른 순서의 예
// 가장 구체적이거나 중요한 조건을 먼저 확인해야 합니다.
if remaining == 7.0 {
    print("특별 대출 자격이 주어집니다!") // 이 코드가 실행되고 종료됩니다.
} else if remaining >= 5.0 {
    print("출금이 허용됩니다.")
} else {
    print("출금이 거부됩니다.")
}

마지막의 else는 위의 어떤 ifelse if 조건도 true가 아닐 때 실행되는 기본(default) 또는 대체(fallback) 경로입니다.


빠른 탈출을 위한 guard

guard문도 조건을 확인하는 데 사용될 수 있습니다. if문과의 가장 큰 차이점은 guard는 조건이 false일 경우, 현재 스코프(예: 함수)를 즉시 벗어나야 한다는 점입니다.

guard는 ‘이 조건이 충족되지 않으면 더 이상 진행할 의미가 없으니 여기서 멈추자’는 ‘사전 조건 검사’ 또는 문지기의 성격이 강합니다.

Swift
func processWithdrawal() {
    // 이 조건이 false이면, else 블록이 실행되어 함수는 즉시 return으로 종료됩니다.
    guard bankBalance - withdrawal >= 5.0 else {
        print("잔액 부족으로 출금 불가. 함수를 종료합니다.")
        return
    }

    // guard문을 통과했다는 것은 출금이 가능하다는 것이 보장된다는 의미입니다.
    // 따라서 여기서부터는 안심하고 출금 관련 로직을 계속 진행할 수 있습니다.
    print("출금 절차를 계속 진행합니다...")
}
  • guard: 계속 진행하기 위해 필수적인 조건을 검사할 때 사용합니다.
  • if-else if: 여러 갈래의 경로 중 하나를 선택하는 일반적인 분기 로직에 사용합니다.