코틀린(Kotlin)에 대해 알아보자
코틀린(Kotlin)은 무슨 언어이며 왜 쓰여지는지 알아보자.
코틀린은 3년전쯤에 프로젝트에서 써본 경험이 있으나,
이번에 이직하는 회사에서 사용되는 주언어가 코틀린이기에 다시 언어와 친해지고 포스팅도 할겸 정리하게 되었다.
코틀린이란?
코틀린은 Jetbrain에서 만들어진 JVM기반의 프로그래밍 언어로 자바(Java)와 100% 호환되는 언어이다.
100% 호환되기에 자바와 코틀린 서로 코드 호출이 가능하기에 조합하여 활용할 수도 있고 기존 코드를 마이그레이션하기에도 용이하다.
몇년전 구글에서도 안드로이드 개발 언어로 코틀린을 채택했으니 구글 네임밸류를 봤을때 언어에 대한 검증은 이미 충분하다고 볼 수도 있다.
코드 문법이 자바에 비해 간결하고 모던하며 크로스 멀티플랫폼 개발(백엔드, 안드로이드, iOS, Desktop, Web)도 가능하다.
'코루틴' 으로 비동기 프로그래밍 처리도 용이하다.
참고로.. 개인적인 경험으로 느낀점은 같은 JVM 기반의 언어인 스칼라(Scala)와 비교하면 코틀린은 정말 깔끔하고 훨씬 사용하기 좋았다.
주요 문법 및 특징
코틀린을 쓰다보면 각 언어들의 장점을 잘 취해 모던한 문법인게 느껴진다.
몇가지 대표적인 것들을 살펴보자.
간결한 문법
1. 세미콜론이 없다.
- 호불호가 있는 부분이라 생각하지만 개인적으로 좋아한다
2. 출력이 간편하다.
- 자바에서는 디버깅이나 로그 확인을 위해 System.out.Println() 과 같은 함수를 많이 사용한다. 벌써 귀찮다.
- 하지만 코틀린에서는 print() 함수 하나만 호출하면 되니 얼마나 편한가.
3. 변수와 상수를 var, val 키워드로 간편하게 선언이 가능하다.
- 타입스크립트에도 대입하는 값의 타입을 지정해주는 타입 추론과 같이 타입을 일일이 적지 않아도 되는 것은 큰 장점이다
4. 클래스 생성시 new를 쓰지 않아도 된다.
- 예를들어 SampleClass() 라고 적었다면 코틀린 입장에서 SampleClass가 함수인지 클래스인지 알 수 있을 것이다.
- 그렇기에 굳이 new 라는 키워드를 적지 않아도 될것이다.
5. 루프에서 in과 range 문법이 지원된다.
Null safety
fun main() {
var neverNull: String = "Null 허용 안됨"
neverNull = null // 컴파일 에러
var nullable: String? = "NullNull하게~"
nullable = null // 문제 없음
}
자바에서는 NPE(Null pointer exception)을 만나기 쉬운데 코틀린에서는 이를 방지하기 위해 변수 선언시 널허용이 가능하다는 명시를 해주어야 한다.
위의 예시코드처럼 변수 타입에 ?를 붙여주는 것과 같이 Null에 대해 코드상에서 엄격히 관리하여 NPE 오류 방지한다.
또한 Null 허용된 변수의 경우 maybeString?.length 와 같이 null이 아닌 경우 참조하도록 안전하게 처리가 가능하다.
람다식 함수
코틀린 역시 람다식으로 함수를 간결하게 사용 가능하다.
fun main() {
val upperCaseString = { text: String -> text.uppercase() }
println(upperCaseString("hello"))
}
함수 체이닝과 람다식을 결합하여 사용도 가능하다.
보통 리스트 가공처리할 때 유용하다.
fun main() {
val numbers = listOf(1, -2, 3, -4, 5, -6)
val result = numbers.filter { x > 0 } .map { x * 2 }
println(result) // [2, 6, 10]
}
코루틴
비동기 처리를 보다 간결하게 정리할 수 있게 해주는 문법이다.
코루틴에 대해서는 다음에 별도로 자세히 다루어보겠다.
정리
코틀린에 대한 특징은 훨씬 더 많지만 간단히 알아보기 위한 목적이였으므로 이정도에서 정리하려한다.
확실히 자바에 비해 문법에 군더더기가 없어 깔끔하다.
코틀린 문법을 보다보면 JS 진영의 타입스크립트 문법과 비슷한것들이 꽤 보인다.
Jetbrain 에서 코틀린을 만들게 된 배경은 자바에서 오는 불편함을 극복하고 생산성을 더 높게하려고 만들게 되었다고 한다.
그렇다고 기존에 만든 자바를 모두 버리거나 바꿀수 없으니 100% 호환되는 것을 목표로 만들었다고 한다.
확실히 문법이 간결한 것은 외울것도 적고 배우기도 편해 장기적으로 생산성에 큰 차이를 만든다.
그렇다고 코틀린을 무조건 고집해야 하는 것은 아니다.
기존에 만들어진 거대한 제품이 모두 Java라면 마이그레이션 비용이 엄청 크기에 모두 이관하는 것이 불가능할 것이다.
그렇다고 신규 기능부터 코틀린으로 만들자니 두개의 언어를 다루어야하는 것도 오히려 생산성 저하를 불러올 수 있기 때문이다.
그리고 개발팀의 보유 기술도 고려해야하고, 채용 시장에서 코틀린에 대한 선호도도 고려되어야 한다.
하지만 코틀린의 장점이 다양하고 크다고 생각한다.
그렇기에 개인적으로는 어떤 상황에 의해 필수로 자바를 써야하는것이 아니라면 코틀린을 선택하기로 했다.