본문 바로가기

Kotlin13

[Kotlin] 깊은 복사 (Deep Copy) 3가지 방법 🤔복사가 뭐가 중요한데?가끔 그럴때가 있다.분명 A 변수/인스턴스의 값을 변경했는데 B까지 바뀐 그런 슬픈 일..띠용해서 주솟값을 찍어보면 더 띠용한다.내가 직접 변경한 A와 변경된 B가 같은 주솟값을 가지고 있다.그것은 바로 얕은 복사와 깊은 복사를 구분하지 않았기 때..문..내 변수는 소중하니까.. 복사하는 방법에 대해 알아보자.. 😮얕은 복사(Shallow Copy) vs 깊은 복사(Deep Copy)얕은 복사는 말 그대로 얕게 복사하고 깊은 복사는 깊게 복사한다.얕은 복사(Shallow Copy)얕은 복사 : 객체를 복사할 때, 객체의 주솟값을 복사하는 방법class SampleClass(var id: Int) { ...}위와 같은 SampleClass가 존재할 때 얕은 복사는 다음과 같이 진.. 2024. 11. 2.
[Kotlin] Object 키워드 (with companion object) 이번 포스팅에서는 Kotlin에서 object 키워드가 무엇을 의미하고  class와 object는 어떤 차이가 있는지에 대해 알아보겠습니다.object 키워드의 의미와 사용코틀린에서 object 키워드는 클래스를 정의하는 동시에 객체를 생성하는 것이라고 볼 수 있습니다.Kotlin에는 Java에서 쓰이는 static 키워드가 존재하지 않기 때문에 object를 사용해 static의 개념을 표현합니다. object 키워드는 주로 다음과 같은 경우에 사용됩니다.1. 싱글톤(Singleton) 클래스 정의2. 동반객체(companion object) 생성3. 익명 클래스 생성 1. 싱글톤(Singleton) 클래스 정의싱글톤(Singleton)은 프로젝트에서 어떤 객체를 매번 생성하지 않고 하나의 객체만 생.. 2024. 11. 2.
[Kotlin] Data Class란? 자바와 다르게, 코틀린은 다양한 Class 를 제공해준다. 그 중 하나로 Data Class 라는 것이 있는데, 이는 자바 개발자들의 고충과 니즈를 정확히 파악한 기능을 갖고 있다. 정말 감동적이지 아니할 수 없다!이번 포스팅에선, Data Class (데이터 클래스) 가 우리에게 선사하는 감동을 느껴보자! Data Class (데이터 클래스) 개념일반 클래스와 달리, 다양한 메소드를 자동으로 생성해주는 클래스이다. 만약 자동으로 생성되는 메소드들이 별로 필요하지 않는 녀석들이었다면, 개발자들 사이에서 쓰이지도 않았을 터이다. 하지만 매우 폭발적인 편리함을 제공하는 유용한 메소드들이 자동 생성된다. Data Class 생성 시 같이 만들어지는 녀석들hashCode()copy()equals()toStrin.. 2024. 11. 2.
[Kotlin] Sealed Class란? Enum Class 이야기enum 은 C언어에도 존재할 만큼, 범용성이 뛰어난 녀석이다. 코틀린에도 당연하게 enum 클래스가 존재한다. 이를 활용해서 아래와 같은 동작을 구현할 수 있었다.enum class Color(val r: Int, val g: Int, val b: Int) { RED(255, 0, 0), ORANGE(255, 165, 0), YELLOW(255, 255, 0), GREEN(0, 255, 0), BLUE(0, 0, 255); fun rgb() = (r * 256 + g) * 256 + b}fun getColorName(color: Color) = when (color) { Color.RED -> "빨강" Color.ORANGE -> "주황" .. 2024. 11. 2.
[Kotlin] 늦은 초기화 (lateinit, by lazy) 늦은 초기화 기법늦은 초기화 라 함은, 말 그대로 객체 초기화를 늦게 하는 것이다.예를 들어 분명 변수 a를 사용할 예정인데, a의 첫 상태를 정의하기 어려울 때 어떻게 하겠는가?그럼 우린 이렇게 할 수 있다.var a: String? = null그치만 어차피 이후에 분명 사용할 녀석인데 굳이 위험하게 초기 상태로 null을 사용해야할까?null 사용의 지양을 강조하는 코틀린 창시자들은 분노할 것이 뻔하다..  왜 늦은 초기화를 쓰는가?Null 안정화코틀린은 기본적으로 null 값을 허용하지 않으므로, 해당 프로퍼티가 초기화된 이후에만 접근할 수 있도록 처리하는 것이 좋습니다. 늦은 초기화를 사용하면 nullable 프로퍼티를 사용할 필요가 없어지므로, 불필요한 null 처리를 줄일 수 있습니다.메모리 .. 2023. 8. 22.
[Kotlin] 필드(Field)와 프로퍼티(Property) 들어가기 전에보통 객체지향 프로그래밍에서 클래스를 정의할 때 객체의 상태는 멤버변수 (필드)로, 행위는 메소드로 표현한다.그리고 멤버변수가 있으면 객체의 값을 설정하고 가져오는 메소드( setter / getter)가 동반되는 경우가 많다.코틀린에서는 이런 요소를 아우르는 프로퍼티라는 개념이 제공된다.Property = Fileld + Getter + Setter 프로퍼티 정의프로퍼티를 정의하는 전체 문법은 아래와 같다.(var/val) [: ] [= ] [] []var / val : 프로퍼티 선언을 위한 예약어.var : 초기화 후 값 변경이 가능한 프로퍼티val: 초기화 후 값 변경이 불가능한 프로퍼티propertyName: 프로퍼티명PropertyType: 프로퍼티 .. 2023. 8. 22.