본문 바로가기

IT 정보

왜 코틀린을 선택해야 하는가? 코틀린을 사랑할 수 밖에 없는 이유!

 

* 이 포스팅은 《다재다능 코틀린 프로그래밍》에서 발췌한 내용으로 작성되었습니다. 

 

 

아, 코틀린이여! 코틀린은 러시아 상트페테르부르크 근처의 섬의 이름이지만, 이 책에서 이야기할 코틀린은 그 섬의 이름을 딴 프로그래밍 언어다. 코틀린을 사용하는 프로그래머들은 코틀린을 단순히 좋아한다고 표현하지 않는다. 코틀린을 사랑한다고 말한다. 프로그래머들은 왜 코틀린을 사랑할까? 우리는 이 질문에서 시작하려 한다. 먼저 코틀린 소프트웨어 개발 키트(SDK, Software Development Kit)를 설치할 것이다. 그리고 코드를 작성하고, 컴파일하고, 실행한 후 동작하는 과정을 확인해 볼 것이다.

 

많은 언어들(예를 들어 C++, C#, Erlang, Groovy, Java, JavaScript, Python, Ruby, Scala, Smalltalk)의 장점만을 뽑아서 블랜더에 넣고 갈아버린다고 상상해 보자. 그 결과물이 바로 코틀린이다. 코틀린의 장점은 다양성이다.

 

젯브레인(JetBrains, https://www.jetbrains.com)의의 안드레이 브레슬라프(Andrey Breslav, https://www.twitter.com/abreslav)는 기존의 주류 언어들보다 간결한 문법의 언어, 매끄럽고, 풍부하고, 실용적이고 사용하기 쉬운 언어를 만들기 위해서 개발팀을 구성했다. 개발자들은 코틀린을 사용하며 곧 기존에 사용하던 언어들과 비슷한 장점을 지녔다는 걸 깨닫고 동시에 이전까지 접하지 못한 대단한 능력에 흥미를 느끼게 된다. 코틀린은 기존에 사용하던 언어들이 지닌 익숙한 개념을 통해 처음 접한 개발자들이 마치 집에 있는 듯한 편안함을 느끼도록 해준다. 또한 코틀린이 보여주는 새로운 개념은 이전에 사용하던 언어보다 더 생산성을 높이도록 만들어준다. 이런 점들이 프로그래머들이 코틀린에 열정을 가지는 이유이다.

 

코틀린이 가장 크게 관심을 끌었을 때는 구글이 코틀린을 안드로이드 개발 공식 언어로 지정한 직후이다. 구글이 코틀린을 인정했다는 사실 자체도 정말 중요하지만 코틀린을 좋아할 중요한 이유는 더 많다. 코틀린은 백엔드, 프론트엔드, 모바일/안드로이드에서 모두 사용 가능한 몇 안 되는 언어 중에 하나다. 적절하게 쓰인 코드는 Java 바이트코드로 컴파일될 수도 있고 자바스크립트로 트랜스파일(어떤 언어에서 다른 언어로 변환되는 종류의 컴파일)될 수도 있다. 코틀린/네이티브(Kotlin/Native)는 iOS, macOS, Linux, Windows, 웹어셈블리 같은 여러 플랫폼에서 동작한다. 이런 특징들이 코틀린을 풀스택 개발이 필요할 때 사용할 수 있는 몇 안 되는 언어 중 하나로 만들어준다.

 

  • 코틀린을 사랑할 수 밖에 없는 이유

한번 코틀린을 시작하고 나면, 코틀린이 잡다하게 뒤섞인 칵테일보다는 제각각의 기능을 다하는 스위스 군용 칼에 가깝게 느껴질 것이다. 코틀린을 이용하면 아주 많은 일을 아주 적은 코드로 할 수 있다. 코틀린은 다양한 패러다임을 지원한다. 코틀린은 아주 강력한 타입추론 능력을 갖춘 정적 타입 언어다. Java 바이트코드로 컴파일될 수도 있고 자바스크립트로 트랜스파일될 수도 있다. 코틀린 네이티브를 이용하면 네이티브 바이너리도 될 수 있다. 코틀린은 아주 풍부하고 우아하고 함께 일하기에 매력적인 언어이다. 코틀린을 도입해야 하는 더 많은 이유를 알아보자.

 

 

1) 다양한 프로그래밍 패러다임

 

코틀린은 다양한 선택지를 주고 해결하려는 문제에 가장 적합한 해법을 선택할 수 있도록 한다. 아주 어른답게 문제를 처리할 수 있는 것이다. 코틀린에는 몇 가지 양식이 있다. 클래스에서 모든 것을 작성할 필요도 없고 모든 코드를 컴파일할 필요도 없다. 코틀린은 독선적이지 않다. 다양한 프로그래밍 패러다임을 제공하기 때문에 그것 중에 하나를 선택하거나 섞어서 사용하면 된다. 코틀린의 장점은 아이디어를 빠르게 프로토타이핑할 수 있다는 점과 어떤 디자인 패턴을 적용하면 좋을지 금방 확인해 볼 수 있고 다른 언어들이 강요하는 양식은 필요 없다는 점이다. 이런 장점은 당신의 아이디어를 데 모로 만드는 데 걸리는 시간을 최소화한다.

 

 

코틀린에서도 Java처럼 클래스를 만들 수도 있고 객체지향으로 코드를 만들 수도 있다. 하지만 코틀린에서는 보일러플레이트 코드(Boilerplate Code)*가 필요 없다. 코틀린은 더 적은 코드로 Java와 같은 결과물을 만들 수 있다. 코틀린은 클래스의 계층을 어쩌다 보니 만드는 게 아니고 계획적으로 만들도록 가이드 해준다. 클래스는 파이널(final)을 기본값으로 갖고 있다. 만약에 클래스를 베이스클래스로서 사용하고 싶다면 해당 클래스에 명시적으로 표시해야만 한다. 델리게이션은 언어 수준의 문법을 가지고 있으므로 상속과 델리게이션(delegation, 위임) 사이에서 신중한 선택을 거쳐 사용할 수 있다.

 

 

2) 타입추론으로 사용하는 정적 타입

 

