초보 개발자의 성장기

[부스트코스] [부스트코스][코틀린 프로그래밍 기본 1/2] 한아아지와 함께하는 kotlin - 프로그램 흐름 제어 (1) 본문

IT 강의 리뷰/코틀린

[부스트코스] [부스트코스][코틀린 프로그래밍 기본 1/2] 한아아지와 함께하는 kotlin - 프로그램 흐름 제어 (1)

개발자 김케빈 2021. 1. 24. 23:50

조건문을 통해 분기와 반복문에 대해서 공부해보겠습니다!


www.boostcourse.org/mo132/lecture/59982/

 

코틀린 프로그래밍 기본 1

부스트코스 무료 강의

www.boostcourse.org

www.boostcourse.org/mo132/lecture/66358

 

코틀린 프로그래밍 기본 1

부스트코스 무료 강의

www.boostcourse.org

www.boostcourse.org/mo132/lecture/59983

 

코틀린 프로그래밍 기본 1

부스트코스 무료 강의

www.boostcourse.org

 



1. if문

1.1. if문이란?

if는 주어진 조건이 참인 경우에 실행 가능한 코드입니다.

else문을 추가적으로 사용해주면 거짓일 경우에도 실행 가능합니다. 

1.2. if문 기본 코드


if (조건식) { 
    수행할 문장 // 조건식이 참인 경우에만 수행
} else { 
    수행할 문장 // 조건식이 거짓인 경우에 수행
}

// 예시 1
var max: Int
if(a > b)
    max = a
else 
    max = b
    
// 수행할 문장이 한줄로 간단한 경우 중괄호를 없애고 다음과 같이 한줄에 구성할 수도 있습니다.
val max = if(a > b) a else b


1.3. 블록과 함께 사용하는 경우


fun main() {
	val a = 12
    val b = 7
    
    // 블록과 함께 사용
    val max = if (a > b) {
    	println("a 선택")
        a // 마지막 식인 a가 반환되어 max에 할당
    }
    else {
    	println("b 선택")
        b // 마지막 식인 b가 반환되어 max에 할당
    }
    
    println(max)   
}


1.4. else if를 활용하여 조건문 중첩

여러 가지 조건을 적용하기 위해 이번에는 else if 문을 이용하여 조건문을 중첩할 수 있습니다.

else if는 필요한 만큼 조합할 수 있습니다만 너무 많으면 코드 읽기가 어려워집니다.


