본문 바로가기
🍎 iOS/DevNote

[Swift] 흐름 제어 구문(1) - 반복문, 조건문, 제어전달문 개념

by @Eddy 2022. 4. 23.
728x90

프로그래밍 과정에서 작성하는 소스 코드를 '구문'이라고 한다.

'구문'에는 크게 단순 구문, 흐름 제어 구문으로 구분되며, 그 둘에 대한 설명은 아래와 같다. 

단순 구문: 식, 값 표현, 각종 객체의 선언이나 정의 등 = 변수(var), 상수(let), 연산 처리 등

흐름 제어 구문: 프로그램 실행 과정에서 실행 흐름을 능동적으로 제어하기 위한 목적으로 사용되는 구문. 순차적으로 실행되어야 할 일부 실행 과정을 건너뛰거나, 돌아오거나, 반복하는 등의 방식으로 제어.

 

----------------------------------------------------------------------------------------------------------------------

 

흐름제어 구문은 반복문, 조건문, 제어 전달문으로 구분된다.

 

  • 반복문: 주어진 조건에 따라 특정 코드 블록을 반복 실행 (for in / while/ repeat while)
  • 조건문: 특정 조건이 성립할 때, 지정된 코드 블록이 실행되도록 제어 (if / guard let)
  • 제어 전달문: 특정 지점의 코드로 실행제어를 옮겨줌으로써 코드가 실행되는 순서를 제어할 수 있는 방법을 제공

----------------------------------------------------------------------------------------------------------------------

 

반복문 ( for / while )

반복문은 크게 for와 while로 구분한다. for는 '횟수에 의한 반복'이며, while은 '조건에 의한 반복'이다.

for반복문: 정해진 횟수만큼 주어진 코드 블록을 반복해서 실행.

while반복문: 주어진 조건이 false가 될 때까지 계속해서 구문을 반복 실행. -> 반복 횟수를 예측하기 어려울 때 용이.

 

개인적 견해로, 나는 이걸 보면서 for는 MBTI의 J와 유사하고, while은 P와 유사하다는 생각이 들었다.

for를 보면 '넌 다 계획이 있구나!' 라는 생각이 들고, while은 일단 진행시켜! 라는 생각이 들었기 때문이다.

 

while은 Loop의 시작과 완료를 기준으로 while구문과 repeat~while구문으로 구분된다.

while 구문: Loop를 시작할 때, 조건식을 평가하여 루프를 돌지 말지 결정. ( 평가 - Loop - 평가 - Loop,,,, )

repeat ~ while 구문: Loop를 완료할 때마다 조건을 평가하여 다음 루프를 돌지 말지 결정. ( Loop - 평가 - Loop - 평가,,,, )

 

----------------------------------------------------------------------------------------------------------------------

 

조건문 ( if / guard / switch )

분기문(Branch Statements)라고도 불리며, 프로그램에서 하나 또는 그 이상의 조건값에 따라 특정 구문을 실행하도록 프로그램의 흐름을 분기하는 역할을 한다. 여기서 '분기하다'라는 말은, 프로그램의 실행 순서를 변경해 다른 명령을 실행할 수 있게 하다. 라는 의미이다.

 

if구문: 하나 또는 그 이상의 조건을 평가하고 결과에 따라 코드 블록의 실행 여부를 결정. (if/ if ~ else/ if ~ else if )

guard구문: else 필수. 후속 코드들이 실행되기 전, 특정 조건을 만족하는지 확인하는 용도로 사용. 즉, 특정 조건을 만족하지 않은 채 후속 코드를 실행하면 오류가 발생할 경우에, 전체 구문을 조기 종료하기 위한 목적으로 사용. else블록에는 이후의 코드 진행을 막는 구문이 반드시 포함 되어야 함.

switch구문: 입력받은 값을 패턴으로 비교하여 그 결과를 바탕으로 실행 블록을 결정. 나열된 패턴들을 순서대로 비교하여 일치하는 첫번째 패턴의 코드블록을 실행.

 

*Swift에서의 Switch가 다른 언어(C, Java)에서의 Switch와 다른 점.

 C, Java: 비교 패턴이 일치한 경우에도 다른 case에 대한 비교를 계속 진행.

 Swift: 비교 패턴이 일치할 경우, 일치한 지점의 case만 실행. -> break구문 생략가능한 이유.

----------------------------------------------------------------------------------------------------------------------

 

제어전달문 ( break / continue / fallthrough / return )

제어전달문은 코드의 한 부분에서 다른 부분으로 제어 흐름을 전달하여 코드가 실행되는 순서를 변경해주는 구문이다. swift만의 독자적인 용 개념이 아닌, 다양한 언어에서도 사용되는 개념이다.

 

break구문: switch구문의 실행흐름이나 반복 실행중인 루프를 조건식의결과에 상관없이 즉각 종료하는데 사용된다.

    switch구문에서는 개별 case블록에 사용되어 전체 switch구문의 실행을 종료하는 역할

    반복문에서는 반복 실행 블록에 사용되어 조건식이 False를 반환하기 전, 미리 반복문을 종료하는 역할

    반복문 내에서 break구문을 사용할 경우, 이 구문은 반복문의 전체 실행을 즉시 종료하고 반복문의 마지막에 위치한 닫는 중괄호 다음의 첫 번째 코드 줄로 실행 흐름을 전달한다.

continue구문: continue 아래 구문들을 건너뛰고 다음 반복을 시작한다. ( 예제는 다음 챕터에서 다루겠습니다. )

 

break: 조건에 따라 멈춘다 -> 조건이 충족되지 않으면 다음 구문으로 넘어가고, 조건이 충족되면 멈춘다.

continue: 조건에 따라 계속 반복한다. ->  조건이 충족되지 않으면 조건을 반복하고, 조건이 충족되면 다음 구문으로 넘어간다.

 

조금 더 디테일한 설명은 흐름제어구문(2)에서 계속 진행하겠습니다.

반응형

댓글