본문 바로가기

안드로이드/Kotlin

[Kotlin] Java와의 차이점 2

자료/자료형의 확인 및 변환

  • 객체의 값 검사(==)
  • 객체의 동일성 검사(===)
  • 자료형 확인(is)
  • 자료형 변환(as)

Java의 경우 객체의 값을 검사할 시 equals() 메서드를 사용하고, 동일성 검사는 반대로 ==를 사용한다.

자료형 확인 is 연산자의 경우 Java의 instanceOf와 동일하다.

자료형 변환의 경우 Java에서는 (자료형) variable과 같이 사용하지만, Kotlin에서는 variable as 자료형과 같이 사용한다.

 

 

흐름 제어

if-else 문

Java와 사용법은 동일하지만, Kotlin의 경우 값을 반환할 수 있다.

val age:Int = 20
val ageRange: String = if(age>=10 && age<20){
	"10대"
} else if(age>=20 && age<30){
	"20대"
} else if(...){
	...
} else{
	"기타"
}

 

when 문

Java의 switch의 역할을 하는 제어문이다. 

val bags: Int = 1

when(bags){
    0 -> Log.d(TAG, "We have no bags")
    
    1,2 -> {
        Log.i(TAG, "We have bags")
        Log.d(TAG, "We have $bags bag(s)")
    }
    
    else -> Log.d(TAG, "Cannot have more bag")
}

 

when도 if-else와 비슷하게 값을 반환할 수 있다.

val bags: Int = 1

val bagString: String = when(bags){
    0 -> "No bag"
    
    1,2 -> "$bags bag(s)"
    
    else -> "Cannot have more bags"
}

 

 

또한, Java와 달리 표현식을 사용할 수 잇다.

val str: String = ...

when(str){
    str.startWith('a') -> Log.d(TAG,"A")
    str.startWith('K') -> Log.d(TAG,"K")
}

 

for 문

Kotlin에서는 Java와 달리 for-each문만 지원한다.

val names: List<String> = ... //이름 리스트

//String으로 자동 타입 추론
for (name in names){
    Log.d(TAG,name)
}

//index를 사용하는 경우
for (i in names.indicies){
    Log.d(TAG,name[i])
}

 

범위(range: .., until, downTo, step)

범위는 Kotlin에만 존재하는 '자료구조'이다. 특정 범위를 순환하거나 해당 범위 내에 특정 항목이 포함되어 있는지를 확인할 수 있다.

val myRange: IntRange = 0..10 //0과 10을 포함한 0~10
val yourRange: IntRange = 0 until 11 //0은 포함, 11은 제외한 0~11

for(i in myRange)
    //Do something
    
for(i in yourRange)
    //Do something
    
for(i in 0..10)
    //Do something
    

항목들의 순서가 반대로 정렬된 범위를 생성하려면 downTo(), step()을 활용한다.

//54321 출력
for (i in 5 downTo 1){
    System.out.print(i)
}

//531 출력
for (i in 5 downTo 1 step 2){
    System.out.print(i)
}