의사 결정(Making Decisions)
컴퓨터가 "생각"을 할 수 있을까요? 이것은 자주 논쟁이 일어나는 쟁점이기도 합니다. 컴퓨터는 결정을 내리는 부분에서 일을 잘합니다. 어떤 앱이든 필수적인 것 중 하나가 결정을 내리는 것이며 무엇을 하는지 어디로 가는지 아는 것이 프로그램의 흐름에서 매우 중요합니다.
프로그램 흐름은 "참이면 이곳으로 가고, 참이 아니면 저쪽으로 간다" 또는 "참이 아니면 참일 때까지 이 작업을 계속해서 수행한다."와 같은 하나의 긴 결정의 연속입니다. 우리의 삶도 이렇게 많은 결정을 해야 하는 일들로 가득 차 있으며, 때로 생각하지 않고 결정을 내리기도 합니다. 어떤 신발을 신을지, 몇 시에 출근할지, 또는 언제 길을 건너는 것이 좋을지 등 우리가 매일 마주치는 결정의 순간들입니다.
Mac 컴퓨터, iPhone 또는 iPad도 다르지 않습니다. Swift로 앱을 개발할 때 이 기기들은 프로그램으로 무엇을, 언제 해야 하는지를 다양한 방법으로 알려줍니다. 이번에는 Swift의 제어 흐름 구문을 알아보도록 하겠습니다.
IF 의 단호함(The Decisiveness of "IF")
"만약"이라는 단어는 우리 주변 어디에나 있습니다. 우리가 말을 할 때 그리고 일상적인 결정을 내릴 때에도 항상 존재합니다. 아래 예제처럼 "만약(if)" 이라는 단어는 문장의 앞에 위치하고 그 다음에 "그렇다면(then)"도 포함하고 있습니다.
If the light is red, then apply the brake.
(만약 신호등이 붉은색이면 브레이크를 밟습니다.)
If the coffee is hot, then drink it.
(만약 커피가 뜨거우면 마십니다.)
Swift 는 영어처럼 많은 말을 하는 것은 아니지만, 간단하고 읽기 쉽습니다. Swift에서 코드에 조건문을 추가하는 방법은 두 가지가 있습니다. 바로 if 문과 switch 문입니다. 조건의 수가 많지 않을 때에는 보통 if문을 사용합니다. 한편, 조건의 종류가 다양하고 복잡할 때에는 switch문이 적합합니다. 아래 예제는 Swift의 일반적인 if 문입니다.
if predicate {
// do something
}
Switch가 조건문을 평가하고 이 조건문이 참이면 {} 괄호로 묶인 선언문을 실행합니다. 반대로 조건문이 거짓이면 괄호 안의 코드는 무시됩니다.
또한 "그렇지 않으면(else)"라는 단어도 포함할 수 있습니다. if 문을 사용할 때에는 else 절도 사용할 수 있는데, 여기에는 if 조건이 거짓일 때 실행되는 코드가 들어갑니다. else 키워드를 사용하여 나타냅니다. 앞의 예제를 조금 더 늘려보겠습니다.
If the light is red, then apply the brake, else stomp on the accelerator!
(만약 신호등이 붉은색이면 브레이크를 밟고, 그렇지 않으면 엑셀을 밟습니다.)
If the coffee is hot, then drink it, else throw it away.
(만약 커피가 뜨거우면 마시고, 그렇지 않으면 버립니다.)
예제에서는 조건문의 참의 여부에 따라 하나의 조건문과 두 개의 결과를 가지고 있습니다. 신호등이 붉은색입니까? 커피가 뜨겂습니까? 만약 그렇다면 무엇인가를 실행하십시오. 그렇지 않다면 다른 무엇인가를 실행합니다. 프로그래밍 언어에서는 이런 구문을 if/then/else 절이라고 부릅니다.
플레이그라운드에서 if 사용하기▲
Swift에서 표현되는 if/then/else 절을 사용하는 일반적인 예입니다.
if predicate {
// do something
}
else {
// do something
}
Swift 가 if 절을 만나면 조건문을 평가합니다. if 문의 결과가 참이면 첫 번째 괄호 안의 코드를 실행합니다. "else"절이 다른 경우의 수를 제공하고 if 문이 거짓일 경우 두 번째 괄호 안의 코드가 실행됩니다.
Swift의 언어로 신호등에 비유해서 만들어 보겠습니다.
var trafficLight = "Red"
if trafficLight == "Red" {
print("Stop!")
}
else {
print("Go!")
}
변수 trafficLight를 선언하고 "Red"문자열에 할당했습니다.
if문을 사용하여 변수 trafficLight가 "Red" 문자열과 비교합니다. trafficLight를 "Red"값에 할당했으니 여기에서는 참입니다.
결과를 보여주는 사이드바에는 trafficLight와 "Red" 문자열을 비교한 것이 참이기 때문에 "Stop!"이 보일 것입니다.
그럼 사이드바에 "Stop!" 대신 "Go!"가 표시되게 하려면 어떻게 해야 할까요?
else절 실행▲
trafficLight 변수를 "Red" 이외의 다른 것에도 설정할 수 있습니다. trafficLight를 "Red"와 비교한 결과가 거짓이기 때문에 예상했던대로 이제는 사이드바에 "Go!"가 표시될 것입니다.
else절의 대체 실행▲
또 다른 접근 방법은 "Red" 문자열에 선언하고 비교 연산자를 수정하는 것입니다.
비교 연산자 != 는 같지 않다는 뜻이며 연산자 ==와는 반대의 뜻입니다. 선언문 논리가 뒤바뀌었습니다. 말 그대로 "만약 trafficLight 변수가 Red와 같지 않으면 Stop! 을 출력합니다. 그렇지 않다면 Go!를 출력합니다."라는 뜻입니다.
Swift로 동일성 테스트(Testing for equality in Swift)
지금까지 값을 변수나 상수에 할당할 때 단일 등부호를 사용하는 것만 보았습니다. 두 개의 값, 변수 또는 상수를
비교할 때에는 이중 등부호(==)를 사용합니다.
if 조건문의 숫자 비교▲
지금까지 문자열을 비교해 보았습니다. 이제는 숫자를 비교해 보고 새로운 비교 연산자를 알아보겠습니다.
var number1 : Int = 33
var number2 : Int = 101
if number1 >= number {
print("33 is greater than 101")
}
else {
print("33 is less than 101")
}
부등호보다 큰(>) 비교 연산자를 사용했습니다. 예제를 보면 number1(33의 값)이 number2(101의 값) 보다 작아서 이 표현식은 거짓이니 두 번째 절의 코드가 수행됩니다. 부등호보다 큰 기호(>) 를 부등호 보다 작은 기호 (<)로 바꾼다면 조건문은 참이 되고 첫 번째 절의 코드가 수행됩니다. 부등호를 바꾸고 실행을 해 보세요.
연산자 | 텍스트 |
---|---|
== | 같다 |
!= | 같지 않다 |
> | 보다 크다 |
< | 보다 작다 |
>= | 크거나 같다 |
<= | 작거나 같다 |
사용할 수 있는 연산자가 더 많이 있습니다. 위 표는 Swift가 지원하는 등식 연산입니다.
문자열 비교▲
이 연산자들은 숫자에만 사용되는 것은 아닙니다. 이 연산자들을 사용해 문자열도 비교할 수 있습니다. 문자열은 알파벳 순서대로 서로 비교할 수 있습니다.
let tree1 = "Oak"
let tree2 = "Pecan"
let tree3 = "Maple"
let treeCompare1 = tree1 > tree2
let treeCompare2 = tree2 > tree3
Oak, Pecan, Maple 이렇게 세 개의 상수가 선언되었습니다. tree1(Oak)을 tree2(Pecan)와 비교하고 그 결과값(false)을 보여줍니다. 알파벳 순서대로 하면 Oak 가 Pecan 앞에 오기 때문에 tree1 이 tree2 보다 큰 것이 아님이 명백합니다. tree2(Pecan) 가 tree3(Maple)보다 더 크기 때문에 결과값은 "참(true)"이 표시됩니다. 즉, Maple 다음에 Pecan 이 오기 때문에 참이 표시됩니다.