해당 포스팅은 인프런에서 제공하는 최태현 님의 '자바 개발자를 위한 코틀린 입문'을 수강한 후 정리한 글입니다. 유료 강의를 정리한 내용이기에 제공되는 예제나 몇몇 내용들은 제외하였고, 정리한 내용을 바탕으로 글 작성자인 저의 언어로 다시 작성한 글이기에 서술이 부족하거나 잘못된 내용이 있을 수 있습니다. 그렇기에 해당 글은 개념에 대한 참고 정도만 해주시고, 강의를 통해 학습하시기를 추천합니다.
fun validationScore(score: Int) {
if (score < 0) {
throw IllegalArgumentException("${score}는 0보다 작을 수 없습니다.");
}
}
위의 코드 예제를 통해 알 수 있는 코틀린과 자바의 차이는 함수를 선언하기 위해 fun
키워드를 사용하며, Exception
을 throw
할 때 new
키워드를 생략한다는 것이다.
if
문은 기본적으로 자바와 사용 방법이 동일하다. 그러나 자바에서 if-else
는 Statement이지만 코틀린에서는 Expression이라는 차이가 있다.
Expression은 '수식'이라는 뜻으로 하나 이상의 값으로 표현될 수 있는 코드를 뜻한다. 변수와 연산을 비롯해 함수 콜, 변수 이름과 같은 식별자, 배열등의 할당 연산자까지도 포함한 식을 의미한다.
Statement는 프로그래밍에서 실행가능한 최소의 독립적인 코드 조각을 말한다. 컴파일러가 이해하고 실행할 수 있는 모든 구문은 statement이며 한 개 이상의 expression과 프로그래밍 키워드를 포함한다.
int num = 30 + 40; // Expression & Statement
boolean isPass = if (num > 50) { "Pass"; }
// if문을 하나의 값으로 취급하지 않기 때문에 에러 발생, !Expression & Statement
위의 예제와 같이 자바에서 if-else
문은 statement이다. 그러나 코틀린에서는 expression이기 때문에 아래와 같이 사용할 수 있다.
val isPass: Boolean = if (score > 50) { "Pass" } else { "Fail" }
이처럼 조건문을 expression으로 사용할 수 있기 때문에 코틀린에는 삼항 연산자가 존재하지 않는다.
또한if (0 <= score && score <= 100)
과 같은 범위에 대한 조건식을 if (score in 0..100)
과 같이 in
을 사용하여 간단하게 표기할 수 있다.
코틀린에서는 자바의 switch
문이 when
으로 대체되었다.
when(값) {
조건부 -> 어떠한 구문
조건부 -> 어떠한 구문
else -> 어떠한 구문
}
조건부에는 어떠한 expression이라도 들어갈 수 있으며, 여러 개의 조건을 ,
로 구분하여 동시에 검사할 수 있다. 값 부분이 없을 경우 early return 처럼 동작하며, when
역시 expression으로 사용 가능하다. Enum, Sealed Class와 함께 사용할 경우 시너지가 좋다.
기본적으로 for문과 for-each문 모두 자바와 거의 동일하게 동작하지만 문법에 약간의 차이가 있다.
자바와 동일하게 Iterable이 구현된 타입이라면 모두 for-each문을 사용할 수 있다. :
대신 in
을 사용한다는 차이가 존재한다.
for (number in numbers) {
println(number)
}
for (i in 1..3) {
println(i)
}
위의 코드는 자바의 for (int i = 0; i <= 3; i++)
와 동일하게 동작한다. i가 증감식이 감소되는 경우에는 for (i in 3 downTo 1)
과 같이 표현할 수 있으며, 증가되는 수가 2 이상일 경우 for (i in 1..5 step 2)
와 같이 표현할 수 있다. 여기서 사용되는 downTo
와 step
모두 함수이며, 중위 호출 함수라 한다.
코틀린은 for
문 사용 시 1..3
과 같은 범위 연산자와 downTo
, step
과 같은 함수를 이용하여 등차수열을 만들어낸다. 1..3
, 3 downTo 1
을 통해 시작값과 끝값을 표현하고 step
을 통해 공차를 표현해주는 것이다.
이 외의 반복문인 while
, do while
문은 자바와 완전히 동일하다.