Java to Kotlin

2022. 4. 11. 19:07
반응형

자바를 주로 사용하던 개발자들이 요즘 코틀린으로 넘어가고 있다. 코틀린이 엄청 매력적인 것 같아서 나도 코틀린을 배우는 중이다. 해당 포스팅에서는 대략적인 Java에서 Kotlin으로 넘어가는 문법과 왜 자바 개발자들이 코틀린으로 넘어가는 추세인지, 왜 코틀린이 이토록 매력적인 언어로 각광받는지에 대해서 알아볼 것이다.

 

코틀린의 주요 특성

1. 대상 플랫폼: 서버, 안드로이드 등 자바가 실행되는 모든 곳

코틀린은 자바 코드로 만들어진 언어이기 때문에 자바와 100% 호환이 가능하다. 제목에서 봤듯이 자바로 작성해서 자바파일이 실행되는 모든 곳에서 코틀린도 실행이 가능하다. 그 중 코틀린을 효과적으로 활용할 수 있는 일반적인 플랫폼은 다음과 같다.

  • 서버상의 코드(특히 웹 애플리케이션의 백엔드)
  • 안트로이드 디바이스에서 실행되는 모바일 애플리케이션

이 두개 이외에도 다른 환경에서도 잘 작동하니 안심하길 바란다. 위 두개는 자바로 가장 많이 사용하는 플랫폼이어서 써본 것 뿐이다. 

 

코틀린은 2017년 부터 자바스크립트로도 컴파일할 수 있다고 한다. 따라서 코틀린 코드를 브라우저나 노드에서 실행할 수 있다고 하는데.. 자바스크립트는 건너뛰겠다.

 

2. 정적 타입 지정 언어

코틀린은 자바와 마찬가지로 정적 타입 지정 언어이다. 정적 타입 지정이라는 말은 모든 프로그램 구성 요소의 타입을 컴파일 시점에 알 수 있고, 프로그램 안에서 객체의 필드나 메서드를 사용할 때마다 컴파일러가 타입을 검증해준다는 것이다.

 

그렇다면 동적 타입 지정 언어와 무슨 차이가 있는가? 동적 타입 지정언어는 요즘 잘나가는 언어인 Python을 일반적으로 들 수 있는데, 타입과 관계없이 모든 값을 변수에 넣을 수 있고, 메서드나 필드 접근에 대한 검증이 실행 시점(런타임)에 일어난다는 것이다. 이에 따라 코드가 짧아지고 데이터 구조를 유연하게 가져갈 수 있지만, 이름을 잘못 입력하는 등의 실수도 컴파일 시 걸러내지 못하고 실행 시점에 오류가 발생한다는 단점이 있다.

 

그렇다면 코틀린이 동적 타입 언어라면 변수의 자료형을 다 해줘야 하냐고? 아니다. 코틀린은 모든 변수의 타입을 직접 명시할 필요가 없다. 대부분의 경우 코틀린 컴파일러가 문맥으로부터 변수 타입을 자동으로 유추한다. 이것을 타입 추론이라고 한다.

 

코틀린이 자바와 달리 매우 강력한 기능을 제공하는 것이 있는데, 모든 프로그래머가 이 기능을 보고 박수를 쳤을지도 모르겠다. 물론 나는 감탄을 연발했다. 바로 코틀린은 널이 될 수 있는 타입을 지원한다는 것이다. 즉, 컴파일 시점에 널 포인터 예외가 발생할 수 있는지 여부를 검사할 수 있어서 프로그램의 신뢰성을 높일 수 있다. 자바에서 코드를 작성하다보면 컴파일 시점에 널이 발생할 수 있는 값에 대해서 빨간줄이 뜨지 않는다. IDE를 사용하면서 경로를 주는게 끝이다. 우리는 맨날 자바로 된 코드를 작성하면서 널포인터 예외를 많이 경험해봤다. 이는 코틀린으로 넘어가는데 충분한 이유가 된다.

 

3. 함수형 프로그래밍과 객체지향 프로그래밍

코틀린은 함수형 프로그래밍과 객체지향 프로그래밍 둘 다 지원하는데, 함수형 프로그래밍의 핵심 개념은 다음과 같다.

  • 일급 시민인 함수: 함수를 일반 값처럼 다룰 수 있다. 즉, 함수를 변수에 저장할 수 있고, 함수를 인자로 다른 함수에 전달할 수 있으며, 함수에서 새로운 함수를 만들어서 반환할 수 있다.
  • 불변성: 함수형 프로그래밍에서는 일단 만들어지고 나면 내부 상태가 절대로 바뀌지 않는 불변 객체를 이용해 프로그램을 작성한다.
  • 부수 효과 없음: 함수형 프로그래밍에서는 입력이 같으면 항상 같은 출력을 내놓고 다른 객체의 상태를 변경하지 않으며, 함수 외부나 다른 바깥 환경과 상호작용하지 않는 순수 함수를 사용한다.

이런 함수형 프로그래밍의 특징을 모아서 잘 생각해보면 일단 첫번째로 간결하게 코드를 작성할 수 있다. 함수를 값처럼 사용하므로 더 강력한 추상화를 할 수 있고, 강력한 추상화를 사용해 코드 중복을 막을 수 있다.

 

함수형 프로그래밍의 두 번째 유익은 다중 스레드를 사용해도 안전하다는 점이다. 함수형 프로그래밍의 두 번째 특징인 불변성으로 인해서 다중 스레드 환경에서 같은 데이터를 여러 스레드가 변경할 수 없기 때문에 안전하다는 것이다.

 

마지막으로 테스트하기가 쉽다. 부수 효과가 있는 함수는 그 함수를 실행할 때 필요한 전체 환경을 구성하는 준비 코드가 따로 필요하지만, 순수 함수는 그런 준비코드 없이 독립적으로 테스트할 수 있다.

 

이정도면 코틀린을 배워보고 싶지 않은가? 그러나 코틀린을 배우기 전에 자신이 자바를 잘 모르거나 언어를 처음 배운다면 추천하지 않는다.  코틀린은 사람이 사용하기 편하게 만들어졌기 때문에 다른 유명한 언어들에 비해서 어렵다고 생각한다. 따라서 자바를 좀 하거나 다른 언어를 잘하는 사람이라면 한번 배워볼만 하지 않을까 싶다.

 

반응형