2020. 6. 18. 17:01ㆍAndroid/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 |