Action Kotlin - 1

Kotlin에서 If문은 식이다.

Java에서 if문이라고 한다. 그렇다면, Kotlin에서는 왜 일까?

하나의 상황을 예시로 들어보겠다.

result 라는 변수에 condition의 상태에 따라 값을 저장한다고 가정한다면, JavaKotlin에서는 어떻게 작성할 수 있을까?

Java

가장 먼저 Java에서는 다음과 같이 작성할 수 있다.

String result;
if (condition) {
    result = "참";
} else {
    result = "거짓";
}

Java에서는 변수를 선언하고 if문의 결과를 변수에 할당하여 값을 설정해야 한다.

Kotlin

Java와 다르게 Kotlin에서는 다음과 같이 작성할 수 있다.

val result = if (condition) "참" else "거짓"

Kotlin에서의 if는 값을 반환하는 인 것이다.

이를 함수에 응용하면, max값을 구하는 함수를 다음과 같이 작성이 가능하다.

fun max(a: Int, b: Int) = if(a>b) a else b

이러한 함수를 블록이 본문인 함수 라고 한다.


블록이 본문인 함수

위에서 블록이 본문인 함수의 예시에 대해서 확인했다.
그렇다면, 여기서 의문점이 들 수도 있다.

왜? 반환 타입을 지정하지 않는 것일까?

그것에 대한 해답은 Kotlin 언어는 블록이 본문인 함수의 경우 반환타입을 적지 않아도 컴파일러가 함수 본문 식을 분석하여 결과 타입을 함수 반환 타입으로 정해준다.

이러한 기능을 타입 추론이라고 한다.


val 과 var의 차이

val

val : 값을 뜻하는 value에서 따온 것으로, 변경 불가능한 참조이다.

val의 경우에는 반드시 한 번만 초기화 해야한다. 또한 참조 자체가 불변이지만, 객체의 내부의 값은 변경될 수 있다.

예를들어 언어의 목록이 들어가 있는 language배열을 선언했을 때, add를 이용하여 새로운 언어 kotlin을 추가해주어도 문제가 생기지 않는다.

var

var : 변수를 뜻하는 variable에서 따온 것으로, 변경 가능한 참조다.

var은 그렇다고 아무거나 막 값을 넣어 바꿀 수 없다. 지정한 타입과 동일한 타입으로만 변경이 가능하다. 이는 컴파일 단계에서 변수 타입을 추론하기 때문이다.