비교 연산자와 조건문 (Comparison Operators and Conditionals)
이번 영상에서는 두 값을 비교하여 프로그램의 흐름을 제어하는 방법에 대해 알아보겠습니다.
비교 연산자
두 값을 비교할 때는 다음과 같은 비교 연산자(comparison operators)를 사용합니다. 이 연산자들은 true
또는 false
라는 불리언(Bool) 값을 결과로 반환합니다.
기호 | 의미 | 예시 | 결과 |
== | 같다 (Equal to) | 5 == 5 | true |
!= | 같지 않다 (Not equal to) | 5 != 4 | true |
> | 크다 (Greater than) | 5 > 4 | true |
< | 작다 (Less than) | 5 < 4 | false |
>= | 크거나 같다 | 5 >= 5 | true |
<= | 작거나 같다 | 5 <= 4 | false |
중요! ⚠️
==는 비교 연산자이고, =는 할당 연산자입니다. ==는 두 값이 같은지 확인하는 반면, =는 변수나 상수에 값을 넣는 역할을 합니다. 두 개를 혼동하지 않도록 매우 주의해야 합니다.
조건에 따라 코드를 실행하는 if
문
if
문은 주어진 조건이 true
인지 false
인지를 확인합니다. 조건이 true
일 경우에만 if
문 뒤에 오는 중괄호 { }
안의 코드를 실행합니다.
if 2 < 3 { // 2는 3보다 작으므로 이 조건은 true 입니다.
print("이 블록은 실행됩니다.")
}
if 2 > 3 { // 2는 3보다 크지 않으므로 이 조건은 false 입니다.
print("이 블록은 절대 실행되지 않습니다.")
}
실용 예제: 은행 계좌 출금
은행 계좌에 최소 $5를 남겨야 하는 정책이 있다고 가정해 봅시다.
let bankBalance: Double = 10.00
let withdrawal: Double = 5.00
처음에는 ‘크다(>
)’ 연산자를 사용해 코드를 작성할 수 있습니다.
if bankBalance - withdrawal > 5.00 {
print("출금이 허용됩니다.")
} else {
print("출금이 거부됩니다.") // 이 코드가 실행됩니다.
}
하지만 이 코드에는 논리적 오류가 있습니다. 잔액이 정확히 5.00이 될 경우, 5 > 5
는 false
이므로 출금이 거부됩니다. 이 문제를 해결하려면 ‘크거나 같다(>=
)’ 연산자를 사용해야 합니다.
if bankBalance - withdrawal >= 5.00 { // 5 >= 5는 true 입니다.
print("출금이 허용됩니다.") // 이제 이 코드가 올바르게 실행됩니다.
} else {
print("출금이 거부됩니다.")
}
여러 조건을 확인하는 if-else if-else
구조
여러 조건을 순차적으로 확인하고 싶을 때 else if
를 사용할 수 있습니다.
if-else if의 핵심 규칙:
위에서부터 순서대로 조건을 확인하다가, 가장 먼저 true가 되는 조건의 코드 블록만 실행하고 즉시 전체 구조를 빠져나옵니다. 따라서 조건의 순서가 매우 중요합니다.
예를 들어, 잔액이 정확히 $7이 되면 특별 대출 자격이 주어진다고 가정해 봅시다. 만약 일반적인 조건을 먼저 확인하면, 특별 조건을 확인할 기회조차 얻지 못할 수 있습니다.
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
는 위의 어떤 if
나 else if
조건도 true
가 아닐 때 실행되는 기본(default) 또는 대체(fallback) 경로입니다.
빠른 탈출을 위한 guard
문
guard
문도 조건을 확인하는 데 사용될 수 있습니다. if
문과의 가장 큰 차이점은 guard
는 조건이 false
일 경우, 현재 스코프(예: 함수)를 즉시 벗어나야 한다는 점입니다.
guard
는 ‘이 조건이 충족되지 않으면 더 이상 진행할 의미가 없으니 여기서 멈추자’는 ‘사전 조건 검사’ 또는 문지기의 성격이 강합니다.
func processWithdrawal() {
// 이 조건이 false이면, else 블록이 실행되어 함수는 즉시 return으로 종료됩니다.
guard bankBalance - withdrawal >= 5.0 else {
print("잔액 부족으로 출금 불가. 함수를 종료합니다.")
return
}
// guard문을 통과했다는 것은 출금이 가능하다는 것이 보장된다는 의미입니다.
// 따라서 여기서부터는 안심하고 출금 관련 로직을 계속 진행할 수 있습니다.
print("출금 절차를 계속 진행합니다...")
}
guard
: 계속 진행하기 위해 필수적인 조건을 검사할 때 사용합니다.if-else if
: 여러 갈래의 경로 중 하나를 선택하는 일반적인 분기 로직에 사용합니다.