본문 바로가기

Kotlin18

[Kotlin] 인라인(Inline) 함수란? 💡 해당 포스팅은 High-Order Function 에 대한 이해를 필요로 합니다. 코틀린에서는 고차함수를 사용할 수 있다. 함수(람다)를 함수의 호출 인자로 전달하거나, 반환값으로 활용할 수도 있다. 그런데 이렇게 람다를 사용하게 되면, 부가적인 메모리 할당으로 인해 메모리 효율이 안 좋아지고, 함수 호출로 인한 런타임 오버헤드가 발생하게 된다. 잘 와닿지 않는가? 한 번 아래 예시를 통해 왜 부가적으로 메모리가 할당되고 런타임 오버헤드가 발생하는지에 대해 알아보자. Lambda 를 사용하는 경우아래 코드에서는 파라미터로 정수형 데이터와 람다식을 받는 someMethod() 가 있고, 내부적으로 람다를 호출한 뒤 전달받은 정수를 2배 늘려 반환하는 형태의 동작을 하게 된다.fun someMethod.. 2025. 4. 2.
[Kotlin] 코틀린의 data class는 왜 상속이 불가능할까? Kotlin의 data class는 왜 상속이 불가능할까?Kotlin에서 data class는 open으로 선언할 수 없으며, 항상 final로 유지됩니다.즉, 다른 클래스에서 data class를 상속받는 것은 불가능합니다.그 이유는 Kotlin의 설계 철학과 data class의 본질적인 목적에 기반하고 있습니다.  Data Class는 자동으로 equals()를 생성한다 실제로 data class는 equals(), hashCode(), toString(), copy() 같은 메서드를 자동으로 생성합니다. 이 메서드들은 해당 클래스의 모든 프로퍼티를 기준으로 동작하죠.  하지만, 만약 data class가 상속이 가능하다면, 부모 클래스에서 구현된 equals()와 자식클래스에서 구현된 equals.. 2025. 3. 29.
[Kotlin] Nested Class와 Inner Class 자바와 코틀린의 서로 다른 Inner Classes와 Nested Classes 자바든 코틀린이든 중첩 클래스를 활용하는 경우는 매우 흔하게 발생한다.내가 가진 멤버 클래스를 정의할 때 주로 사용하는데 정의하는 방법은 2가지가 있고, Java와 Kotlin은 전혀 반대로 정의한다.Java는 명시하지 않으면 inner classes를 나타내고, Kotlin은 명시하지 않으면 Nested classes로 정의한다. Java의 Nested & Inner classes 자바는 중첩 class를 정의하면 기본 Inner classes로 정의한다. 그래서 아래와 같이 Outer class를 정의하고 안에 InnerClass를 정의했을 때 outer라는 String값에 자유자재로 접근이 가능하다.  이 코드에 Nes.. 2025. 2. 27.
[Kotlin] 코틀린(Kotlin)에서 동시성 문제를 해결하는 방법 멀티 스레드 처리는 애플리케이션의 퍼포먼스에 큰 이점을 주지만 경쟁 상태(race condition)를 적절히 조절해 주지 않는다면 데이터의 손실을 야기할 수 있습니다.- 경쟁 상태란 여러 개의 스레드가 하나의 공유/변경 가능한 자원에 접근하는 것을 말합니다.  대표적으로 코루틴에서, Dispatchers.Default 등의 멀티 스레드 dispatcher를 사용하면 여러 개의 코루틴을 동시에 실행할 수 있습니다. 이 과정에서 여러 동시성 문제가 발생할 수 있습니다. 따라서, 데이터 손실을 막기 위해서는 동기화(synchronization)를 통해 race condition을 제어하여 올바른 멀티 스레드 환경을 구축해야 합니다. 문제 정의아래 코드는 Synchronization(이하 동기화) 없이 동시에.. 2025. 2. 13.
[Kotlin] 불변성(Immutable)과 가변성(Mutable) 불변성(Immutability)과 가변성(Mutability)불변성이란 무엇일까?본질적으로 함수형 프로그래밍은 스레드 안전(thread-safe)입니다. 그리고 함수형 프로그래밍에서는 불변성을 중요하게 생각하며, 불변성은 스레드를 안전하게 만드는 데 큰 역할을 합니다. 사전적인 정의로 불변성은 무언가가 변할 수 없다는 것을 의미합니다. (상태를 변경하지 않는 것)따라서 불변 변수는 변경될 수 없는 변수를 말합니다. 주의해야할 점은 불변성을 클래스를 생성하고 모든 변수를 읽기 전용으로 만드는 것 정도로 생각하면 안 됩니다. Clojure, Haskell, F# 등과는 달리 코틀린은 불변성이 강제되는 순수 함수형 프로그래밍 언어가 아닙니다. 코틀린은 함수형 프로그래밍과 객체지향 프로그래밍(OOP) 언어의 조.. 2024. 11. 7.
[Kotlin] 확장(Extension) 함수 1. 요약🧑‍💻: Kotlin Extension을 아시나요?👨🏻‍🦱: 네. 상속이나 디자인 패턴 없이 클래스를 간단하게 확장할 수 있는 방법입니다.실제로 클래스 내부에 메서드나 프로퍼티가 생성되는 것은 아니며,정적 바인딩 된다는 특징이 있습니다. (정적바인딩 vs 동적바인딩)https://jtm0609.tistory.com/215 2. 확장(Extension)내가 만든 클래스에 새로운 기능을 추가하고 싶을 때 어떻게 해야 할까??클래스 안에 새로운 메서드를 구현하거나 아니면 상속을 받아서 사용하는 등 여러 방법이 있을 것입니다. 그렇다면 남이 만든 클래스에 새로운 기능을 추가하고 싶으면 어떻게 해야 할까요??예를 들어 외부 라이브러리의 경우 메서드를 추가하는 것은 매우 까다롭고 어렵습니다.또, .. 2024. 11. 6.