大器晩成

반복문 (For문) 본문

iOS/Swift 문법

반복문 (For문)

zerobugpark 2024. 11. 5. 11:52

반복문(Loop)은 프로그래밍에서 특정 코드 블록을 여러 번 실행할 수 있도록 하는 제어 구조입니다. 반복문을 사용하면 동일한 작업을 반복적으로 수행하거나, 일정한 조건이 만족될 때까지 코드를 실행할 수 있습니다. 반복문은 효율적인 코드 작성과 작업 자동화를 가능하게 합니다.

 

반복문의 종류

  • for 반복문: 지정된 횟수만큼 코드를 반복 실행합니다.
  • while 반복문: 조건이 참인 동안 코드를 반복 실행합니다.
  • repeat-while 반복문: 코드를 먼저 한 번 실행한 후, 조건이 참인 동안 반복합니다.

 

For  반복문

기본 구문

for <루프(반복)상수> in <순회대상> {
   <실행할 구문>
}

또는

for 변수 in 범위/문자열/컬렉션(배열,딕셔너리,set) {
    // 실행할 코드
}
  • 순회 대상은 주로 순번을 가지는 집단 자료형이나 또는 범위를 가지는 데이터 등이 사용되는데,  이 대상의 길이나 포함하고 있는 아이템의 개수만큼 구문이 반복됩니다.
  • 루프상수는 구문이 반복될 때마다 순회 대상이 포함하고 있는 개별 아이템들을 차례로 넘겨받아 임의로 저장하고, 실행블록 내에서 사용할 수 있습니다. 루프 구문이 순회할 때마다 자동으로 재선언되므로 let 키워드를 사용하여 직접 선언할 필요가 없습니다.
  • for문 내부에서는 외부에 선언된 변수에는 접근이 가능합니다.
  • for문 내부에서 새롭게 선언한 변수에는 외부에서 접근이 불가능합니다.
#1
for c in "String" {
    print(c) // 상수 c는 character 타입
} 
//출력: S
//출력: t
//출력: r
//출력: i
//출력: n
//출력: g

#2
for row in 1...5 {
    print(row)
}
//출력: 1
//출력: 2
//출력: 3
//출력: 4
//출력: 5

#3
for row in 1...9 {
    print("2 X \(row) = \(row*2)")
}
//출력: 2 X 1 = 2
//출력: 2 X 2 = 4
//출력: 2 X 3 = 6
//출력: 2 X 4 = 8
//출력: 2 X 5 = 10
//출력: 2 X 6 = 12
//출력: 2 X 7 = 14
//출력: 2 X 8 = 16
//출력: 2 X 9 = 18

#4
var name:String = "Zeroubug"

for i in 1...3 {
    print(name)
    
}
//출력: Zerobug
//출력: Zerobug
//출력: Zerobug

#5
for year in 1940...2017 {
    print("\(year)년도")
}
print("\(year)년도") // year는 For 루프 내에 변수이기 때문에 밖에서 사용 불가

#6 배열 등 컬렉션 타입에서도 사용 가능
let list = ["Swift", "Programming", "Language"]

for str in list {
    print(str)
}
//출력: "Swift"
//출력: "Python"
//출력: "Java"

for str in ["Swift", "Programming", "Language"] {
    print(str)
} // 위에 for문과 동일한 출력

 

루프상수의 생략

for ~ in 구문을 사용할 때 루프 상수가 필요하지 않는 경우 _(언더바, 와일드 카드 패턴)를 사용하여 루프 상수를 생략할 수 있습니다.

#1
for _ in 0...10 {
    print("hello")
} #출력: hello가 10번 출력

#2 
let padchar = "0"
var keyword = "3"

for _ in 1...5 {
    keyword = padchar + keyword
}
print("\(keyword)") // 출력: 000003


#3
let _ = "문자열"
  • 일반적으로 상수/변수로 저장할 필요 없이 생략되는 경우에도 사용된다.

 

 for 범위에서 많이 사용되는 함수

  • (1...5).reversed(): 숫자를 역순으로 정렬하는 함수
  • stride(from: 시작점, to: 끝지점, by: 간격): 숫자를 특정간격으로 범위를 생성하는 함수 (끝지점을 포함하지 않음)
  • stride(from: 시작점, through: 끝지점, by: 간격): 숫자를 특정간격으로 범위를 생성하는 함수(끝지점를 포함)
#1 역순으로 바꾸기
for number in (1...5).reversed() {
    print(number)
} //출력: 5,4,3,2,1


#2 홀수 또는 홀수만 뽑아내기
for number in stride(from: 1, to: 15, by:2) {    
    print(number)
} //출력: 1,3,5,7,9,11,13

#역순으로 홀수 뽑아내기 1
for number in stride(from: 1, to: 15, by:2).reversed() {   
    print(number)
} //출력: 13,11,9,7,5,3,1

#다양한 활용 방법
for number in stride(from: 15, to: 1, by:-2).reversed() {    
    print(number)
} //출력: 3,5,7,9,11,13, 15

#다양한 활용 방법
for number in stride(from: 15, to: 1, by:-2) {    
    print(number)
} //출력: 15,13,11,9,7,5,3
  • stride()와 reversed() 같이 쓰면 우선적으로 stride함수가 실행되고,  나온 숫자들을 기준으로 reversed 함수가 실행됩니다. 그 이후 정렬된 숫자를 루프상수에 하나씩 대입해서 출력하게 됩니다..

 for ~ in 구문의 중첩

흔히 다중 루프 또는 두 개의 루프 구문이 중첩된 코드를 별로도 이중 루프라고 부릅니다.

#구구단 코드

for i in 1..<10 { // 반 닫힘 범위 연산자
    for j in 1...9 { // 닫힌 범위 연산자
        print("\(i) * \(j) = \(i*j)")
    }
} 

# 다이아 몬드
let diamond = 6

for i in 0..<diamond {

    for j in 0..<diamond - i{
        print(" ", terminator: "")
    }

    for k in 0...i*2{
        print("*", terminator: "")
    }
    print()
}

for i in 1..<diamond {

    for j in diamond - i...diamond {
        print(" ", terminator: "")
    }

    for k in i*2..<diamond * 2 - 1 {
        print("*", terminator: "")
    }
    print()
}
//출력 결과"
      *
     ***
    *****
   *******
  *********
 ***********
  *********
   *******
    *****
     ***
      *
      
      
# 문제 stride 함수 사용해서 다이아몬드 짜보기

for i in stride(from: 0, to: diamond, by: 1) {
    for _ in stride(from: diamond - 1, to: i, by: -1) {
        print(" ", terminator: "")
    }
    for _ in stride(from: 0, through: i * 2, by: 1) {
        print("*", terminator: "")
    }
    print()
}
for i in stride(from: diamond - 2, through: 0, by: -1) {
    for _ in stride(from: diamond - 1, to: i, by: -1) {
        print(" ", terminator: "")
    }
    for _ in stride(from: 0, through: i * 2, by: 1) {
        print("*", terminator: "")
    }
    print()
}
728x90

'iOS > Swift 문법' 카테고리의 다른 글

함수(Function)  (0) 2024.11.07
반복문 (While문)  (5) 2024.11.06
삼항연산자  (0) 2024.11.01
튜플(Tuple)  (0) 2024.11.01
조건문(switch)  (3) 2024.11.01