본문 바로가기
swift

스위프트 제어 전달문

by 승환파크 2024. 4. 6.

제어 전달문은 코드의 한 부분에서 다른 부분으로 제어 흐름을 전달하여 코드가 실행되는 순서를 변경해주는 구문이다. 주로 반복문이나 조건문, 함수 등에서 사용 되는 이 구문은 전통적인  C 코드에서도 거의 동일하게 제공되는 만큼 스위프트만의 독자적인 개념은 아니다. 스위프트에서 사용되는 제어 전달문은 총 네 가지가 있다.

  1. break
  2. contiune
  3. fallthrough
  4. return

이 구문들은 각각의 쓰임에 따라 코드의 흐름을 제어하고, 다른 부분으로 제어를 전달하거나 기능을 종료하기도 한다. 이 중에서 fallthrough는 switch 구문의 흐름을 제어할 때 사용하는 구문으로, 일치된 case 블록의 실행을 다음 case 블록으로 전달할 때 사용한다. 마지막의 return은 함수나 메소드에서 사용되는 구문이다. 함수와 메소드 내에서 값을 반환하면서 실행을 종료하거나 단순히 코드의 실행을 종료하는 역할을 한다. return 구문은 함수를 다룰 때 많이 사용한다는 것만 알려주고 설명은 생략한다.

 

break

break 구문은 switch 구문에서의 실행 흐름이나 반복 실행중인 루프를 조건식의 결과에 상관 없이 즉각적으로 종료하는데에 많이 사용된다. switch 구문에서는 개별 case 블록에 사용되어 전체 switch 구문의 실행을 종료하는 역할을 하고, 반복문에서는 반복 실행 블록에 사용되어 조건식이 false를 반환하기 전에 미리 반복문을 종료시키는 역할을 한다.

for i in 0 ... 5 {
	if i > 2 {
    	break
	}
    print("\(i)")
}

// 결과값
// 0
// 1
// 2

 

continue

break 구문이 필요에 따라 강제로 흐름을 종료하거나 반복문의 반복을 중단시키는데에 사용되는 구문이라면, continue 구문은 이 구문 아래에 있는 실행 구문들을 건너뛰고 다음 반복을 시작하는 역할을 한다. continue 구문 이후에 실행할 내용이 남아있더라도 실행되지 않는 것은 break 구문과 같지만, break 구문이 반복문을 완전히 종료하는 것과는 달리 continue 구문은 반복문의 조건을 다시 평가하고 그 결과에 따라 다음 반복을 실행한다.

for i in 0 ... 5 {
    if i < 2 {
    	continue
	}
    print(i)
}

// 결과값
// 2
// 3
// 4
// 5

 

구문 레이블과 break, continue

중첩된 구문들에서 break나 continue를 사용하면 어떤 구문을 멈추거나 다시 시작하게 할지 명확하지 않다는 문제점이 있다. 이 때문에 break 구문이 어떤 구문을 중단 시킬지, continue 구문이 어떤 구문에 작용할지 명확하게 표현해줄 필요가 있다.

 

스위프트에서는 반복문이나 조건문 등 특정 구문에 레이블을 붙여 기억할 수 있도록 하고, break나 continue 구문이 사용될 때 이 레이블을 명시해줌으로써 개발자가 원하는 구문 위치에 정확히 흐름 제어가 적용될 수 있도록하는 문법을 제공한다. 이를 구문 레이블이라고 한다.

 

구문 레이블을 정의하는 형식은 매우 단순하다. for ~ in 구문이나 while 구문, switch 구문 등 레이블을 적용할 구문의 앞에 레이블을 추가하고, 구문과 레이블 사이를 콜론으로 구분해주면 된다.

<레이블 이름> : while <조건식> {
	<실행할 구문>
}

 

구문 앞에 작성된 레이블 이름은 break문이나 contonue 문이 호출하는 대상 블록을 가리킨다. 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

'swift' 카테고리의 다른 글

스위프트 배열  (0) 2024.04.06
스위프트 집단 자료형  (1) 2024.04.06
스위프트 조건문  (0) 2024.04.06
스위프트 반복문  (1) 2024.04.05
스위프트 연산자  (1) 2024.04.03