[Kotlin][언어공부-6] 제어문

2020. 6. 18. 17:01Android/Kotlin

제어문은 if, for등 을 의미한다.

코틀린에서 제어문은

1 기본적으로는 자바와 유사한데 Any타입, in 과 is 등이 쓰이며 자바보다 더 유연한 기능을 제공한다.

2 for 반복문은 python 과 유사하다 for(변수 in 배열 or 범위) { } 로 사용한다.

 

3 while 은 자바와 유사하게 while(조건) {} 로 사용한다.

 

4 case 문은 Any와 같이 사용되어 상당히 유연하다 when(변수) { 조건 -> 실행; } 형식으로 쓰인다. 

  ->  자바의 switch(변수) case 문과는 형식이 달라서 조금 더 자세히 볼 필요가 있는데 

   switch case문이 기본적으로 간단하게 쓸때 사용했다면 코틀린은 Any형을 사용해서 더 여러가지 상황에서 활용 가능한것 같다.

 

 

5 if,case문의 결과를 바로 대입시킬 수 있다. 

  -> 이부분은 신기한데 자바의 경우 if(조건) a = ""; 과 같이 a에 값을 대입시켜야 했다면 

코틀린은 변수에 조건문의 값을 대입시킬 수 있다. 자바로 치자면 삼항연산자의 느낌인데 이를 if로 사용가능하다.

var b = if(a==1) 5 else 6 이런 느낌으로 사용가능해서 엄청 좋은 기능이라고 생각된다.

 

조건문 변수에 대입

조건문을 변수에 대입한다는 개념이 매우 신기하다.

자바라면 int a = (b>5)? a=0 : a=1; 로 쓰이는 삼항연산자를 코틀린으로 표현해 보겠다.

코틀린에서 가능한 개념을 적용해 더 복잡하게 표현해보았는데.

   
    var b = 6
    var a : Any? = if(b>5) 0 else "aa"
                          
    val result = when (a) {
        is String -> {true}
        else -> {false}
    }

b를 비교해서 5보다 클경우 0 아닐경우 문자열을 넣고

 

when 문을 이용해서 result에 문자열인지 int형인지 판단하는 코드를 넣었다.

 

위의 간편한 코드만 봐도

자바에서는 엄청 복잡하게 써야되거나 int형 0과 String형 "aa"가 둘다 들어갈 수 없는 점 등이 있는데 

엄청 유연하다.

 

 

 

 

for문을 사용할때 가장 중요하게 생각해야 되는것이 in 인것 같다 .

자바는 for(int i = 0; i<5; i++) 과 같이 변수 선언과 조건문이 들어가지만 

코틀린은 변수선언이 값이 들어가는 순간 결정되는것, 또는 any형이 존재한다는점 때문에

i에 굳이 형을 선언 안해주어도 동작하는것같다. 후에 선언을 해줄일이 생길때만 선언해주면 될 것 같다.

이후 in 개념이 특이한데

// in (0..9) i 0부터 9까지에 포함되면 true 를 의미한다. . 조건문이다

이개념을 이용해서 여러가지를 확인 할 수도 있을것같다. 배열에 어떤 값이 포함 되었다던지, 를 간단하게 사용할 수 있지 않을까? 아직 정확하게는 모르겠다.

테스트를 위해 in 을 테스트해보겠다.

이를 이용해서

자바나 자바스크립트의 foreach 문 처럼 객체를 돌릴 수도 있는것 같다.

확인해보기 위해 아래와 같이 코딩을 하였다.

 

while문은 동일하니까 패스

 

fun forWhileTest() {
    var array = arrayListOf<Int>(1,2,3,4,5,8)
    var strArray = arrayListOf<String>("sdf","g","gggg")
    //For문
    // 반복문 for: in과 (시작..끝)으로 반복가능
    // in (0..9) 은 i가 0부터 9까지에 포함되면 true 를 의미한다. 즉. 조건문이다
    //이를 테스트 해보기위해
    var flag = 3 in (0..9)
    var strFlag = "g" in strArray

    println("포함된다 3 :" +flag)
    println("포함된다 g :" +strFlag)
    for (i in (0..9) ) {
        println("i -> " + i)
    }

    for (i in array) {
        println("array -> " + i)
    }
    //문자열테스트
    for (i in strArray) {
        println("array -> " + i)
    }
    //반복문은 자바와 마찬가지로 사용한다.
    //반복문 while: while(조건)ㅖ}
    var i : Int = 0
    while(i < 5) { i++; println("$i 입니다.")}
}

 

 

포함된다 3 :true
포함된다 g :true
i -> 0
i -> 1
i -> 2
i -> 3
i -> 4
i -> 5
i -> 6
i -> 7
i -> 8
i -> 9
array -> 1
array -> 2
array -> 3
array -> 4
array -> 5
array -> 8
array -> sdf
array -> g
array -> gggg
1 입니다.
2 입니다.
3 입니다.
4 입니다.
5 입니다.

Process finished with exit code 0

위에 코드를 실제로 돌려보았을때 위와 같이 결과가 도출되는데 정말 자바보다 좋은걸 확인 할 수 있다.

내가 생각한 차이점은 다음과 같다.

1. in 으로 배열을 for문을 돌릴필요 없이 간단하게 내부에 포함된걸 조건 확인할 수 있다.

2. for문의 같은 문법으로 each문 처럼 사용가능하다.(객체를 반복문으로 돌릴 수 있다.)

3. int i =0; 과같이 형을 지정해 줄 필요가 없다.

 

 

Kotlin If문

 

기본적으로 자바와 같다. 하지만 자바에서 쓰는 Object 처럼 Any타입의 비교를 is 로 간단하게 비교 가능하고 

in 문법을 사용해 배열이나 객체의범위에 포함되는지 확인 가능해서 더 다양한 조건문을 사용할 수 있다

 

****IS, IN 이 중요(차이점) ****

 

 

//if 문의 사용법  자바와 동일하다
fun ifTest() {
    var a:Any? = 33;
    if(a=="Test") { println (a) }
    else if ( a is Float ) { println ( "Float" )  }         //Any 타입의 비교
    else if ( a in (0..9) ) { println ( "0-10 까지 숫자 :  $a" )  } //배열,객체범위에 포함되었는지 비교
    else if ( a == null ) { println ("null!") }
}

 

 

Kotlin case문

코틀린은 아래와 같이 사용한다 특이한점은 -> 연산자를 사용한다는 건데 이를 잘 기억해두자

역시 

is 나 in은 중요하게 쓰인다

맨처음에 보면 알수있겠지만 굳이 return 을 안해주고 값만 써놔도 return 처럼 되는걸 확인할 수 있다.

fun caseTest(o : Any?) {
    when(o) {
        "Test"  -> {println("문자:" + o)}
        is Float    -> {println("float: $o")}
        in (0..9)   -> {println ("0-10까지 숫자: $o")}
        else -> {println("???")}
    }
}

반응형

'Android > Kotlin' 카테고리의 다른 글

[Kotlin][언어공부-8] Collection  (0) 2020.06.23
[Kotlin][언어공부-7] label  (0) 2020.06.22
[Kotlin][언어공부-5] function  (0) 2020.06.16
[Kotlin][언어공부-4] Any형  (0) 2020.06.10
[Kotlin][언어공부-3] 문자열  (0) 2020.06.10