먼저 반복문의 정의부터 알자.
반복문은 주어진 조건에 의해 특정 코드 블록을 반복적으로 실행할 수 있게 해주는 구문이다.
프로그래밍에서 코드 블록의 반복을 루프(Loop)라고 부르고 반복되는 횟수를 루프 횟수라고 부른다.
스위프트에서 제공하는 반복문은 루프 횟수가 정해져 있는지를 기준으로 아래와 같이 두 가지 방법으로 나눈다.
- For 반복문
- While 반복문
아래 한번 더 정리할 것이지만 간단하게 말하면 For 반복문은 횟수에 의한 반복이고,
While 반복문은 조건에 의한 반복문이라 할 수 있다.
1. For 반복문
스위프트에서 일정 횟수만큼 특정 구문을 반복하고자 할 때에는 아래와 같이 for - in 구문을 사용한다.
for <루프 상수> in <순회 대상> {
<실행할 구문>
}
for - in 구문은 기본적으로 루프 상수, 순회 대상, 실행할 구문 세 가지 항목이 들어간다.
이 중 가장 중요한 것은 순회 대상이라 할 수 있다.
순회 대상에는 보통 집단 자료형 또는 범위를 가지는 데이터 등이 사용된다.
- 배열(Array)
- 딕셔너리(Dictionary)
- *집합(Set)
- 범위 데이터
- 문자열(String)
📝 집합이란 단일 데이터가 아닌 유사한 속성의 데이터 여러 개가 모여서 하나의 덩어리를 이루는 집단 자료형(Collective Types) 여러 데이터를 포함하고 있다는 의미에서 컨테이너 타입이라고도 함.
for - in 구문에 대해 실제 코드를 보면서 이해해 보자.
for row in 1...5 {
print(row)
}
닫힌 범위 연산자로 작성된 범위 데이터 1...5는 [1, 2, 3, 4, 5] 까지의 데이터를 순서대로 생성한다.
이 값이 for - in 구문의 순회대상이 되면 루프 상수인 row에는 최초 1이 대입되고, 이어서 실행 블록 내의 구문이 실행된다.
📝 간단하게 1 -> 5 까지 순차적으로 row에 대입돼서 출력된다는 이야기다
더 이해하기 쉽게 직접 코드를 입력해 결과값을 확인해 보자.
코드를 실행해 보니 1 -> 5까지 총 5번에 걸쳐 출력이 되는 걸 볼 수 있다.
코드 실행 순서는 아래처럼 반복돼서 일어나고 row가 5가 되면 5를 출력하고 난 후 코드가 종료된다.
for 반복문을 통해 다양한 형식의 구문을 실행하는 것도 가능하다.
그냥 알아만 두자.
// 구구단 2단 출력 예제
for row in 1...9 {
print("2 X \(row) = \(row * 2)")
}
//1970년도 ~ 2023년도까지 출력
for year in 1970...2023 {
print("\(year)년도")
}
for - in 구문을 이용하여 문자열의 문자 순회
문자열 String은 단일 객체로 사용되지만, 그 구조를 보면 Character 타입의 개별 문자들이 모여진 객체다.
개별 문자는 순서를 이룬 채 연결되어 하나의 문자열을 구성하므로 순회 대상으로 사용이 가능하다.
단, String 타입 자체는 순회 처리를 지원하지 않으므로 Character 속성을 사용해야 한다.
실제 코드를 예시로 이해해 보자.
var lang : String = "Sheep1sik"
for char in lang{
print(" 개별 문자는 \(char) 입니다.")
}
📝 var lang = "Sheep1sik" 하면 문자열로 자동으로 선언될 줄 알았는데 var lang : String = "Sheep1sik" 로 선언해 줘야 문자열로 인식받는다 웁쓰!!😳
루프 상수로 사용된 char는 루프 구문 내에서 자동으로 Character 타입으로 선언되어
"Sheep1sik" 이라는 문자열의 각 문자를 받아들이는 역할을 한다.
루프 실행 횟수는 문자열의 크기만큼!! 총 9회 반복
루프 상수의 생략
for - in 구문을 사용할 때 상수가 필요하지 않을 수 있다.
순회 대상 자체보다는 단순히 순회 대상의 크기만큼 반복하는 것이 목적인 경우.
이때는 언더바 _ 를 통해서 루프 상수를 생략할 수 있다.
실제 코드로 알아보자.
let size = 4
let padChar = "0"
var keyword = "3"
for _ in 1...size {
keyword = padChar + keyword
}
print("\(keyword)")
이 구문은 루프 상수가 굳이 필요하지 않다.
따라서 루프 상수가 있어야 할 자리를 언더바로 대신 채워주는 것이다.
📝 스위프트에서는 이런 의미가 아닐까? 본인 생각 + 책ㅇㅇ
언더바 _ 가 들어갈 위치에 변수나 상수가 필요한 건 알겠지만, 자기들은 필요 없다. 생략해도 된다?
실수로 빠트렸다고 생각할까 봐 표시는 해둘게 문법이 틀렸다는 오류는 내지 마라?
for - in 구문의 중첩
for - in 구문은 필요에 따라 중첩하여 사용할 수 있다.
for - in 구문 내에 또 다른 for - in 구문을 작성하여 사용할 수 있다는 뜻.
📝 다중 if문, 다중 for문
이런 형태를 흔히 다중 루프라고 부르는데 특히 두 개의 루프 구문이 중첩된 코드를 별도로 이중 루프라고 부른다.
📝 정식 명칭은 아님. 그냥 사람들 부르기 나름
이중루프의 예시로는 코딩 처음 배우면 빠지지 않고 등장하는 구구단 1단부터 9단까지 ㅎㅎㅎ
이걸 보는 사람들은 다 알겠지만, 공부 겸 복습이니 실제 코드를 보면서 알아보자.
for i in 1..<10 {
for j in 1..<10 {
// 1 X 1 = 1, 1 X 2 = 2 ...
print("\(i) X \(j) = \(i * j)")
}
}
간단히 설명하자면 바깥쪽 루프와 안쪽 루프로 이루어져 있고,
바깥쪽 루프는 1부터 9까지 차례로 순회하고, 안쪽 루프 역시 1부터 9까지 차례로 순회하는 코드다.
주석을 제외하면 단 세 줄의 코드로 이루어진 예제다.
결과물에 비하면 코드는 무척 단순한데 이게 for문의 장점이라 할 수 있다.
📝 두 개의 루프가 중첩되었을 때는 간단해 보이지만 루프가 세 개, 네 개 이상 중첩된다면 꼬일 때 이건 재앙이야....😡😡
간결하고 읽기 좋게 코드 작성..!
📌 while 구문은 다음 편에 ~~!!
Swift 반복문 [ while 편 ]
앞에서 먼저 설명을 햇지만 다시 한번 하자면 for - in 구문은 미리 정의된 실행 횟수만큼 반복하지만, while 구문은 단순히 주어진 조건식의 결과가 false가 될 때 까지 실행 구문을 계속 반복 수행
sheep1sik.tistory.com
'메모장' 카테고리의 다른 글
Swift 변수와 상수 1 (1) | 2023.03.02 |
---|---|
Swift 반복문 [ while 편 ] (5) | 2023.02.28 |
Swift 와 Objective-C 차이 (4) | 2023.02.27 |
Swift 기능/특징 (1) | 2023.02.26 |
Swift 언어의 탄생과 배경/특징 (4) | 2023.02.26 |