이전에는 조건문인 swift와 if문에 대해서 알아봤다면 이번에는 반복문에 대해서 알아보도록 하자.
우선 스위프트에서 제공하는 기본적인 반복문에 대해서 간략히 확인하고 넘어가보자.
반복문
- 반복적으로 코드가 실행되게 하는 구문을 의미한다.
- 특정 코드를 50번 호출해야하는 구문이 있는데 반복문이 없으면 함수를 50번 호출하여야 하고, 함수 호출 라인이 50줄이 되는 비효율적인 상황이 발생한다.
- 반복문의 종류 : for - in , while , repeat-while
반복문의 종류로는 기본적으로 다른 언어에서 가지고 있는 for 문, while문이 있으며, repeat-while은 타 언어에서 사용하는 do-while문과 동일한 문법이라고 생각하면 된다.
우선 하나도 모른다는 가정하에 설명을 진행하도록 하겠다.
for-in부터 확인을 해보도록 하자.
기본적인 for-in구문은
for 루프상수 in 순회대상 {
실행할 구문
}
이렇게 작성이 된다.
여기서 말하는 루프 상수는 순회가 될때마다 증가하는 방식으로 루프내에서 활용이 가능하며, 따로 변수로 선언하지 않는 이상 루프 안에서는 활용할 수 있다.
여기서 루프는 반복문을 의미한다.
순회대상은 set, 배열, 문자열, Int 등 배열이나 기본 데이터타입으로 되어있는 값이 올 수도 있다.
간단하게 for 문을 알아보도록 하자.
간단하게 5에서부터 10까지 증가를 하면서 i 의 값을 출력하는 for 문을 작성하였다.
... 은 이전에 조건문 내용에서 설명을 했기 때문에 생략하도록 하겠다. 기억이 가물가물 하다면 이전 글을 참고해도 좋을 듯 싶다.
i가 5부터 10까지 증가를 하면서 출력을 하는 부분으로 내용에 대한 이해가 쉬울 것으로 생각하고 다른 방식으로 넘어가도록 하겠다.
위에서 언급했다 싶이 순회대상으로 배열도 올 수가 있다고 얘기를 진행했다.
그럼 이제 순회대상으로 배열을 넣어 확인을 해보도록 하자.
우선적으로 testNumber라는 1, 2, 3, 4, 5의 값을 가지고 있는 배열을 선언하였다.
그리고나서 for 문의 내용을 확인해 보면, 루프상수 j를 출력하고 testNumberdp에 있는 배열의 값을 하나씩 가져오도록 표기를 진행했다.
현재 배열의 값을 출력하려고 하니 Index out of range 에러가 발생했다.
기존에 다른 언어를 공부한 사람들이라면 배열의 범위를 초과했구나. 라고 생각을 하겠지만 처음 보는 사람들이 있을 수도 있기 때문에
설명을 하고 진행하도록 하겠다.
우리는 배열을 배울때에 이전 글인 컬렉션 타입에서 배열의 인덱스는 0부터 시작한다고 배웠다.
만약 해당 부분이 생각이 나지 않으면 또 이전 글을 참고할 수 있도록 하자.
다시 설명을 진행하면 j는 해당 배열의 첫 번째 값을 가지고 온다. 즉, 처음의 시작 j는 1이다.
배열의 수대로 5번 반복이 실행될 것이고, 그럼 순서대로 호출되는 내용을 작성해보도록 하자.
반복 순서
- 1회 반복 : j = 1 , testnumber[1]
- 2회 반복 : j = 2 , testnumber[2]
- 3회 반복 : j = 3 , testnumber[3]
- 4회 반복 : j = 4 , testnumber[4]
- 5회 반복 : j = 5 , testnumber[5] // 에러의 원인 부분
이렇게 5회 반복할 때에 배열의 범위를 넘어버린다. 즉, 우리는 5개의 배열을 선언했음으로 실질적으로 testnumber[0] ~ testnumber[4] 까지의 배열이 있지만 testnumber[5]의 배열은 없기 때문이다.
그럼 이제 해당 구문을 올바르게 표기를 해보도록 하고, 배열의 값도 일부를 변경해보도록하자.
필자의 경우에는 마지막 5의 값을 표출하기 위해서 j의 마지막 부분에 -1을 진행해줬다.
참고로 기존에 1, 2, 3, 4, 5의 배열을 가지고 있을 때에도 -1은 가능하다. 왜? 배열의 시작은 0이니까.
지금 필자가 임의적으로 해결한것은 이런 오류가 있을때에 원인을 찾고 해결하라는 내용이지 이렇게 해결하라는 것은 절대로 아니다.
해결법에 대해서는 사람들마다 다르기 때문에 각자의 방법으로 해결을 하는 것이 좋을 것 같다.
우선적으로 이렇게 배열도 들어갈 수 있다는 것을 확인을 해봤다.
그럼 이제 while문에 대해서 확인을 해보도록 하자.
while문은 단순하게 주어진 조건이 false가 될 때까지 계속적으로 실행하는 반복문을 의미한다.
while문의 실행 구문은 아래와 같다.
while 조건식 {
실행 구문
}
매우 간단하다. 그럼 이제 이와 같은 방식으로 한번 진행을 해보도록 하자.
numbers2라는 5를 가지고 있는 변수를 생성하였고, while문을 호출하여 이 numbers2라는 값이 0보다 클때에만 반복문을 실행하도록 만들었다.
프린트 출력물을 나오게 하며, 이후에는 numbers의 값을 -1씩 진행을 했다.
그렇게 진행을 하니 5번 반복이 실행이 되었다.
반복문 내용
- 1회 : print(5) , numbers2 = 4
- 2회 : print(4) , numbers2 = 3
- 3회 : print(3) , numbers2 = 2
- 4회 : print(2) , numbers2 = 1
- 5회 : print(1) , numbers2 = 0
이렇게 마지막 5번을 돌고 while문이 종료가 되었다.
while문 같은 경우에는 이렇게 설명을 하고 기존에 numbers2 = numbers2-1 을 불편하게 길게 만들지 말고 C언어의 -- 나 ++ 처럼 편하게 함축해서 만들어보도록 하자.
numbers2--를 사용할 수 없다는 에러가 발생했다. 근간이 C언어인 object-C를 기반으로 만들어진 언어이기 때문에 작동을 할 줄 알았지만 작동을 하지 않았다. 대신에 친절하게 Swift에서 알려주고 있다. Cannot find operator '--' in scope; did you mean '-=1'?
즉, --의 operator를 찾지 못했다. 니가 의미하는게 -=1 이니?
이렇게 친절히 설명을 해주는 부분이다.
앞으로 Swift에서는 나 자신을 활용해서 -, =, / ,* 를 활용하는 경우에는 -=1 식으로 작성을 하도록 하자.
참고삼아 설명을 해보았다. 필자처럼 C에 매우 익숙해 있는 사람이라면 이런 실수를 할 수도 있을 것 같기 때문이었다..
에러가 발생하지 않고 정상적으로 5번 작동이 완료 되었다.
그럼 이제 repeat-while문에 대해서 알아보도록 하자.
repeat-while문은 위에서 언급했다 싶이 타 언어에서 do-while문으로 사용하는 구문이다.
while문과 마찬가지로 반복문이지만 실행구문을 반드시 1번은 실행한다는 점이 while 문과 repeat-while문의 차이이다.
repeat-while문의 구문에 대해서 확인해보자.
repeat {
실행 구문
} while 조건식
구문은 이렇게 진행이 된다. 그럼 이제 한번 확인해보도록 하자.
testnumber변수를 만들어 10을 넣어두고, repeat- while문을 사용했고, 실행구문에는 print와 testnumber를 1씩 줄여갔다.
조건은 testnumber가 0보다 클때에만 반복문을 실행하게 만들어놨다.
결과값을 보면 얼핏보면 while문이랑 같은데? 라고 생각을 할 수 있다.
맞다. repeat-while문도 while문이랑 동일한 while문이니까..
그럼 이제 조건식을 바꿔보자.
조건식을 변경했다. 그러면 이제 while문과 repeat-while문의 차이를 명확히 알 수 있다.
위에서 언급한 무조건 1번은 실행구문을 실행시킨다. 이러는 내용이 나오는 부분이다.
자 이제 여기까지 for문과 while문, repeat-while문을 알아보았다.
나머지 반복에 대한 활용은 여러분들의 몫임으로 해당 내용을 확인하여 참고삼아 이것저것 해보시길 적극 추천드린다.
'APPLE > Swift 문법' 카테고리의 다른 글
[ 기초 문법 ] 구조체와 클래스 (0) | 2022.08.09 |
---|---|
[ 기초 문법 ] 옵셔널 (0) | 2022.08.08 |
[기초 문법] If문과 Switch 구문 (0) | 2022.08.05 |
[기초 문법] 함수 ( func ) (0) | 2022.08.04 |
[기초 문법] 컬렉션 타입 (0) | 2022.08.04 |