// 비교 연산자와 논리 연산자 사용
fun main() {
	print("점수를 입력하시오 : ")
    val score = readLine()!!.toDouble() // Double 형태를 사용자에게서 입력받음
    val grade: Char = 'F'
    
    if (score >= 90.0) {
    	grade = 'A'
    } else if (score >= 80.0 && score <= 89.9) {
    	grade = 'B'
    } else if (score >= 70.0 && score <= 79.9) {
    	grade = 'C'
    }
    
    println("score: $score, grade: $grade")


1.5. in 연산자와 범위 연산자로 조건식 간단하게 만들기

👉 비교연산자와 논리 연산자의 복합

비교 연산자 (>, <, =) / 논리 연산자 (&&, ||) 등을 사용

 

👉 범위 연산자

변수명 in 시작값..마지막값 


// 범위 연산자 사용

fun main() {
	print("점수를 입력하시오 : ")
    val score = readLine()!!.toDouble() // Double 형태를 사용자에게서 입력받음
    val grade: Char = 'F'
    
    if (score >= 90.0) {
    	grade = 'A'
    } else if (score in 80.0..89.9) {
    	grade = 'B'
    } else if (score in 70.0..79.9) {
    	grade = 'C'
    }
    
    println("score: $score, grade: $grade")


2. when을 활용한 조건문

2.1. when 문으로 다양한 조건문 처리

주어진 인자에 대해 다양한 조건을 만들거나 인자 없이 여러개의 조건을 구성할 수 있습니다.

when 구문은 다른 언어에서 사용되는 switch ~ case 구문과 같은 의미로 사용되는 코틀린 전용 코드입니다.

 

2.2. when 기본 코드

화살표(->) 왼쪽에는 일치하는 값, 표현식, 범위를 사용할 수 있고 오른쪽에는 수행할 문장을 사용합니다.
조건과 일치하는 값이 없으면 else문 다음에 작성한 문장을 실행합니다.

화살표 오른쪽에 사용한 수행 문장에서는 한줄인 경우에는 중괄호가 필요하지 않으며
또 switch~case에서 사용하던 break문을 사용하지 않아도 됩니다.


when (인자) {
  인자에 일치하는 값 혹은 표현식 -> 수행할 문장
  인자에 일치하는 범위 -> 수행할 문장
  ...
  else -> 문장
}


// 예시 1

when (x) {
    1 -> print("x == 1")
    2 -> print("x == 2")
    else -> { // 블록 구문 사용 가능
        print("x는 1, 2가 아닙니다.")
    }
}

 

2.3. when문으로 다양한 조건 처리

① 인자를 사용하는 when문 (Cont.)

📕 일치되는 조건


when(x) {
    0, 1 -> print("x == 0 or x == 1")
    else -> print("기타")
}

📕 함수의 반환값 사용하기


wheb (x) {
	parseInt(s) -> print("일치함")
    else -> print("기타")
}

📕 in 연산자와 범위 지정자 사용


when(x) {
	in 1..10 -> print("x는 1 이상 10 이하 입니다.")
    !in 10..20 -> print("x는 10 이상 20 이하의 범위에 포함되지 않습니다.")
    else -> print("x는 어떤 범위에도 없습니다.")
}

📕 is 키워드 함께 사용하기


val str = "안녕하세요"
val result = when(str) {
	is String -> "문자열입니다."
    else -> false
}


2.4. 인자가 없는 when

특정 인자에 제한하지 않고 다양한 조건 구성이 가능합니다.


when {
	조건[혹은 표현식] -> 실행문
    ...
}

// 예시 1

fun main() {
	print("Enter the score : ")
    var score = readLine()!!.toDouble()
    var grade: Char = 'F'
    
    // 인수 없는 when의 사용
    when {
    	// 인자 없는 when과 다르게 조건식 구성이 가능
    	score >= 90.0 -> grade = 'A'
        score in 80.0..89.9 -> grade = 'B'
        score in 70.0..79.9 -> grade = 'C'
        score < 70.0 -> grade = 'F'
    }
    println("Score : $score, Grade : $grade")
}
        


3. 반복문

3.1. 반복문이란?

반복문은 조건 식에 따라 반복할 때 사용합니다.

for / while / do ~ while 등 다양한 방식으로 사용합니다.

 

3.2. for문 

for (요소 변수 in 컬렉션 혹은 범위) {
	반복할 본문
}


// 예시 1 - 코틀린의 in과 범위 지정을 활용한 루프
for (x in 1..5) {
	println(x)
}


// 예시 2 - 한 줄에 표현하는 루프
for (x in 1..5) println(x)

※ 코틀린은 자바와 달리 세미콜론(;) 을 사용하지 않습니다.

 

3.3. 하행 반복 / 단계 증가

하행 반복은 downTo를 사용하고 단계 증가는 step를 사용합니다. 필요할 경우 혼합 사용도 가능합니다.


// 하행 반복 downTo
for (i in 5 downTo 1) print(i)

/* 결과 5 4 3 2 1 */


// 필요한 단계 증가 - step
for (i in 1..5 step 2) print(i)

/* 결과 1 3 5 */


// 혼합 사용
for (i in 5 downTo 1 step 2) print(i)

/* 결과 5 3 1 */

3.4. while

while문은 조건식이 true인 동안 본문의 무한 반복을 진행합니다.
조건식이 false가 되면 실행문이 중단되어 while 루프(반복)를 빠져 나갑니다.


// 기본 코드
while (조건식) {
	본문 
}


// 예시 1

var i = 1

while (i <= 5) {
	println("$i")
    if (temp > 한계 온도) { 경고 발생 }
    ...
}


// 예시 2
fun main() {
	print("Enter the number : ")
    var number = readLine()!!.toInt()
    var factorial: Long = 1

	// n x ... x 4 x 3 x 2 x 1
    while (number > 0) {
    	factorial *= number
        --number
    }
    
    println("Factorial: $factorial")
}

 

3.5. do ~ while

do~while 문은 do 블록에 작성한 본문을 한 번은 실행한 다음

마지막에 조건식을 검사해서 true가 나오면 작업을 반복합니다.


// 기본 코드
do {
  본문
} while (조건식)


// 예시 1
fun main() {
	do {
    	println("Enter the number : ")
        val input = readLine()!!.toInt()
        
        for (i in 0..(input-1)) {
        	for (j in 0..(input-1)) {
            	print((i + j)% input + 1)
            }
        }
        
    } while (input != 0)e
    
    
 // 예시 2
 fun main() {
	do {
    	println("Enter the number : ")
        val input = readLine()!!.toInt()
        
        for (i in 0 until (input-1)) {
        	for (j in 0 until (input-1)) {
            	print((i + j)% input + 1)
            }
        }
        
    } while (input != 0)e
 
 
/* 
결과
Enter the number : 5
12345
23451
34512
45123
51234
*/

읽어주셔서 감사합니다!

Comments