반복문 제어 - break

반복문이 무한루프에 빠지지 않게 하기 위해 반복문을 제어하는 명령어가 있는데, breakcontinue이다.

for i in 10...15{
    print("break \(i) 시작-----")
    if(i==13){  //13이면 for문 탈출.
        break   //반복문 탈출 -> 13끝이 출력되지 않고 반복문 종료.
    }
    print("break \(i) 끝-----")
    
}
print("break 종료-----")

"break 13 끝"이 출력되지 않은 채 반복문이 종료되었다. 이와 같이 break는 반복문을 종료하는 데에 사용된다.


반복문 제어 - continue

continue 명령문은 반복문의 실행구문을 수행하지않고 다음 반복문으로 넘어가는데에 사용된다.

for i in 10...15{
    print("break \(i) 시작-----")
    if(i==13){
        continue   //다음 반복순서로 넘김 -> 13끝이 출력되지 않고 14로 넘어간다.
    }
    print("break \(i) 끝-----")
    
}
print("break 종료-----")

break 명령문과 달리, "break 13 끝"의 출력을 건너뛰고 나머지 반복문을 수행하였다.


반복문 - while

조건을 만족하는 동안 실행구문을 반복한다. 

while 조건 {

   실행구문

}

var i = 10			//초기값

while i < 20 {			//i가 20미만이면 반복수행
    print("while 실행 \(i)")
    i += 1			//i 1증가
}

주의 해야 할 점은 while문을 사용할 때 에는 조건을 false로 만들어줄 구문이 없다면 무한루프에 빠지게 된다는 점이다. 

var i = 0
while true {
    print("break start \(i)")
    
    if i == 5 {
        break   //i가 5가 되면 종료
    }
    
    print("break finish \(i)")
    i += 1      //i 증가
}

예시와 같이 종료 시점을 정해주는 것을 잊지 말자


readLine()

사용자의 입력을 받는 함수이다. 옵셔널 형태의 String을 반환한다.

print("입력:",terminator: "")

var text = readLine()
print(text)


while문과 readLine()을 통해 간단한 프로그램을 작성해보자. 사용자의 입력을 받고 그 중 짝수만 선택하여 합계와 평균을 구해본다.

var sum = 0			//합계를 저장할 변수 선언
var cnt = 0			//평균 계산을 위한 변수 선언 
var avg = 0			//평균 값을 저장할 변수 선언 

while true {			//반복문 수행
    print("입력:",terminator: "")
    let input = readLine()!     //사용자의 입력을 input변수에 담는다. 옵셔널 형태로 반환하기에 느낌표를 붙여준다.
    
    if input == "x"{    	//사용자의 입력이 x라면 반복문 종료.
        break
    }
    
    let num = Int(input)!	//사용자의 입력을 정수형태로 num에 대입
    if num % 2 == 0{		//넘어온 사용자의 입력이 짝수인지 확인
        cnt += 1		//평균을 구하기 위해 갯수 파악
        sum += num		//사용자의 입력 합산
        avg = sum/cnt		//평균 계산
    }
    print("number:\(num), total:\(sum), avg:\(avg)")
    
}
print("----------종료되었습니다. 합계:\(sum), 평균:\(avg)----------8")

사용자가 무엇을 입력했는지 보여주기 위해 변수 num은 계속 출력되지만 짝수일 경우에만 sum, avg에 반영되어 출력된다.

'iOS > TJ' 카테고리의 다른 글

day08_multiArray, tuple  (0) 2021.06.03
day07_array  (0) 2021.06.02
day05_control flow_loop  (0) 2021.05.25
day04_control flow_conditional  (0) 2021.05.22
day03_operator, casting  (0) 2021.05.18

control flow

제어 흐름(control flow)이란 코드의 진행 순서를 바꾸는 것이다. 크게 조건문(conditional)과 반복문(loop)으로 나뉘는데, 오늘은 조건문에 대해 적어본다.


조건문 - if

if문에는 크게 3가지 형태가 있다.

if [조건식] {

   [조건이 참일 때 실행 구문]

}

var a:Int = 5

if a >= 5 {
    a = 10
}

print("a:",a)

조건식이 참이기에 a변수에 10이 대입되어 10이 출력된다. 조건식이 성립하지 않았다면 5가 그대로 출력된다.


if [조건식] {

   [조건이 참일 때 실행 구문]

} else {

  [조건이 거짓일 때 실행 구문]

}

var a:Int = 5

