PROGRAMMING LANGUAGE/KOTLIN

    [Kotlin] Collections의 Iterable과 Sequences 차이점

    들어가기 전에 Java에서는 stream()을 통해 collection 요소를 하나씩 참조하여 반복적인 작업을 할 수 있습니다. Kotlin에는 Collections 자체에 filter(), map() 등의 API를 제공하고 있어 stream() 없이도 collection 요소에 하나씩 참조가 가능합니다. 위 내용만 보면, Java에서 collection에 stream() 붙여서 사용하는 경우와 Kotlin에서 collection의 API를 호출하는 경우 동일하게 연산이 이루어질 것 같지만 서로 상이하게 연산을 진행합니다. Java의 stream: Lazy Evaluation Kotlin의 collection 기본 연산(iterable): Eager Evaluation 이번 포스팅에서는 Kotlin의 c..

    [Kotlin]enum class와 data class

    enum class enum 클래스는 미리 정의된 상수들로 이루어진 제한된 집합을 표현하는 클래스입니다. enum 클래스를 사용하면 정해진 상수들로 이뤄진 집합을 타입 안전(type-safe)하게 다룰 수 있습니다. 가장 단순한 형태는 아래와 같습니다. 빠뜨린 부분이 없는 when 식 enum 역시, 다른 타입과 유사하게 when을 사용해 변수 각각의 값을 비교할 수 있습니다. enum 사용 시 when 식에서 enum의 값이 될 수 있는 모든 enum 상수를 다룬다면, 따로 else를 작성하지 않아도 됩니다. 코틀린은 내부적으로 빠뜨린 부분이 없는 when 식에는 NoWhenBranchMatchedException 타입의 예외를 던지는 else가 암시적으로 추가됩니다. 빠뜨린 부분이 없는 when 식의..

    [Kotlin] 객체

    코틀린 객체 코틀린의 객체 선언은 클래스와 상수를 합한 것으로 객체 선언을 통해 싱글톤(singleton: 인스턴스가 단 하나 존재하는 클래스)을 만들 수 있습니다. 객체 선언 코틀린의 객체 선언은 class 대신 object를 사용합니다. 객체 선언은 클래스를 정의하는 동시에 인스턴스를 정의한다고 보면 됩니다. 객체 정의는 Thread-Safe하기 때문에 컴파일러는 실행되는 여러 스레드에 대해 하나의 인스턴스만 공유되고 초기화 코드 역시 한 번만 실행되도록 보장합니다. 초기화 작업은 싱글톤 클래스가 실제 로딩되는 시점까지 지연되며, 보통 프로그램이 해당 객체 인스턴스에 처음 접근할 때 초기화됩니다. 자바에서는 비공개 생성자와 정적(static) 상태를 조합한 클래스 정의를 통해 싱글톤을 만들고, 아래 ..

    [Kotlin] 널 가능성

    널이 될 수 있는 타입 자바와 마찬가지로 코틀린의 참조 값에는 아무것도 참조하지 않을 경우를 나타내는 null이라는 값이 존재합니다. 코틀린 타입 시스템에는 널 값이 될 수 있는 참조 타입과 널 값이 될 수 없는 참조 타입을 구분할 수 있어 컴파일 시점에 NullPointerException(NPE) 가능성을 상당 부분 줄여줍니다. 코틀린에서는 기본적으로 모든 참조 타입은 널이 될 수 없는 타입입니다. 따라서, String 같은 타입에 null을 대입할 수 없습니다. 코틀린에서는 널이 될 수 있는 값을 받는 함수를 작성하려면 아래와 같이 파라미터 타입 뒤에 물음표(?)를 붙여 널이 될 수 있음을 명시해주어야 합니다. fun isBooleanString(s: String?) = s == "false" ||..

    [Kotlin] 클래스 기초

    클래스 정의하기 JAVA와 마찬가지로 Kotlin에서는 클래스 정의를 통해 커스텀으로 정의된 연산들이 포함된 새로운 타입을 만들어줍니다. 기본적으로 클래스 선언은 참조 타입(referential type)을 정의합니다. Kotlin 1.3에 도입된 인라인 클래스(inline class)를 통해 참조 타입이 아닌 타입 역시 정의가 가능합니다. 클래스 내부 구조 자바와 마찬가지로, 코틀린 클래스도 class 키워드 다음에 클래스 이름이 오고 그 다음에 클래스 본문이 오는 형태입니다. 코틀린 클래스는 기본적으로 공개(public) 가시성입니다. 최상위 함수와 마찬가지로 최상위 클래스를 internal이나 private으로 설정할 수 있습니다. 코틀린 클래스 명은 자바와 달리, 소스 파일명과 동일하게 작성하지 ..

    [Kotlin] 코틀린 함수

    코틀린 함수 자바 메소드처럼 코틀린 함수도 어떤 입력(parameter)을 받아 자신을 호출한 코드쪽에 출력값을 반환(return)할 수 있는 재사용 가능한 코드 블록입니다. 자바와 달리 코틀린에서 도달할 수 없는 코드(unreachable code)는 오류가 아닙니다. 따라서, return문 다음에 코드가 위치하고 있으면 실질적으로 죽어있는 코드지만 에러가 발생하진 않습니다. → 컴파일러가 경고를 표시하고 IDE는 해당 부분을 강조해줍니다. fun increment(n: Int): Int { return n++ // Error: can't change immutable variable } 함수 반환 타입: 함수 본문 앞에 :을 붙여 작성합니다. 함수 파라미터: 파라미터 앞에는 val이나 var을 표시할..

    [Kotlin] 코틀린 언어 기초

    코틀린 기본 문법 주석 자바와 마찬가지로 코틀린은 세 가지 주석을 지원하며, 코드를 문서화할 때 사용합니다. 한 줄 짜리 주석: //로 시작하고 줄이 끝나면 주석도 끝난다. 여러 줄 주석: /*로 시작하고 */로 끝난다. KDoc 여러 줄 주석: /**로 시작하고 */로 끝난다. Javadoc과 비슷한 리치 텍스트 문서를 생성하기 위해 사용 자바와 달리 코틀린에서는 여러 줄 주석으로 여러번 내포시킬 수 있다. 불변(Immutable) 변수 코틀린에서 변수를 정의하는 가장 간단한 형태는 다음과 같습니다. val num = 15 val 키워드: 값을 뜻하는 value에서 유래 변수 식별자: 새 변수에 이름을 부여 변수의 초깃값: = 기호 뒤에 옴 val 변수는 불변 변수로 한 번 초기화하면 다시는 값을 대입..

    [Kotlin] 코틀린이란?

    코틀린 코틀린은 안전성, 간결성, 상호 운용성을 강조하는 다중 패러다임, 다중 플랫폼 프로그래밍 언어입니다. 안전성 프로그래밍 언어가 안전하려면 프로그래머의 오류를 방지할 수 있어야 합니다. 실전에서 오류를 방지하려면 대가가 필요하기 때문에 안전성을 고려해 언어를 설계하는 것은 트레이드오프의 문제입니다. 코틀린의 설계 목표 중 하나는 자바보다 더 안전성을 보장하는 언어를 설계하되, (자바보다는) 개발자의 생산성을 덜 해치는 언어를 만드는 것입니다. 타입 추론(type inference): 개발자가 명시적으로 타입을 지정하지 않아도 됨(자바10에서도 지역변수에 대한 타입 추론 도입) 널이 될 수 있는 타입(nullable type): null 사용 제한하여 NPE 예외를 좀 더 쉽게 방지 스마트 캐스트(s..