본문 바로가기
  • hazard_dev@__
  • hazard_dev@__
Kotlin

[Kotlin#3] Kotlin(코틀린) 제어 및 반복문(if, for, while)

by Hazard3_o00sung 2020. 12. 11.
728x90

안드로이드를 대표하는 강력한 언어, 코틀린입니다

Useful Control flow and Loop flow in Kotlin

  저번 시간까지는 변수의 타입을 포함해, 기본적인 코틀린의 기능에 대해서 배워보았습니다. 이번 시간에는 코틀린에서의 제어문과 반복문에 대해서 알아볼 예정입니다.

 

IF - ELSE

우선 코틀린은 다중 패러다임을 지향하는 언어이지만, 주로 함수형에서의 표현식이 아주 강력하고, 직관적으로 전달되는 언어입니다. 기본적으로 모든 언어와 동일하게 제어문은, if로 표현식을 이어나갈 수 있죠, if는 여러분들도 아시다시피 첫 제어점에서 참이 되는 값과 거짓이 되는 값으로 나누어 스코프 연산 동작을 하는 그런 표현식이죠! 뭐 예를 들어 간단하게 아래처럼 표현할 수 있겠죠

 

1
2
3
4
5
6
7
8
9
10
fun main(){
    val foo:Int = 2;
    val bar:Int = 4;
    if (foo > bar){
        print("hello")
    } else{
        print("world")
    }
    return;
}
cs

 

위 코드와 같이 간단하게 작성해볼 수 있습니다. 이렇게 사용될 수 있습니다. 뭐 따로 설명 안드려도 저런 표현식이라면, 어떻게 사용해야 할지 아시겠죠

 

그리고 컴파일 옵션을 잊으신 분들을 위해서 옵션을 남기면

$ kotlinc filename.kt -include-runtime -d main.jar

$ java -jar main.jar

 

컴파일 옵션은 위와 같습니다. 뭐 다른 옵션들도 다양하지만, 사실 저희가 문법을 익히는 레벨에서의 다른 옵션 선택지는 고려사항이 아닙니다. 

 

WHEN

혹시 하스켈이라던지, 다른 함수형 언어를 해보신 분들이 계시다면, 위와 같은 키워드가 어느정도어느 정도 익숙할지도 모르겠습니다. 뭐 만약에 C, Cpp을 해보신 분이라면 당연히 switch-case 표현식은 다들 아시겠죠? 뭐 그 표현식과 어느 정도 일치도 하고 문법도 대략적으론(?) 비슷합니다. 그러니까 when-else 문을 사용하는데, 아래 코드와 같이 사용합니다.

 

1
2
3
4
5
6
7
8
9
10
11
fun main(){
    val foo:Int = 2;
    when (foo){
        1 -> print("hello");
        2 -> print("world");
 
        else -> {
            print(" : (");
        }
    }
}
cs

 

위의 코드로 사용하는데, 당연히 if와는 다르겠죠? 하지만 역할은 비슷합니다. 그러니까 when과 else사이에 있는 분기문이 when의 인자로 들어온 변수의 값과 일치하거나, 사용자 정의 분기에 해당이 되는 표현식이라면 컴파일러는 현재 foo와 지정된 분기 값을 대조합니다. 당연히 해당이 되지 않는다면, else구문을 실행하겠죠? when은 어떻게 보면 다중 if문과도 유사합니다. 그렇기 때문에 문법적 독창성, 코드의 유연함과 재사용에 유리한 점을 모두 제공합니다. 여러분들을 위해서 다중 if문과 c언어에서의 switch-case문을 작성해서 모두 비교해보도록 해드리겠습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
fun main(){
    val foo:Int = 2;
    when (foo){
        1 -> print("hello");
        2 -> print("world");
 
        else -> {
            print(" : (");
        }
    }
 
    if (foo == 1){
        print("Hello")
    }else if(foo == 2){
        print("world")
    }else{
        print(": (");
    }
}
cs

 

어떠신가요, if문이 많이 중첩되었는데, (물론 실제로 이거보다 훠얼씬 중첩이 많이 돼서 사이클로 메틱 경고가 발생하는 경우까지 존재할 정도로 많다면..?) when 구문이 얼마나 짧게 표현되지만, 강력하게 사용될 수 있는지 아실 수 있는 대목이라고 생각이 듭니다. 그렇다면 C언어에서의 switch문을 보겠습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
 
int
main()
{
    int foo = 10;
    switch (foo)
    {
    case 10:
        printf("hello");
        break;
    case 20:
        printf("world");
        break;
    case 30:
        printf("What ? ");
        break;
    default:
        printf(":  (");
        break;
    }
    return 0;
}
cs

 

보시게 되면, 코틀린의 when이 얼마나 표현력이 깔끔한지 비교가 쉽게 가능하죠? 저는 물론 C, C++을 사랑합니다. 하지만 이런 부분들은 현대적 프로그래밍 언어들이 역사가 오래된 언어들에 비해서 당연히 표현력이 좋다는 건 어쩔 수 없어요

 

For

루프는 어떠한 데이터든 간에 반복을 가능하게 합니다. 문자열이든 정수든 말이죠! 몇몇 언어를 제외하고는 반복문이 대부분 존재합니다. 그리고 코틀린 또한 가지고 있죠, 이 For 구문은 인간이 읽기 쉽게 만들어졌기 때문에 누구나 쉽게 읽을 수 있습니다. 아래 코드를 보시죠

 

1
2
3
4
5
6
fun main(){
     val foo:Int = 20;
     for (bar in 1..foo){
         println(" ${bar}")
     }
}
cs

 

가장 간단하게 작성한 반복문입니다. 물론 ..의 의미는 뭐 range라는 컴파일 명령인 거 아실 테고!! 물론 리스트 연산 또한 쉽게 되죠, 아래 코드를 보면서 for에 대한 설명은 마치겠습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
fun main(){
     val foo:Int = 20;
     for (bar in 1..foo){
         println(" ${bar}")
     }
     val bar = listOf(1,2,3,4);
     for (x in bar){
         print(x)
     }
     for ((x,y )in bar.withIndex()){
         print("$x : $y")
     }
}
cs

 

위와 같이 다양한 방법으로 작성을 할 수 있습니다. 코틀린은 문법적 자유도가 상당히 높다라는 것을 알 수 있게하는 표현이네요...

 

While

마지막으로 while과 Do-While에 대해서 알아보도록 하겠습니다. 뭐 물론 다른 언어에서의 while과 별반 다를 바 없는 작동 방식입니다. 뭐 Do-While문 같은 경우에는 말 그래도, Do(분기분) 우선 하고 봐!! -> While(조건문) 할 때까지 이런 거라 결국은 뭐 엇비슷합니다. 문법 한번 보시고 실습해보시면 금방 이해하실 듯합니다!! 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
fun main(){
     var foo:Int = 20;
     while (foo != 0){
         print(foo)
         foo--;
     }
 
     var bar:Int = 30;
     do{
         println(bar)
         bar--;
     }while(bar != 0);
}
cs

 

코드를 보시게 되면, while문 안의 조건문은 foo가 0이 아닐때 까지 기약 없는 반복을 해라 이 말입니다. 그렇기 때문에 while문을 제대로 사용 못하시면, 프로그램은 악의 구렁텅이로 빠질 수 있다는 점은 명심해서 코드를 작성하세요!!

 

 

 

뭐 오늘까지 하면 진짜 기초적인 문법은 끝났고 다음 코틀린 글에서는 아마도 클래스와 객채개념인데 이러한 개념은 위처럼 쉽사리 이해할 수 없을 수 있습니다. 잘 따라 하시면야 물론...ㅎㅎ

 

 

 

글 잘보셨다면, 댓글이나 하트 남겨주시면 감사하겠습니다:)

 

질문이나 피드백, 문의사항 있다면 댓글로 남겨주세요! 감사합니다!!

 

hazarddev.tistory.com/51

 

[Kotlin#4] Kotlin(코틀린) 클래스 및 객체(class & object)

Practical object in Kotlin 저번 글에서는 코틀린의 제어문과 반복문에 대해서 간략하게 알아보았습니다. 그렇다면, 당연히 자바를 기반으로 하는 언어, 코틀린의 다음 챕터는 객체 개념이 됩니다! 간

hazarddev.tistory.com

 

728x90

댓글