정적 타입 언어는 컴파일 시간에서 타입 안정성을 제공한다. 그러나 코틀린은 다른 정적 타입 언어들보다 몇 발자국 더 나아가서 오류를 방지한다. 예를 들면 코틀린 타입시스템은 널 불가(non-nullable) 타입과 널 가능(nullable) 타입을 구분한다. 그리고 Scala, F#, Haskell처럼 아주 강력한 타입추론을 할 수 있다. 더 이상 타입을 입력하느라 시간을 쓸 필요가 없다. 동시에 타입이 100% 명확하지 않은 경우 코틀린은 개발자에게 타입을 명시할 것을 요청한다. 타입추론을 올바르게 하기 때문에 우리는 개발에만 집중할 수 있고, 코드는 타입 안정성을 갖추게 된다.

 

 

3) 풀스택 개발을 위한 하나의 언어

 

javac 컴파일러가 Java 소스 코드를 자바 가상 머신(JVM)에서 실행시키기 위해 바이트코드로 컴파일하는 것처럼, kotlinc-jvm은 코틀린 코드를 가상 머신에서 실행시키기 위해서 바이트코드로 컴파일한다. 코틀린은 서버사이드 코드, 안드로이드 애플리케이션 개발에도 사용이 가능하며 특정 버전의 가상머신을 위한 배포도 가능하다. 백엔드에서 스프링을 사용하고, 디바이스로 안드로이드나 iOS 네이티브 코드가 필요할 때 코틀린 하나로 코딩이 가능하다. 필요할 때 코틀린 코드와 Java코드를 섞어서 사용할 수도 있다. 더 이상 레거시 코드가 없을 것이다.

 

 

4) 자연스럽고 우아함

 

