06.10 (화) 구문 레이블(Statement Label, outerLoop)

2025. 6. 10. 20:48·🖋️ TIL Journal
-->

 

개인과제를 구현하다가 입력값이 0일 때 return을 사용해 프로그램을 종료하려고 했었다.

 

하지만, while 루프가 전역에 있어 return문을 사용할 수 없었다. 그래서 어떤 방법이 있을까 찾아보다가 Swift에서 제공하는 구문 레이블(Statement Label)을 찾아서 사용했다.

 

이번엔 구문 레이블이 무엇인지, 왜 사용하는지 간단히 요약한 뒤에, 실제로 사용한 예시를 살펴볼 예정이다.

 

 

구문 레이블이란?


구문 레이블(Statement Label)은 Swift에서 반복문이나 조건문 앞에 이름을 붙여, break나 continue와 함께 사용할 때 특정 구문의 흐름을 명확하게 제어할 수 있도록 해주는 문법이다.

 

이 기능을 사용하면 중첩된 반복문이나 조건문에서 원하는 위치로 제어 흐름을 쉽게 이동시킬 수 있다.

 

예시 코드

outerLoop: for i in 0...5 {
    print(i)
    break outerLoop  // 여기서 for 루프 전체가 종료됨
}
print("루프 종료")

위 코드는 첫 번째 반복문이 실행되자마자 print(i)가 1번 실행되고, break outerLoop가 실행되면서 for 루프가 즉시 종료되고, 이후 "루프 종료"가 출력된다.

 

흔히 outerLoop, innerLoop처럼 사용되지만, 원하는 아무 이름으로 지어도 된다.

또한 이 구문 레이블은 여러 중첩된 루프 중 특정 루프만 탈출하는 경우에 유용하게 사용된다.

  • 예시)
    • 메뉴 기반 입력 처리 (case 0: → 전체 종료)
    • 게임 루프에서 "exit" 같은 키워드 입력 시 전체 탈출
    • for 안의 while, 그 안의 if 등 다단계 로직에서 흐름 정리

 

 

실사용 예시


내가 과제로 만든 menu코드 중 일부를 비슷하게 구현해봤다.

 

❌ outerLoop 없이 작성한 예시

while true {
  print("문제를 선택하세요 (종료: 0): ", terminator: "")
  let input = readLine() ?? ""

  switch input {
  case "0":
    print("프로그램을 종료합니다.")
    break // switch만 종료됨
  default:
    print("선택한 문제 실행 중...")
  }
}

 

아래 이미지처럼 switch문 안에서 break를 쓰면 switch만 빠져나오고, while문은 계속 반복이된다.

전역에 있는 while문을 빠져나오지 못함

이러면 while문을 빠져나오지 못해, 프로그램이 종료되지 않고 계속 반복하게 되어 원하는 결과가 나오지 않는다.

 

 

✅ outerLoop 사용 예시

outerLoop: while true {
  print("문제를 선택하세요 (종료: 0): ", terminator: "")
  let input = readLine() ?? ""

  switch input {
  case "0":
    print("프로그램을 종료합니다.")
    break outerLoop
  default:
    print("선택한 문제 실행 중...")
  }
}

 

앞서 말한 것처럼 break문으로는 switch문은 빠져나올 수 있지만, 전역에 있는 while문까지 빠져나오진 못한다.

 

하지만, 우리는 0을 입력할 경우 while 루프 자체를 완전히 종료하고 싶기 때문에, break outerLoop를 통해 바깥 루프로 직접 종료하여 반복을 빠져나올 수 있다.

while문도 빠져나와 원하는 결과!

 

 

continue outerLoop


break에 구문 레이블이 있으니, 혹시 다른 것도 있나? 하고 찾아보니, continue문에도 구문 레이블을 사용할 수 있다고 한다.

 

예시

outerLoop: for i in 1...3 {
    print("i = \(i) 시작")
    if i == 2 { continue outerLoop }
    print("i = \(i) 처리 완료")
}
// 출력
// i = 1 시작
// i = 1 처리 완료
// i = 2 시작
// i = 3 시작
// i = 3 처리 완료

 

continue문에도 break와 동일하게 사용된다.

 

이렇게 하면, i에 들어가는 1, 2, 3의 값들 중, 1, 3에 대해서는 정상적으로 "처리 완료"가 출력되지만, i == 2일 경우에는 중간의 "처리 완료" 출력이 생략되고 바로 다음 반복으로 넘어간다.

 

이렇게 하면 i == 2일 때만 중간의 “처리 완료” 출력이 생략되고 바로 다음 반복으로 넘어간다.

 

나머지 값(1, 3)에 대해서는 정삭적으로 “처리 완료”가 출력된다.

 

 

✅ 핵심 정리


  • 구문 레이블(Statement Label)은 반복문 앞에 이름을 붙여 특정 루프를 제어할 수 있게 하는 문법
  • break outerLoop: 해당 레이블이 붙은 루프를 종료
  • continue outerLoop: 해당 루프의 다음 반복으로 바로 이동
  • 중첩 루프나 다단계 로직에서 흐름을 깔끔하게 제어할 수 있어 유용함

 

 

 

'🖋️ TIL Journal' 카테고리의 다른 글

06.12 (목) 🍫 Cocoa 프레임워크란 무엇일까?  (1) 2025.06.12
06.11 (수) Swift 주석 총 정리!  (1) 2025.06.11
06.09(월) 개인과제 Level4 역할 분리 및 구조 개선 회고  (1) 2025.06.09
06.05 (목) enumerated()가 제네릭에서 안 된다고..?  (1) 2025.06.05
06.04 (수) 열거형(Enum)과 compactMap, flatMap  (0) 2025.06.04
'🖋️ TIL Journal' 카테고리의 다른 글
  • 06.12 (목) 🍫 Cocoa 프레임워크란 무엇일까?
  • 06.11 (수) Swift 주석 총 정리!
  • 06.09(월) 개인과제 Level4 역할 분리 및 구조 개선 회고
  • 06.05 (목) enumerated()가 제네릭에서 안 된다고..?
MoriOS
MoriOS
기억하기 위해 기록하는 공간 🖋️
  • MoriOS
    MoriOS
    MoriOS
  • 전체
    오늘
    어제
    • 분류 전체보기 (56) N
      • 📌 Swift (10)
      • 📱 iOS (4)
      • 💡 Algorithm (1)
      • ❕Data structure (4)
      • 🪙 Python (0)
      • ⚙️ Git (2)
      • 🖋️ TIL Journal (32) N
      • 📝 Etc (3)
  • 블로그 메뉴

    • GitHub
  • 인기 글

  • 태그

    swift optional
    Split
    inset
    addaction
    네비게이션 주석
    코코아 프레임워크
    mark:
    중첩 주석
    후행클로저
    시뮬레이터 추가
    GitHub
    버튼 액션
    시뮬레이터 변경
    구문 레이블
    static
    코코아 프레임워크 이름
    주석 활용
    문서화 주석
    TiL
    Optional
    아이폰 시뮬레이터 추가
    Components
    weak
    cocoa 프레임워크
    속성 감시자
    ios
    swift
    SnapKit
    한 줄 주석
    버튼 동작
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
MoriOS
06.10 (화) 구문 레이블(Statement Label, outerLoop)
상단으로

티스토리툴바