아요 개발 일기

[Swift] 반복문 (Loop Statements) - For 문, While 문 본문

Swift/Grammar

[Swift] 반복문 (Loop Statements) - For 문, While 문

김망복 2022. 12. 30. 11:54
반응형

반복문은 주어진 조건에 의해 특정 코드 블록을 반복적으로 실행할 수 있게 해주는 구문입니다.

프로그래밍에서 코드 블록의 반복을 루프(Loop)라고 부르고 반복되는 횟수를 루프 횟수라고 부릅니다.

 

반복문은 두 가지 방식으로 나눌 수 있습니다.

 

  1. For 반복문 : 횟수에 의한 반복
  2. While 반복문: 조건에 의한 반복
    • While 구문 : 매번 루프를 시작할 때 조건식을 평가하여 루프를 돌지 말지 결정합니다.
    • repeat ~ while 구문 : 루프를 완료할 때마다 조건을 평가하여 다음 루프 실행 여부를 결정합니다. ( 일단 주어진 코드 블록을 실행한 다음에 다시 한 번 루프를 실행할지 말지를 조건식을 통해 평가)

 


1. For 반복문

For 반복문은 in 키워드와 함께 사용되어 정해진 횟수만큼 주어진 코드 블록을 반복해서 실행합니다.

먼저, 구문의 형식을 살펴봅시다.

for <루프 상수> in <순회 대상>{

    <실행할 구문>

}

 

기본적으로 이 구문을 실행하기 위해서는 세 개의 항목이 필요합니다.

 

  1. 루프 상수 : 구문이 반복될 때마다 순회 대상이 포함하고 있는 개별 아이템들을 차례로 넘겨받아 임의로 저장하고, 실행 블록 내에서 사용할 수 있도록 해주는 역할 ( 이 객체는 루프 구문이 순회할 때마다 자동으로 재선언되므로 let 키워드를 사용하여 직접 선언할 필요가 없다는 점 유의)
  2. 순회 대상 
  3. 실행할 구문 

여기서 가장 중요한 것은 순회 대상 입니다.

순회 대상은 주로 순번을 가지는 집단 자료형이나 또는 범위를 가지는 데이터 등이 사용되는데,

이 대상의 길이나 포함하고 있는 아이템의 개수만큼 구문이 반복 수행됩니다.

순회 대상으로 사용할 수 있는 데이터 타입에는 다음과 같은 것들이 있습니다.

 

  • 배열(Array)
  • 딕셔너리(Dictionary)
  • 집합(Set) 
  • 범위 데이터 :  범위 연산자에 의해 규칙적인 간격으로 나열된 정수들의 모음
  • 문자열(String) : Character 타입의 데이터들이 모여 이루는 집단적 성격의 데이터

 

범위

a...b - a부터 b까지 포함

a..<b - a부터 b-1까지

 

예시를 통해 좀 더 살펴보도록 하겠습니다.

 

1-2. 문자열의 문자 순회

 

String 타입 자체는 순회 처리를 지원하지 않으므로 characters속성을 사용해야 합니다.

아래 코드는 문자열의 크기만큼 총 5회 반복됩니다.

var lang = "swift"

for char in lang.characters{

  print("개별 문자는 \(char)입니다.");

}

 

1-3. 루프 상수 생략

 

언더바(_)를 사용하여 루프 상수를 생략할 수 있습니다.

let size = 5

let padChar = "0"

var keyword = "3"



for_in 1...5 { 

keyword = padchar + keyword

}

print("\(keyword)")

출력값
000003

 

위 코드는 size 값만큼 keyword 문자열의 왼쪽에 0을 채워 넣는 구문입니다.

주어진 값이 5까지이므로 1부터 5까지 모두 5회에 걸쳐 루프가 실행되며, 매 실행마다 왼쪽에 0이 추가됩니다.

 

이 구문에서는 루프 상수가 굳이 필요하지 않습니다.

따라서 루프상수 자리에 언더바로 대신하였는데, 변수나 상수가 들어가야 할 자리를 언더바로 채우는 것은 스위프트에서 다음과 같은 의미를 가집니다.

 

" 그 위치에 뭔가 변수나 상수가 필요하다는 건 알지만, 우리에겐 필요가 없어요,
그러니 그냥 생략할게요. 실수로 빠트렸다고 생각 할까봐 표시는 해두었으니 문법이 틀렸다는 오류는 내지 마세요."

 

