Kotlin

    Kotlin의 상속 변경자 : final, abstract, open

    목적 Kotlin의 상속 변경자가 어떻게 설계되었는지 이유와 의미를 이해한다. 개요 Java에서는 class는 기본적으로 상속이 가능했다. 상속을 불가능하게 만들기 위해서는 final 변경자를 붙여야 했다. 객체 지향적인 관점에서는 객체가 있고 해당 객체에 대한 코드를 줄이기 위해 재사용 가능하다면 재사용 하는 것이 좋지만, 이러한 사용 방식은 상속하는 기반 클래스가 변경이 없는 경우에만 유효하다. 기반 클래스가 변경이 잦은데 무분별하게 클래스를 상속하게 된다면, 취약한 기반 클래스(fragile base class) 문제에 직면하게 된다. 기반 클래스가 변경될 때마다 기반 클래스를 상속하는 모든 자식 클래스들은 변경되어야 하며, 어느 부분에 문제가 생길지 모른다. 이러한 문제를 해결하기 위해 코틀린에서..

    Kotlin data class를 이용하여 equals, hashCode, toString 자동으로 생성하기 + copy 메서드 이용하여 객체 복사하기

    목적 Data Class를 이해한다. 개요 Kotlin에서는 모든 클래스는 Any 클래스를 상속 받는다. Any 클래스에는 equals, hashCode, toString 가 정의되어 있고, 따라서 Kotlin의 클래스는 위 메서드들을 재정의하여 사용해야 한다. 만약 이 메서드들이 어떤 역할을 하는지 모른다면 먼저 아래 글을 보고 오도록 하자. Class에 정의되어야 하는 equals, hashCode, toString 살펴보기 목적 equals, hashCode, toString 에 대해 안다. 클래스에 정의되어야 하는 메서드 Java에서 클래스는 Object Class를 상속 받고, Object Class에 정의된 toString(), hashCode(), equals(other: Object) 메서..

    Kotlin Class에 정의되어야 하는 equals, hashCode, toString 살펴보기

    목적 equals, hashCode, toString 에 대해 안다. 클래스에 정의되어야 하는 메서드 Java에서 클래스는 Object Class를 상속 받고, Object Class에 정의된 toString(), hashCode(), equals(other: Object) 메서드를 재정의 할 수 있다. Kotlin에서도 Java와 마찬가지로 Any Class를 상속받으며 Any Class에 정의된 toString(), hashCode, equals를 재정의 할 수 있다. package kotlin public open class Any { public open operator fun equals(other: Any?): Boolean public open fun hashCode(): Int public..

    Kotlin에서 Array(배열)은 어떻게 동작하는가? Array의 동작방식과 시간 복잡도, 공간 복잡도 정리

    목표 배열의 특징을 안다 배열을 조작하는 방법을 안다. 배열(Array) 정의 배열(Array)이란 하나의 변수에 여러 값을 저장하기 위해 연속된 메모리 공간을 차지하는 정적(Static)인 자료구조이다. 개요 배열은 여러 값을 저장하기 위해 메모리의 연속적인 공간을 차지하고 있다. 연속적인 공간 다음의 공간이 비어있을지는 알 수가 없으므로, 안정성을 위해 배열(Array)의 크기는 생성할 때 정해지며 배열의 크기를 늘리거나 줄일 수 없다. 우리는 이를 정적(Static)이라고 부른다. 예를 들어 아래의 코드를 실행할 시, 메모리에 그림1과 같이 올라간다. val stringArray: Array = arrayOf("a", "b", "c") val intArray: Array = arrayOf(1, 2,..

    Kotlin ZonedDateTime Class 을 이용하여 시간대를 포함하는 날짜, 시간 다루기

    목표 ZonedDateTime이 날짜, 시간, 시간대로 이루어진 것을 이해한다. ZonedDateTime을 생성하고 조작하는 방법을 안다. 개요 앞서 LocalDate, LocalTime, LocalDate Class들에서 우리는 날짜(연, 월, 일)와 시간(시, 분, 초)을 다루는 방법을 살펴보았다. 하지만, 날짜(연, 월, 일)과 시간(시, 분, 초)만으로는 절대값을 갖는 시간이 완성되지 않는다. 그것은 바로 시간대 때문이다. UTC라 불리는 시간대로 인해 한국에서의 저녁 9시는 미국의 새벽 4시이다. 이러한 시간대가 있어야 비로소 절대값을 갖는 시간이 완성된다. ZonedDateTime Class는 바로 이러한 세가지 요소를 모두 포함하는 Class이다. ZoneDateTime은 그 자체로 절대값을..