반복문 loop의 종류

sonny·2024년 9월 30일
1

TIL

목록 보기
8/48

for문을 사용하다가 문득 반복문에 종류와 언제 필요한 지도 파악해서 꼭 써먹어보고 싶단 생각이 들었다.

반복문은 같은 작업을 여러 번 반복할 때 사용하는 구문이다. Swift에서 반복문은 여러 가지 방식으로 사용할 수 있으며, 크게 세 가지 주요 종류가 있다

for-in 반복문, while 반복문, 그리고 repeat-while 반복문.

각각의 반복문을 간단하게 짚어보려고 한다.

1. for-in 반복문

for-in 반복문은 정해진 횟수만큼 반복하거나, 배열이나 리스트 같은 컬렉션의 각 요소를 순차적으로 처리할 때 사용된다.

let numbers = [1, 2, 3, 4, 5]

for number in numbers {
    print(number)
}

여기서는 numbers라는 배열에 들어있는 숫자들을 하나씩 꺼내서 number라는 변수에 할당하고, 그 값을 출력한다. 결과적으로 1, 2, 3, 4, 5가 순차적으로 출력된다.

이 반복문은 정해진 범위나 리스트를 순차적으로 처리할 때 매우 유용하다.


2. while 반복문

while 반복문은 조건이 참일 동안 계속해서 반복되는 구조다. 조건이 거짓이 될 때까지 반복된다.

var count = 1

while count <= 5 {
    print(count)
    count += 1
}

여기서는 count1부터 시작해서 5 이하일 때까지 계속 반복되게 되는데, count5가 될 때까지 숫자를 출력하고 그 후 조건이 거짓이 되어 반복이 종료된다.

while 문은 반복을 언제 끝낼지 명확하지 않은 경우에 사용될 수 있는데, 조건이 참인 동안만 반복하므로 무한 루프가 될 수 있는 부분은 주의해야 한다.

무한루프의 예시도 한번 볼까?

var count = 1

while count <= 5 {
    print(count)
    // count를 증가시키지 않음
}

이 예시에서while count <= 5 조건은 항상 이다.
count1로 시작하지만, count를 증가시키는 코드가 없기 때문에 count는 계속 1로 남아있게 되버리는 것이다. 따라서, "1"이 무한히 출력되면서 프로그램이 종료되지 않는다.

또 다른 무한 루프의 예시로, 조건이 항상 참인 경우를 들 수 있다.

while true {
    print("이것은 무한 루프입니다.")
}

while true는 항상 이기 때문에, 루프는 종료되지 않고 계속 실행된다.

일반적으로 이런 무한 루프는 특정한 조건에서 종료되도록 설정되어야 하는데 보통은 break 문을 통해 종료된다고 한다. 무한 루프는 프로그램의 흐름을 방해할 수 있으니, 특히 사용자 입력이나 외부 조건을 기다리는 코드에서는 주의해야 할 필요가 있겠다.

예시를 보며 궁금해서 돌려봤다가 맥북 렉 걸려서 당황했다.


3. repeat-while 반복문

repeat-whilewhile과 비슷한데, 한 번은 반드시 실행된 후 조건을 검사한다는 것이 다르다. 그러니까 최소 한 번은 무조건 실행되는 것이 특징인 것.

var count = 1

repeat {
    print(count)
    count += 1
} while count > 5

이 예시는 while과 거의 같지만, 조건을 검사하기 전에 먼저 print(count)를 실행한다.
그래서 count1에서 5까지 출력된 후 종료된다. repeat-while 은 조건과 상관없이 최소 한 번은 실행해야 할 때 유용하다.

while과 너무 비슷해서 더 추가로 덧붙이자면, 위 예시에서 count1로 시작하지만, repeat 가 먼저 실행되기 때문에 1이 출력된다.
그리고 나서 count > 5 조건을 확인하지만 그건 거짓이므로 루프는 종료되는 것이다.
하지만 무조건 실행이 되는 것이 특징이기에 출력 결과는 1이다.

두 가지를 요약하자면,,

while : 조건을 먼저 검사하고, 조건이 거짓이면 실행되지 않음.
repeat-while : 최소 한 번은 실행된 후 조건을 검사하고, 조건이 거짓이면 종료.

그럼 언제 사용할까?

while : 반복을 시작하기 전에 조건이 충족되는지 확인하고 싶을 때.
repeat-while : 적어도 한 번은 실행하고 싶을 때.


4. 루프 종료(Exiting Loops)

break 키워드를 사용하면 반복문을 즉시 종료할 수 있다. 특정 조건에서 더 이상 반복할 필요가 없을 때 유용하다.

for number in 1...10 {
    if number == 6 {
        break
    }
    print(number)
}

이 예시에서는 숫자가 1부터 10까지 반복되지만, number가 6일 때 break가 실행되어 루프가 종료된다.
결과적으로 1, 2, 3, 4, 5가 출력되고, 6은 출력되지 않는다.


5. 항목 건너뛰기(Skipping Items) - continue

continue 키워드를 사용하면 현재 반복을 건너뛰고 다음 반복으로 이동할 수 있다. 특정 조건에서만 작업을 수행하고 싶을 때 유용하다.

for number in 1...10 {
    if number % 2 == 0 {
        continue
    }
    print(number)
}

