일반적으로 프로그래밍 과정에서 작성하는 소스 코드를 구문(Statement)이라고 합니다. 하나의 앱을 만들기 위해 여러분들이 작성해야할 코드는 적게는 수십 줄부터 많게는 수만 줄에 이르는데, 대부분이 구문으로 이루어 집니다.
구문은 크게 단순 구문과 흐름 제어 구문 두 가지로 나눌 수 있습니다. 단순 구문은 식이나 값 표현, 각종 객체의 선언이나 정의 등에 사용되는 구문입니다. 앞서 살펴본 변수나 상수 선언, 연산 처리 등은 모두 단순 구문에 속하며, 이후에 배우게 될 함수나 구조체, 클래스 및 열거형 등을 정의하는 구문 역시 단순 구문입니다.
흐름 제어 구문은 말 그대로 프로그램의 실행 과정에서 실행 흐름을 능동적으로 제어하기 위한 목적으로 사용되는 구문을 말합니다. 흐름 제어 구문은 원래 순차적으로 실행되어야 할 일부 실행 과정을 건너뛰거나 되돌아오도록 흐름을 제어하며 경우에 따라서는 반복적으로 실행되도록 제어하기도 합니다. 이번 장에서는 흐름 제어 구문에 대해 집중적으로 학습하게 됩니다.
스위프트는 일반적으로 통용되는 흐름 제어 구문 대부분을 제공하는데, 성격에 따라 다음 세 가지 종류로 나눌 수 있습니다.
반복문은 주어진 조건에 따라 특정 코드 블록을 반복적으로 실행하고, 조건문은 특정 조건이 성립할 경우 지정된 코드 블록이 실행되도록 제어합니다. 제어 전달문은 특정 지점의 코드로 실행 제어를 옮겨줌으로써 코드가 실행되는 순서를 제어할 수 있는 방법을 제공합니다. 각각의 구문에 관해서는 이어지는 페이지에서 자세히 알아볼 예정입니다.
단순 구문과 흐름 제어 구문 모두 선택적으로 세미콜론을 사용하여 구문의 끝을 표시해 줄 수 있습니다. 여기에서 선택적이란 말의 의미는 모든 구문의 끝에 반드시 세미콜론을 붙여야 하는 것은 아니라는 뜻입니다. 이는 구문의 끝에 반드시 세미콜론을 붙여야하는 C, C++, 자바 등의 언어와 대조되는 스위프트의 특성입니다.
하지만 스위프트라고 해서 모든 경우에 세미콜론을 생략할 수 있는 것은 아닙니다. 컴파일러가 해석하기 어려운 구문에는 세미콜론이 필요합니다. 대표적으로 여러 줄로 작성해야 할 코드를 한 줄로 작성하는 경우가 이에 해당합니다.
흐름 제어 구문에서는 코드 블록을 지정해야 하는 경우가 많습니다. 대부분의 언어에서 코드 블록은 { }로 구성되는데 이 블록은 여러 줄에 걸쳐 작성된 코드를 블록 단위로 묶어주는 역할을 합니다. 스위프트에서도 흐름 제어 구문 대부분은 { }을 사용하여 적용할 코드 범위를 지정합니다.
각각의 흐름 제어 구문은 비슷한 성격의 기능을 하는 여러 구문들로 다시 나누어지기도 합니다. 가령 반복문만 하더라도 for와 while 문이 있죠. 이들은 비슷한 기능을 하기 때문에 문법을 학습하는 초기에는 어떤 것을 써야하는지 헷갈리기도 합니다. 하지만 각 구문들이 완전히 동일한 기능을 하는 것은 아니며, 각자 나름의 특성을 가지고 있기 때문에 그 특성을 제대로 이해하고 적절한 곳에 적절한 구문을 사용할 수 있도록 노력해야 합니다.
반복문은 주어진 조건에 의해 특정 코드 블록을 반복적으로 실행 할 수 있게 해주는 구문입니다. 프로그래밍에서 코드 블록의 반복을 루프(Loop)라고 부르고 반복되는 횟수를 루프 횟수라고 부르는데, 스위프트에서 제공하는 반복문은 루프 횟수가 정해져 있는지를 기준으로 두 가지 방식으로 나눌 수 있습니다.
For 반복문은 in 키워드와 함께 사용되어 정해진 횟수만큼 주어진 코드 블록을 반복해서 실행합니다. for ~ in { ... } 형식으로 사용되죠. 정해진 횟수만큼만 반복하는 For 반복문과 달리. While 반복문은 주어진 조건이 false가 될 때까지 계속해서 구문을 반복을 반복 실행하는 특성이 있습니다. 미리 반복 횟수를 정하지 않아도 된다는 장점이 있기 때문에 반복 횟수를 예측하기 어려운 조건의 반복문에서 주로 사용됩니다.
While 반복문은 while 구문과 repeat ~ while 구문으로 나누어지는데, while 구문은 매번 루프를 시작할 때 조건식을 평가하여 루프를 돌지 말지를 결정하지만 repeat ~ while 구문은 루프를 완료 할 때마다 조건을 평가하여 다음 루프 실행 여부를 결정합니다.
정리해보면, For 반복문은 횟수에 의한 반복이며 While 반복문은 조건에 의한 반복이라고 할 수 있습니다.
반복문 내에서 흐름을 제어하고자 할 때에는 break 구문과 continue 구문이 사용됩니다. 이 구문들은 제어 전달문으로서, 적절한 시점에 사용되어 코드 블록의 실행 흐름을 옮겨주는 역할을 합니다.
스위프트에서 일정 횟수만큼 특정 구문을 반복하고자 할 때에는 for ~ in 구문을 사용합니다.
for <루프 상수> in <순회 대상> {
<실행할 구문>
}
기본적으로 이 구문을 실행하기 위해서는 세 개의 항목이 필요합니다. 루프 상수와 순회 대상, 그리고 실행할 구문이죠. for ~ in 구문에서 가장 중요한 것은 순회 대상입니다. 순회 대상은 주로 순번을 가지는 집단 자료형이나 또는 범위를 가지는 데이터 등이 사용되는데, 이 대상의 길이나 포함하고 있는 아이템의 개수만큼 구문이 반복 수행 됩니다. 순회 대상으로 사용할 수 있는 데이터 타입에는 다음과 같은 것들이 있습니다.