티스토리 뷰

JVM/Kotlin

[Kotlin] Kotlin의 특징

글을 쓰는 개발자 2022. 6. 6. 08:46
반응형

정적 타입 지정 언어

코틀린은 자바와 마찬가지로 정적 타입 지정 언어다. 추가적으로 코틀린은 변수의 타입을 자동으로 알아내는 경우가 있는데 이를 타입추론 이라고 한다.

정적 타입 지정의 장점

  • 성능: 실행 시점에 어떤 메서드를 호출할 지 알아내는 과정이 필요 없으므로 메서드 호출이 더 빠르다.
  • 신뢰성: 컴파일러가 프로그램의 정확성을 검증하기 때문에 실행 시 프로그램이 오류로 중단될 가능성이 더 적어진다.
  • 유지 보수성: 코드에서 다루는 객체가 어떤 타입에 속하는지 알 수 있기 때문에 처음 보는 코드를 다룰 때도 더 쉽다.
  • 도구 지원: 정적 타입 지정을 활용하면 더 안전하게 리팩토링 할 수 있고, 도구는 더 정확한 코드 완성 기능을 제공할 수 있으며, IDE의 다른 지원 기능도 더 잘 만들 수 있다.

Python도 하는 필자로서 어느 정도 공감되는 특성이다.

성능 부분에서 어떤 메서드를 호출할 지 알아내는 과정이 필요 없다는 것은 다른 한편으로 귀찮음으로 올 수가 있다.
Python과 같은 언어들은 duck typing이라고도 하는 데 자바같은 언어에서는 메서드에 대한 규약을 정하고 이를 구현하는 방식으로 인터페이스를 사용하여 해당 메서드에 대해서 정의를 내리지만, Python에서는 그럴 필요 없이 메서드명만 같으면 되기 때문에 인터페이스를 구현할 필요는 없다.

하지만 둘 다 사용하면서 느낀점을 말하자면, 인터페이스로 정의를 내리고 이를 구현하는 것이 더 깔끔하다고 느껴진다. 덕 타이핑은 따로 인터페이스를 구현하지 않아도 되는 장점이 있지만 애플리케이션의 규모가 커지고, 다양한 메서드가 존재하게 되면 이를 확인하는 데 많은 어려움이 생기기 때문에 필자의 경우에는 파이썬을 사용하더라도 ABC 클래스를 활용하여 사용하는 편이다.

함수 프로그래밍

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

장점

  • 간결성
  • multi thread를 사용해도 safe하다는 사실
  • test하는데 있어서 쉬움

코틀린에서 함수 프로그래밍이란

  • 함수 타입을 지원함에 따라 어떤 함수가 다른 함수를 파라미터로 받거나 함수가 새로운 함수를 반환할 수 있다.
  • 람다 식을 지원함에 따라 번거러운 준비 코드를 작성하지 않아도 코드 블록을 쉽게 정의하고 여기저기 전달할 수 있다.
  • 데이터 클래스는 불변적인 값 객체를 간편하게 만들 수 있는 구문을 제공한다.
  • 코틀린 표준 라이브러리는 객체와 컬렉션을 함수형 스타일로 다룰 수 있는 API를 제공한다.

코틀린의 철학

실용성

코틀린은 다른 프로그래밍 언어가 채택한 이미 성공적으로 검증된 해법과 기능에 의존
어느 특정 프로그래밍 스타일이나 패러다임을 사용할 것을 강제로 요구하지 않는다.

간결성

다들 개발하시다 보면 이해하시겠지만 코드를 작성하는 시간보다 기존 작성된 코드를 읽는 시간이 더 걸린다는 것은 잘 알려져 있다.
실제로 프로젝트를 진행하면서 하나의 파일에서 3000줄 이상의 코드에서 버그를 찾으라고 하면 벌써 머리부터 어지럽다.
버그를 고칠려면 수정해야만 하는 부분이 어딘지 먼저 알아내야 한다. 그래야 버그를 수정할 수 있다.

코드 작성하는 양이 절대적으로 많게 되면 읽는 시간은 그에 대하여 비례한다.
즉, 코드가 더 간단하고 간결하수록 내용이 파악하기가 쉬워진다.
코틀린은 이를 잘 반영되어 있다.

안전성

코틀린 하면 바로 생각나는 것은 Null 타입 체크가 된다는 것이다.
기본적으로

val s1: String? = null <null 이 될 수 있음>
val s2: String = ""<null이 될 수 없음>

와 같이 표현이 된다. 해당 특성을 통해 NullPointException으로 인해 갑자기 중단되는 경우를 많이 줄여준다.

두번째 특징으로 ClassCastException을 방지해준다.
해당 에러는 기본적으로 어떤 객체를 다른 타입으로 캐스트 하기 전에 타입을 미리 검사하지 않으면 나는 에러다.
코틀린에서는 타입 검사와 캐스트가 한 연산자에 의해 이뤄진다.

if ( value is String)
    println(value.toUpperCase())
반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함