Kotlin/Kotlin 자료구조

    [Kotlin] BooleanArray 사용 방법 한 번에 정리하기 : BooleanArray 사용해 메모리 효율적으로 사용하기

    BooleanArray란? Kotlin의 BooleanArray는 원시 타입(Primitive Type) Boolean으로 이루어진 배열을 나타낸다. Kotlin은 non-nullable한 Boolean을 JVM상에서 Java의 원시 타입인 boolean과 똑같이 저장한다. 이러한 non-nullable한 Boolean 값들의 집합을 원시 타입을 유지하면서 배열로 만든 것이 바로 BooleanArray이다. 이 BooleanArray는 언뜻 보면 Array과 비슷해 보이지만, Array클래스는 객체만을 이낮로 받으므로 Array 속에 들어가는 Boolean은 Primitive Type이 아닌 한번 클래스로 감싸진 Boxed Type의 Boolean이다. 즉, 원시타입 BooleanArray는 Array에..

    Kotlin과 Java의 Primitive Type 다루는 방법 차이 알아보기

    Java의 Primitive Type, Boxed Type과 한계 Java에서는 Primitive Type(원시 타입)과 Boxed Type(박스형 타입)의 변수를 구분해 코드를 작성하였다. Boxed Type은 Class로 원시 타입을 감싸는 형태로 만들어졌다. Java Primitive Type Java Boxed Type byte Byte short Short int Integer long Long float Float double Double char Character boolean Boolean 이는 초기에 매우 효과적이었는데, 원시 타입을 사용할 수 있는 곳에 원시 타입을 사용해 코드를 만들면 메모리가 많이 절약될 수 있었기 때문이다. 하지만 이는 시간이 지날수록 비효율적이어진다. 같은 목적을..

    [List 자료구조] 2. ArrayList

    목표 ArrayList의 특징을 이해한다. 접근, 검색, 추가, 삭제를 위한 시간 복잡도가 어떻게 도출되는지 이해한다. ArrayList ArrayList는 내부가 배열(Array)형태로 된 List이다. ArrayList는 List인데 연속된 메모리 공간을 차지하는 Array의 형태를 가지고 있다. 따라서 특정원소에 Index를 이용해 접근이 가능하다. ArrayList는 List의 성질인 가변성을 위해서 ArrayList는 과 같이 처음부터 일정량의 메모리 공간을 잡고 들어간다. 만약 같이 List에 인스턴스가 더해져 메모리 공간이 모두 찬다면 다시 해당 메모리 공간보다 더 큰 메모리 공간을 잡아 기존 객체를 복사한 다음 연산을 이어간다. 예를 들면 하나의 메모리 공간만 필요한데 향후 값이 추가될 것..

    [List 자료구조] 1. 코틀린의 리스트(List) 자료구조

    목표 리스트의 특징을 이해한다. 코틀린에서 리스트가 구현된 방식을 안다. 리스트(List) 리스트(List)란 하나의 변수에 여러 값을 저장하기 위해 불연속적인 메모리 공간을 차지하는 동적(Dynamic)인 자료구조이다. 개요 리스트는 여러 값을 저장하기 위해 메모리의 불연속적인 공간을 차지하고 있다. 불연속적인 공간을 차지하고 있으므로, 다음 값을 넣기 위해서는 비어있는 메모리 공간 어느 곳에나 변수를 넣으면 된다. 해당 주소값을 리스트에 추가 함으로써 리스트에 값 인스턴스의 추가가 완료된다. Kotlin에서 사용하는 List는 두가지 관점에서 나눌 수 있다. 하나는 가변성이고 다른 하나는 자료구조이다. 가변성은 변화 가능(Mutable)한지 아니면, 불가능한지(Immutable)에 대한 성질이며, K..

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

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