1-.3. for~in 구문의 중첩(다중 루프)

for~in 구문 내에 또 다른 for~in을 작성하여 사용할 수 있다는 뜻입니다.

이러한 형태를 흔히들 다중 루프라고 부르는데, 특히 두 개의 루프 구문이 중첩된 코드를 별도로 이중 루프라고 부릅니다.

다중 루프를 효과적으로 사용하면 굉장한 시너지 효과를 낼 수 있지만, 반대로 코드의 해석을 난해하게 만드는 주범이 되기도 하므로 주의해서 사용해야 합니다.

for i in 1..<10 {

	for j in 1..<10 {

		pring("\(i) x \(j) = \(i * j)")

	}

}

 


2-1. while 반복문

while 구문은 단순히 주어진 조건식의 결과가 false가 될 때까지 실행 구문을 계속 반복 수행합니다.

'조건이 만족하는 동안은 계속 실행' 된다고 생각하시면 됩니다.

 

while문을 사용해야 하는 경우는 다음과 같습니다.

 

  1. 실행 횟수가 명확하지 않을 때
  2. 직접 실행해보기 전까지 싱행 횟수를 결코 알 수 없을 때
  3. 실행 횟수를 기반으로 할 수 없는 조건일 때

while 구문의 사용 형식

while <조건식> {

<code block>

}

while 키워드 다음에는 조건식이 사용되는데, 조건식은 반드시 참(true)이나 거짓(false)을 결과 값으로 반환해야 합니다.

그래서 조건식에 주로 연산자가 사용되는 경우가 많습니다.

 

조건식이 

  • true 일때 - 실행 블록 내의 코드가 반복해서 수행
  • false 일때- 즉시 반복문의 실행은 종료되고 코드 블록을 빠져나가 바로 다음에 이어지는 구문을 실행

 

var n = 2
while n < 1000 {
	n = n * 2
}
print("n = \(n)")


출력 값
n = 1024

 

while 구문에 조건식 대신 true값을 직접 넣으면 한없이 반복 실행되는 무한 루프가 만들어 집니다.

코드 블록을 탈출할 수 있도록 break 문을 넣어주지 않는다면 이 프로그램은 프로세스가 종료되지 않는 한 영원히 실행 블록을 반복하게 됩니다.

 

while true {

	<실행 코드>
    
}

 

 

2-2. repeat~while 구문

repeat~while 반복문은 다른 언어에서 do~while 구문에 해당한다고 생각하시면 됩니다.

while 구문의 사용 형식

repeat { 

<실행할 구문>

}
while<조건식>

 

조건식을 먼저 평가하여 실행 블록의 수행 여부를 결정하는 while 구문과 달리 repeat~while 구문은 코드 블록을 일단 실행한 다음에 조건식을 평가하여 반복 여부를 결정합니다.

이에 따라 repeat~while 구문은 실행 블록의 수행을 최소 한 번은 보장하는 특성을 가지는데, 이것이 while 구문과의 결정적 차이점입니다. while 구문은 조건식을 먼저 평가하여 false가 반환되면 실행 블록을 아예 수행하지 않으니까요.

 

간단히 정리하면, 

 

  • while 구문 - 한 번도 실행 안 될 수도 있음
  • repeate~while 구문 - 무조건 한번은 실행 됨

 

아래 코드를 보면서 좀 더 이해해보록 하겠습니다.

 

var n = 1024



// while 문 

while n < 1000 {
	n = n * 2
}

print ("n = \(n)"

실행 결과
n = 1024

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

//repeat~while 문 

var count = 0

repeat {
    n = n * 2
    count = count + 1
}
while count < 5

print("n = \(n)")
print("count = \(count)")

실행 결과
n = 2048
count = 5

 

위 예제를 보면 동일한 코드를 실행하였는데, while구문과 repeat~while 구문의 결과 값이 다르게 나왔습니다.

결과 값이 다르게 나온 이유가 무엇일까요?

위에 설명했던 것과 같이 repeat~while은 무조건 한 번은 실행되기때문에 결과 값이 2048이 나온 것을 알 수 있습니다.

 

이와 같이,

repeat~while 구문은 while 구문을 사용해야하는 조건 중에서 반드시 한 번은 실행할 필요가 있는 조건에 사용됩니다.

반응형