본문 바로가기

전체 글151

[Kotlin] 타입 별칭(Type Aliases) Kotlin의 타입 별칭(Type Aliases)Kotlin의 타입 별칭(Type Aliases)은 기존 타입에 대한 대체 이름을 제공하는 강력한 기능입니다.이 가이드에서는 타입 별칭의 다양한 측면을 상세히 살펴보겠습니다.    타입 별칭 기본 (Type Aliases Basics)타입 별칭은 긴 타입 이름을 더 짧고 의미 있는 이름으로 대체할 수 있게 해줍니다. 이는 코드의 가독성을 크게 향상시킬 수 있습니다.  컬렉션 타입 단축 (Shortening Collection Types)긴 제네릭 타입, 특히 컬렉션 타입을 단축하는 데 매우 유용합니다:typealias NodeSet = Settypealias FileTable = MutableMap>  이 예제에서 NodeSet은 Set의 별칭이 되며, F.. 2024. 8. 18.
[Kotlin] 위임된 프로퍼티(Delegated Properties) Kotlin의 위임된 프로퍼티(Delegated Properties)Kotlin의 위임된 프로퍼티(Delegated Properties)는 프로퍼티의 getter와 setter를 다른 객체에 위임할 수 있는 강력한 기능입니다.이 가이드에서는 위임된 프로퍼티의 다양한 측면을 상세히 살펴보겠습니다.   기본 개념 (Basic Concept)위임된 프로퍼티는 다음과 같은 문법으로 선언합니다:class Example { var p: String by Delegate()} 여기서 by 키워드 다음에 오는 표현식이 델리게이트입니다. 프로퍼티의 get()(그리고 set())은 델리게이트의 getValue()와 setValue() 메서드에 위임됩니다. import kotlin.reflect.KPropertycla.. 2024. 8. 17.
[Kotlin] 위임(Delegation) Kotlin의 위임(Delegation)Kotlin의 위임(Delegation) 기능은 구현 상속의 강력한 대안으로, 보일러플레이트 코드 없이 유연하고 재사용 가능한 코드를 작성할 수 있게 해줍니다. 이 가이드에서는 Kotlin의 위임 기능의 다양한 측면을 상세히 살펴보겠습니다.    위임 기본 (Delegation Basics)Kotlin에서는 by 키워드를 사용하여 인터페이스의 구현을 다른 객체에 위임할 수 있습니다. 이를 통해 컴포지션을 쉽게 구현할 수 있습니다.interface Base { fun print()}class BaseImpl(val x: Int) : Base { override fun print() { print(x) }}class Derived(b: Base) : Base.. 2024. 8. 17.
[Kotlin] 객체 표현식과 선언(object expressions and object declarations) Kotlin의 객체 표현식과 선언Kotlin에서 객체 표현식(object expressions)과 객체 선언(object declarations)은 클래스를 상속하거나 인터페이스를 구현하는 익명 객체를 생성하는 강력한 기능입니다. 이 가이드에서는 이러한 기능들의 다양한 측면을 상세히 살펴보겠습니다.    객체 표현식 (Object Expressions)객체 표현식은 익명 클래스의 객체를 생성합니다. 이는 명시적으로 클래스를 선언하지 않고 일회성 사용을 위한 객체를 생성할 때 유용합니다.기본 객체 생성 (Creating Basic Objects)가장 간단한 형태의 객체 표현식은 다음과 같습니다:val helloWorld = object { val hello = "Hello" val world =.. 2024. 8. 17.
[kotlin] 인라인 값 클래스(Inline Value Classes) Kotlin의 인라인 값 클래스(Inline Value Classes)Kotlin의 인라인 값 클래스(Inline Value Classes)는 성능 최적화와 타입 안전성을 동시에 제공하는 강력한 기능입니다.이 문서에서 인라인 값 클래스의 다양한 사용법을 살펴봅니다.  인라인 값 클래스 기본 (Inline Value Class Basics)인라인 값 클래스는 단일 값을 래핑하여 보다 도메인 특화된 타입을 만들 때 유용합니다. 이는 값 기반 클래스의 하위 집합으로, 아이덴티티가 없고 오직 값만을 보유합니다.value class Password(private val s: String)// JVM 백엔드를 위한 선언@JvmInlinevalue class Password(private val s: String)인.. 2024. 8. 15.
[Kotlin] 열거형 클래스(Enum class) Kotlin의 열거형 클래스Kotlin의 열거형 클래스(enum class)는 고정된 상수 집합을 표현하는 강력한 도구입니다.이 문서에서는 Kotlin 열거형 클래스의 다양한 사용법을 살펴보겠습니다.   기본 사용법 (Basic Usage)열거형 클래스의 가장 기본적인 사용 사례는 타입 안전 열거형의 구현입니다:enum class Direction { NORTH, SOUTH, WEST, EAST} 각 열거형 상수는 객체이며, 쉼표로 구분됩니다.열거형 클래스는 생성자와 프로퍼티를 가질 수 있습니다:enum class Color(val rgb: Int) { RED(0xFF0000), GREEN(0x00FF00), BLUE(0x0000FF)}  익명 클래스 (Anonymous Classe.. 2024. 8. 15.
[Kotlin] 중첩 클래스와 내부 클래스 Kotlin의 중첩 클래스와 내부 클래스Kotlin에서 클래스 내부에 다른 클래스를 정의하는 방법은 코드의 구조화와 캡슐화를 위한 강력한 도구입니다. 이 문서에서는 중첩 클래스와 내부 클래스의 개념과 사용법을 상세히 살펴보겠습니다.  중첩 클래스 (Nested Classes)Kotlin에서는 클래스 안에 다른 클래스를 중첩하여 정의할 수 있습니다:class Outer { private val bar: Int = 1 class Nested { fun foo() = 2 }}val demo = Outer.Nested().foo() // == 2  이 예제에서 Nested 클래스는 Outer 클래스 내부에 정의되어 있지만, Outer 클래스의 인스턴스에 대한 참조를 가지지 않습니다... 2024. 8. 15.
[kotlin] 제네릭: in, out, where Kotlin의 제네릭: in, out, whereKotlin의 제네릭은 타입 안전성과 코드 재사용성을 높이는 강력한 기능입니다.이 가이드에서는 Kotlin 제네릭의 다양한 측면을 상세히 살펴보겠습니다.     제네릭 기본 (Generics Basics)Kotlin의 클래스는 Java와 마찬가지로 타입 파라미터를 가질 수 있습니다:class Box(t: T) { var value = t}val box: Box = Box(1)// 또는 타입 추론을 사용하여val box = Box(1) // Box로 추론됨 변성 (Variance)Kotlin은 선언 지점 변성(declaration-site variance)과 타입 프로젝션(type projections)을 제공합니다. 선언 지점 변성 (Declarati.. 2024. 8. 14.
[kotlin] Sealed classes & interfaces Kotlin의 Sealed 클래스와 인터페이스Kotlin의 sealed 클래스와 인터페이스는 클래스 계층 구조의 제어된 상속을 제공하는 강력한 기능입니다.이 가이드에서는 sealed 클래스와 인터페이스의 다양한 측면을 상세히 살펴보겠습니다.  sealed 클래스와 인터페이스 기본 (Sealed Classes and Interfaces Basics)sealed 클래스와 인터페이스는 제한된 상속을 구현할 때 사용됩니다. sealed 클래스의 모든 직접 하위 클래스는 컴파일 시점에 알려져 있어야 하며, 같은 모듈과 패키지 내에서만 정의될 수 있습니다.sealed interface Errorsealed class IOError(): Errorclass FileReadError(val file: File): IO.. 2024. 8. 14.
[kotlin] 데이터 클래스(Data classes) Kotlin의 데이터 클래스Kotlin의 데이터 클래스(Data Classes)는 주로 데이터를 보유하는 용도로 사용되는 특별한 클래스입니다.이 가이드에서는 Kotlin 데이터 클래스의 다양한 측면을 상세히 살펴보겠습니다.  데이터 클래스 기본 (Data Class Basics)데이터 클래스는 data 키워드로 표시됩니다:data class User(val name: String, val age: Int)컴파일러는 주 생성자에 선언된 모든 속성에 대해 자동으로 다음과 같은 멤버 함수를 생성합니다:.equals()/.hashCode() 쌍.toString() (예: "User(name=John, age=42)").componentN() 함수 (속성 선언 순서에 해당).copy() 함수 데이터 클래스 요구사.. 2024. 8. 14.
[kotlin] 확장 기능(Extensions) Kotlin의 확장 기능Kotlin의 확장(Extensions) 기능은 기존 클래스나 인터페이스에 새로운 기능을 추가할 수 있게 해주는 강력한 도구입니다.이 가이드에서는 Kotlin 확장의 다양한 측면을 상세히 살펴보겠습니다. 확장 함수 (Extension Functions)확장 함수를 사용하면 기존 클래스에 새로운 메서드를 추가할 수 있습니다. 이는 특히 서드파티 라이브러리의 클래스를 수정해야 할 때 유용합니다.fun MutableList.swap(index1: Int, index2: Int) { val tmp = this[index1] // 'this'는 리스트를 가리킵니다 this[index1] = this[index2] this[index2] = tmp}val list = muta.. 2024. 8. 14.
[kotlin] 가시성 수정자(Visibility modifiers) Kotlin의 가시성 수정자Kotlin에서 가시성 수정자(visibility modifiers)는 코드의 캡슐화와 접근 제어를 위한 핵심 기능입니다.이 가이드에서는 Kotlin의 가시성 수정자에 대해 상세히 알아보겠습니다.   가시성 수정자 기본 (Visibility Modifiers Basics)Kotlin에는 네 가지 가시성 수정자가 있습니다: private, protected, internal, public. 기본 가시성은 public입니다.이 수정자들은 클래스, 객체, 인터페이스, 생성자, 함수, 프로퍼티 및 그 세터에 적용될 수 있습니다. 게터는 항상 해당 프로퍼티와 동일한 가시성을 가집니다. 패키지 레벨 선언 (Package-Level Declarations)함수, 프로퍼티, 클래스, 객체, .. 2024. 8. 13.