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의 타입 시스템과 Java의 타입 시스템의 차이 알아보기 : null을 중심으로 차이를 알아보자 : Kotlin null safety

    목표 Java의 타입 시스템에 대해 이해한다. Kotlin의 타입 시스템에 대해 이해한다. Java의 타입 시스템 Java에서는 데이터의 타입이 원시 타입과 Object Class를 상속하는 타입 두가지로 나뉜다. 원시 타입(Primitive Type) 값 그 자체가 Stack 메모리에 저장되어 접근속도가 빠르다. null을 담을 수 없다. Object Class를 상속하는 타입 Stack에는 참조값을 저장하고 실제 데이터는 Heap 메모리에 저장된다. Primitive type은 Object Class를 상속하지 않으며, 별도 타입으로 분류된다. 물론 Primitive Type의 박싱된 타입인 Boolean, Integer 등은 Object Class를 상속받는다. Primitive type 외의 모든..

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

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