if  a > 6 {
    a = 1000
} else {
    a = 2000
}

print("a:",a)

 

 

이번엔 else를 통하여 조건식이 거짓일 경우 실행할 구문을 따로 지정하였다. 조건식 a > 6은 거짓이므로 a에 2000이 대입되어 2000이 출력되었다.


if [조건식1] {

   [조건1이 참일 때 실행 구문]

} else if [조건식2]{

   [조건1이 거짓, 조건2가 참일 때 실행 구문]

} else {

   [조건1, 조건2가 모두 거짓일 때 실행 구문]

}

let score = 70

if score >= 80 {
    print("우수")
} else if score >= 60 {
    print("정상")
} else{
    print("미달")
}

이번에는 조건식을 두개를 적었다. if문의 조건을 판단 후 거짓일 경우 else-if 문의 조건을 판단하여 참일 경우, 거짓일 경우 실행 할 구문을 적었다. 

let score = 50

if score >= 80 {
    print("우수")
} else if score >= 60 {
    print("정상")
} else if score >= 40{
    print("미흡")
} else {
    print("탈락")
}

else-if 문은 원하는 만큼 추가할 수 있다. 단, 선행으로 적은 조건이 거짓일 경우에만 다음 조건으로 넘어가 비교를 하게 되니 순서에 유의하며 작성해야 한다.


조건문 - switch

 

switch문은 대상이 정해진 값과 같은지 비교하여 구문을 실행하는 조건문이다. defualt는 대상이 비교할 값에 모두 해당 하지 않았을시에 실행되는 구문이다.

 

switch 대상(값) {

   case 값1:

      실행구문

   case 값2:

      실행구문

   ...

   default:

      실행구문

}

 

스위프트의 switch구문은 다른 언어와 많이 다른 모습을 보이는데, 기본적으로 break키워드가 생략되어 따로 적을 필요가 없어진다. case를 연속실행하기 위해서는 fallthrough 키워드를 사용한다. 

var score = 70

switch score {
case 80:
    print("80입니다.")
case 70:
    print("70입니다.")
case 40:
    print("40입니다.")
default:
    print("기본값입니다.")
}

score의 70이라는 값이 case 70:에 해당되어 "70입니다"문장이 출력되었다.


var a = 10

switch a {
case 88:
    print("88")
case 10,20,30:       //다중 값을 적을 수 있다. 하나라도 해당되면 구문을 실행한다.
    print("10,20,30입니다.")
case 70...80:       //70이상 80이하 범위 값
    print("70...80입니다.")
case 50..<60:       //50이상 60미만 범위 값
    print("50..<60입니다.")
case 200...:       //200이상
    print("200...입니다.")
case ...150:       //150 이하
    print("...150입니다.")
case ..<170:       //170미만
    print("..<170입니다.")
default:
    print("기본값입니다.")
}

스위프트의 switch문은 또 다른 차별점이 있는데, 바로 case문에 다중 값, 범위, 조건절 등 을 추가할 수 있다는 것이다.

let score = 85
let color = "red"

switch color{
case "red" where score % 2 == 0:	//score가 짝수이면서, color가 red인 경우
    print("red 짝수")
case "red" where score >= 80:		//score가 80이상이면서, color가 red인 경우
    print("red 우수")
case "blue":
    print("blue")
case "green":
    print("green")
case "red" where score >= 60:		//score가 60이상이면서, color가 red인 경우
    print("red 정상")
case "red":
    print("red")
default:
    print("default")
}

 스위프트의 switch에는 where절을 통해 조건을 걸수 있는 것이 큰 특징이다. 단, switch문을 사용할 때 알아 두어야 할 점은 대상이 두 개 이상의 case에 부합하더라도, 먼저 적힌 case의 실행구문만 실행 된다는 점이다.


범위연산자

앞서 나온 범위표현에 대해서 적어본다. 값의 범위를 나타내고자 할 때 사용한다. 

연산자 부호 설명
폐쇄 범위 연산자 A ... B A이상 B이하
반폐쇄 범위 연산자 A ..< B A이상 B미만
단방향 범위 연산자 A ... A이상
... A A이하
..< A A미만

 

'iOS > TJ' 카테고리의 다른 글

day06_control flow_loop  (0) 2021.05.27
day05_control flow_loop  (0) 2021.05.25
day03_operator, casting  (0) 2021.05.18
day02_var  (0) 2021.05.18
day01_print()  (0) 2021.05.13

+ Recent posts