KOTLIN을 소개합니다!

2020년 11월 12일 · 이수현

KOTLIN 소개합니다!


안녕하세요. 저는 Aims에서 안드로이드 어플리케이션 개발을 하고 있는 이수현 연구원 입니다. 2020년 1월 말에 입사하여 JAVA를 시작으로 김병규 책임 연구원 님의 추천(?)하에 현재는 KOTLIN이라는 언어로 앱 개발을 하고있습니다, 그리하여 이번 시간에는 구글에서 안드로이드 공식 언어로 채택한 KOTLIN에 대하여 간략하게 공유하고 KOTLIN으로 프로젝트를 진행하며 느낀점을 말씀드리고 포스팅을 마치려 합니다.

KOTLIN 이란 무엇인가?

  1. KOTLIN은 IntelliJ IDEA라는 통합 개발 환경으로 유명한 젯브레인즈(JetBrains)에서 개발한 언어입니다.
  2. JVM(Java Virtual Machine) 기반으로서 자바 어플리케이션이나 안드로이드 어플리케이션을 만들 수 있습니다.
  3. 자바와 마찬가지로 정적 타입 지정 언어 입니다. 정적 타입 지정이라는 말은 모든 프로그램 구성 요소의 타입을 컴파일 시점에 알 수 있고 프로그램 안에서 객체의 필드나 메소드를 사용할 때마다 컴파일러가 타입을 검증해준다는 뜻 입니다.

KOTLIN 의 철학?

  1. 실용성
    • 연구를 위한 언어가 아니고 실무에서 겪은 문제들에 대한 피드백을 반영한 언어입니다.
    • 편리한 개발환경도 생산성 향상에 필수적이기 때문에 언어뿐만 아니라 IDE의 지원이 중요한 역할을 합니다.
  2. 간결성
    • 개발자는 코드를 작성하는 시간보다 코드를 읽는 시간이 더 길기 때문에 간단하고 간결한 코드는 내용을 파악하기 용이해 집니다.
    • Getter, Setter, 생성자 파라미터 등 의미없이 번거로운 일들을 최소한으로 줄이고자 합니다.
  3. 안정성
    • 앞서 말한 JVM에서 실행되는 정적 타입 지정 언어로서 KOTLIN은 어플리케이션의 타입 안전성을 보장합니다.
    • NPE(NullPointerException)을 없애기 위해 노력합니다 (Optional을 사용하여 Nullable과 NonNull 구분 가능)
  4. 상호운용성
    • KOTLIN의 클래스나 메소드를 일반적인 자바 클래스나 메소드와 똑같이 사용할 수 있습니다. 이에 따라 자바와 코틀린 코드를 프로젝트에서 원하는대로 섞어 쓸 수 있는 궁극적인 유연성을 발휘할 수 있습니다.
    • 자체 컬렉션 라이브러리를 제공하지 않고 자바 표준 라이브러리 클래스에 의존합니다.

KOTLIN 빌드 과정?

enter image description here

(자바와 컴파일 과정이 비슷하지만 다른 컴파일러(KotlinC)를 사용하며 실행 시점에 Runtime 라이브러리를 통해 앱이 실행 됩니다.)

KOTLIN 프로젝트를 진행하며 느낀점?

우선 처음 코틀린으로 개발을 진행 할 때는 정말 맨땅에 헤딩하는 느낌이었습니다. 하지만 계속 헤딩을 하다보니 이제 저에게 있어서는 자바보다 코틀린이 더 편한 언어가 된 것 같습니다. 다음은 제가 짧게 나마 코틀린으로 개발을 진행하면서 자바보다 편했던 점을 말씀드려볼까 합니다.

  1. 세미콜론(;)이 없습니다.

    => 별 거 아닌것 같지만 생각보다 편하다고 느꼈습니다.

  2. ?(Optional)을 사용하여 Nullable과 NonNull을 구분 할 수 있습니다.

    => 더이상 Null 체크를 위해 if문을 사용하지 않고 변수명 뒤에 ?(Optional)을 사용하여 Null체크를 간단하게 할 수 있어서 참 편리하다고 느꼈습니다.

  3. apply block을 이용하여 초기화 작업을 할 수 있습니다.

    => apply block안에서는 초기화된 객체 자신을 this로 사용하기 때문에 어떤 작업을 수행하는지 확인하기 좋았습니다.

  4. get(), set() 함수 필요없이 class를 data class로 만들어 DTO로 사용할 수 있습니다.

    => 개인적으로 제일 편한 부분인 것 같습니다.

  5. View에 접근하기 위해 사용했던 findViewById를 하지 않고도 Activity에서 View를 ID로 직접 호출 할 수 있습니다.

    => 편하다고 막쓰다가 다른 View의 ID와 혼동하여 실행 중 터진적이 있지만 코드가 많이 깔끔해 진 것 같습니다.

  6. static이 없습니다.(키워드 조차 없다)

    => companion object를 사용하면 어느 액티비티, 클래스, 프래그먼트 등 별도의 생성자 없이 직접 접근이 가능하여 편리하다고 느꼈습니다.

  7. 변수이름:타입 형태로 선언하고, 문자열 내에서 $을 통해 변수 참조가 가능합니다.

    => “”를 남발하지 않아도 되서 로그 확인할 때 유용하다고 느꼈습니다.

  8. Lambda를 사용하여 리스너 사용시 쓰이지 않는 인자를 생략할 수 있습니다

    => 덕분에 코드 가독성이 많이 좋아졌다고 느꼈습니다.


이상으로 포스팅을 마치려고 합니다. 다음 포스팅에는 AAC를 사용하여 MVVM Architecture를 적용한 어플 개발후기에 대해 작성해보겠습니다.

다음 작성자는 백엔드 개발자이신 조창후 선임 연구원입니다.