코틀린은 당신을 위해서 필드(field), 접근자 메소드(getter, setter), Java Bean 컨벤션에서 제시하는 필수적인 요소들을 통합했다. 더 적은 노력으로 더 좋은 결과를 얻을 수 있다.


코틀린은 몇 가지를 선택사항으로 만들었다. 예를 들면, 세미콜론(;)이 선택사항이다. 세미콜론을 강제하지 않는 것이 보기 좋은 구문을 만들고 내부 DSL을 더 읽기 좋게 만들어준다. 그리고 코틀린은 infix 어노테이션을 제공한다. infix 어노테이션은 온점(.)과 중괄호({})를 선택사항으로 만들어둔다. 이러한 능력으로 우리는 다음과 같은 자연스럽고 우아한 코드를 만들 수 있다.

 

 

 

  • 왜 코틀린을 선택해야 하는가?

현재 혹은 차후 프로젝트 진행에 있어 코틀린을 선택해야 할 이유는 많이 있다.


▶ 코틀린은 “더 적은 것이 낫다(less is more)”라는 철학으로 보일러플레이트 코드를 덜 쓰도록 해준다. 코드를 적게 쓸수록 팀이 관리해야 할 코드는 줄어들고 결과물에서 처리해야 할 오류가 적어진다.


▶ 코틀린은 명령형 프로그래밍과 함수형 프로그래밍을 섞어서 쓸 수 있게 해준다. 현재 직면한 문제에 가장 적합한 방법을 적용할 수 있고, 한 가지 방식으로 코딩을 한 후 나중에 원하는 방식으로 리팩토링할 수 있다. 우선 동작하게 만들고, 나중에 빠르게 개선할 수 있다.


▶ 코틀린은 다른 정적 타입 언어들과 비교했을 때 훨씬 많은 컴파일 시간 안정성(compile-time safety)을 제공한다. 당신이 작성한 코드는 오류가 더 적게 발생하고, 그것이 빠른 시점에 발생해 실행 시간이 아닌 컴파일 시간에 오류를 찾아낼 수 있다. Spring 팀에서 코틀린을 지원하기로 한 이유도 이 때문이다(https://spring.io/blog/2017/01/04/introducing-kotlin-support-in-spring-framework-5-0).

 

▶ 코틀린의 코루틴은 다른 JDK에서 사용 가능한 언어들에 비해서 비동기 프로그래밍을 쉽게 만들 뿐만 아니라 높은 성능을 제공해 준다.


▶ Java에서 추후 제공하기로 한 기능들 중 일부는 이미 코틀린에서 가능하다. 코틀린을 사용하면 Java에서 미래에 사용 가능한 기능들을 미리 경험하고 사용할 수 있다.


▶ 프로젝트에서 코틀린 코드와 Java 코드를 함께 사용할 수 있다. 프로젝트에 코틀린을 도입할땐 점진적으로 도입할 수 있다.


▶ 코틀린을 사용하면 풍부한 DSL을 사용할 수 있다. 예를 들자면 Spring Kotlin API처럼 API를 이용 가능하게 해주는 DSL이 있다. 그뿐만 아니라 당신의 코드를 사용하게 될 프로그래머를 위해서 풍부하고 다양한 API를 직접 디자인하고 만들 수 있다.


▶ 코틀린을 사용하면 시스템에서 중복을 줄일 수 있다. 예를 들면 유저의 입력값에 대한 유효성 검사가 동일하다면 백엔드에서 Java로 컴파일되고, 프론트엔드에서는 JavaScript로 트랜스파일되고 안드로이드나 iOS, 브라우저에서 돌아가는 웹 어셈블리 같은 플랫폼을 위해선 해당 바이너리로 컴파일될 수 있다.


▶ 마지막으로, 코틀린은 안드로이드 공식 언어이기 때문에 안드로이드 개발에 가장 좋은 선택이다. 코틀린은 안드로이드 공식 언어이다.



《다재다능 코틀린 프로그래밍》

 

예스24 / 교보문고 / 알라딘 / 인터파크

반응형