이 코드에서는 1부터 10까지 반복하면서, 짝수인 경우 continue로 인해 출력하지 않고 건너뛴다.
결과적으로 1, 3, 5, 7, 9가 출력된다.

코드에서 % 는 "나머지 연산자" 다.
number % 2 == 0number2 로 나눈 나머지가 0 인지 확인하는 조건인데, 이 조건이 참이면 그 숫자는 짝수이고, 거짓이면 홀수라는 것.

"항목 건너뛰기" 표현은 루프에서 특정 조건을 만족하는 항목을 건너뛰고, 그 항목에 대한 작업을 생략하겠다는 뜻인데, 특정 항목에 대해 작업을 하지 않고 다음 항목으로 넘어간다는 의미로 이해하면 된다.


요약

for-in 반복문 : 배열이나 범위를 순차적으로 반복.
while 반복문 : 조건이 참일 동안 반복.
repeat-while 반복문 : 최소 한 번은 실행한 후 조건을 검사.
break : 루프를 즉시 종료.
continue : 현재 반복을 건너뛰고 다음 반복으로 이동.


반복문이 필요한 예시

반복문은 특정 작업을 여러 번 수행해야 할 때 매우 유용하기 때문에 반복문이 필요한 몇 가지 일반적인 경우를 알아봤다.

1. 데이터 처리

  • 대량의 데이터를 처리하거나 반복적으로 동일한 작업을 수행해야 할 때 반복문이 필요하다. 예를 들어 배열의 모든 요소를 출력하거나 수정할 때 사용한다고 한다.
let scores = [80, 90, 75, 88]

for score in scores {
    print("점수: \(score)")
}

2. 사용자 입력 처리

  • 사용자로부터 여러 번 입력을 받아야 할 때 반복문을 사용할 수 있다. 예를 들어, 사용자가 특정 조건을 만족할 때까지 입력을 요청하는 경우에 적합하다고 한다.
var input: String?

repeat {
    print("입력하세요 (종료하려면 'exit' 입력):")
    input = readLine()
} while input != "exit"

3. 조건에 따라 반복

  • 특정 조건이 참인 동안 작업을 계속 수행해야 할 때 반복문을 사용할 수 있다. 예를 들어, 특정 값이 나올 때까지 작업을 반복하는 경우라고 한다.
var number = 1

while number <= 5 {
    print(number)
    number += 1
}

4. 게임이나 시뮬레이션

  • 게임 루프와 같은 지속적으로 상태를 업데이트해야 하는 상황에서도 반복문이 필요하다. 게임에서 캐릭터의 상태를 지속적으로 확인하고 업데이트할 때 사용된다고 한다.
var gameRunning = true

while gameRunning {
    // 게임 상태 업데이트 코드
    // 종료 조건이 충족되면 gameRunning을 false로 설정
}

5. 재사용 가능한 코드

비슷한 코드를 여러 번 작성하는 대신, 반복문을 사용하여 코드를 재사용함으로써 코드의 가독성과 유지보수성을 높일 수 있다고 한다.

let items = ["사과", "바나나", "체리"]

for item in items {
    print("과일: \(item)")
}

정리

  • 데이터 처리
  • 사용자 입력 처리
  • 특정 조건에 따라 반복
  • 게임이나 시뮬레이션
  • 재사용 가능한 코드

이와 같은 상황에서 반복문을 사용하면 코드가 더 간결해지고 효율적인 작업을 할 수 있다고 한다.


음..

반복문은 하고자하는 나의 의도를 코드로 표현할 수 있는 방법 중 하나인 것 같다. 효율성과 반복을 통해 무한한 가능성을 열어주는 창과도 같은 느낌? 처음에 반복문을 접했을 때는 그 구조와 사용법이 좀 복잡하게 느껴졌지만, 그래도 여러 예시들을 보면서 그 핵심을 이해할 수 있었고 단순히 코드를 짧게 쓰기 위한 수단이 아니라 특정 작업을 효과적으로 반복 수행할 수 있도록 도와주는 존재임을 알게 되었다.

for-in 반복문은 데이터를 처리하는데 있어 빠르고 직관적인 방법을 제공하니 많은 상황에서 보편적으로 사용 되는 것 같다. whilerepeat-while도 조건 따라 유동적으로 실행될 수 있어서 유연한 코딩이 가능하다는 걸 알게 되기도 했고.. 반복문들을 통해 프로그래밍을 하며 발생하는 문제를 해결하는 논리적인 방법을 알게 된 기분이었다. 내가 코드의 흐름을 조절하고 특정한 조건에서 원하는 결과를 얻으려면 어떻게 해야 하는지를 알 수 있게 도와주는 알잘딱깔센 뤂 이라고 해두겠다.

그리고 언젠가무한 루프종료 조건을 잘 파악하지 못해 실수도 하게 될 것 같다. 아니, 당연하게도 코드를 작성하다보면 분명 실수 할 때가 나올 것이다. 그럴 때 오늘 작성한 이 글을 꼭 보고 다시 되새기려한다.

마치 우리가 인생에서 겪는 반복적인 도전과 같은 기분.

profile
iOS 좋아. swift 좋아.

6개의 댓글

comment-user-thumbnail
2024년 9월 30일

오늘도 이해하기 쉽게 잘 써주셨군요 내일 이걸로 공부해보겠읍니다!

1개의 답글
comment-user-thumbnail
2024년 9월 30일

팔로우하고 갑니다~~^^*

1개의 답글