4.3 제어 전달문
제어 전달문은 코드의 한 부분에서 다른 부분으로 제어 흐름을 전달하여 코드가 실행되는 순서를 변경해주는 구문입니다. 주로 반복문이나 조건문, 함수 등에서 사용 되는 이 구문은 전통적인 C 코드에서도 거의 동일하게 제공되는 만큼 스위프트만의 독자적인 개념은 아닙니다. 스위프트에서 사용 되는 제어 전달문에는 다음 네 가지가 있습니다.
break
continue
fallthrough
return
이 구문들은 각각의 쓰임에 따라 코드의 흐름을 제어하고, 다른 부분으로 제어를 전달하거나 기능을 종료하기도 합니다. 이 중에서 fallthrough는 앞에서 switch 구문의 흐름을 제어할 때 다룬 구문으로, 일치된 case 블록의 실행을 다음 case 블록으로 전달할 때 사용합니다. 마지막의 return은 함수와 메소드에서 사용되는 구문입니다.함수와 메소드 내에서 값을 반환하면서 실행을 종료하거나 단순히 코드의 실행을 종료하는 역할을 하죠. return 구문의 뒤에서 함수를 다룰 때 아주 많이 언급될 예정이므로 여기서는 설명을 생략합니다. 이번 절에서 살펴볼 구문은 break와 continue 두 가지입니다.
4.3.1 break
break 구문은 switch 구문에서의 실행 흐름이나 반복 실행 중인 루프를 조건식의 결과에 상관 없이 즉각적으로 종료하는 데에 사용됩니다. switch 구문에서는 개별 case 블록에 사용되어 전체 switch 구문의 실행을 종료하는 역할을 하고, 반복문에서는 반복 실행 블록에 사용되어 조건식이 false를 반환하기 전에 미리 반복문을 종료하는 역할을 합니다.
for row in 0...5 {
if row > 2 {
break
}
print("\(row) was executed!")
}
0 was executed!
1 was executed!
2 was executed!
4.3.2 continue
break 구문이 필요에 따라 강제로 실행 흐름을 종료하거나 반복문의 반복을 중단하는 데에 사용되는 구문이라면, continue 구문이 이 구문 아래에 있는 실행 구문들을 건너뛰고 다음 반복을 시작하는 역할을 합니다. continue 구문 이후에 실행할 내용이 남아있더라도 실행되지 않는 것은 break 구문과 같지만, break 구문이 반복문을 완전히 종료하는 것과는 달리 continue 구문은 반복문의 조건을 다시 평가하고 그 결과에 따라 다음 반복을 실행합니다.
for row in 0...5 {
if row < 2 {
continue
}
print("\(row) was executed!")
}
2 was executed!
3 was executed!
4 was executed!
5 was executed!
4.3.3 구문 레이블과 break, continue
중첩된 구문들에서 break나 continue를 사용하면 어떤 구문을 멈추거나 다시 시작하게 할지 명확히지 않다는 문제점이 있습니다. 이 때문에 break 구문이 어떤 구문을 중단 시킬지, continue 구문이 어떤 구문에 작용할지 명확하게 표현해줄 필요가 있습니다.
스위프트에서는 반복문이나 조건문 등 특정 구문에 레이블을 붙여 기억할 수 있도록 하고, break나 continue 구문이 사용될 때 이 레이블을 명시해줌으로써 개발자가 원하는 구문 위치에 정확히 흐름 제어가 적용될 수 있도록하는 문법을 제공합니다. 이를 구문 레이블이라고 합니다.
구문 레이블을 정의하는 형식은 매우 단순합니다. for ~ in 구문이나 while 구문, switch 구문 등 레이블을 적용할 구문의 앞에 레이블을 적용할 구문의 앞에 레이블을 추가하고, 구문과 레이블 사이를 콜론으로 구분해주면 됩니다.
<레이블 이름> : while <조건식> {
<실행할 구문>
}
구문 앞에 작성된 레이블 이름은 break 문이나 continue 문이 호출하는 대상 블록을 가리킵니다. break 문과 continue 문이 레이블을 사용할 때에는 구문 다음에 레이블 이름을 작성해주면 됩니다.
// 1에서 5까지 반복
outer : for i in 1...5 {
// 1에서 9까지 반복
inner : for j in 1...9 {
// j의 값이 3일 때 break 구문을 실행한다.
if (j==3) {
break outer
}
// 구구단을 출력한다.
print("\(i) X \(j) = \(i * j)")
}
}
1 X 1 = 1
1 X 2 = 2
Last updated