목록Kotlin (14)
시배's Android
import kotlin.reflect.KProperty fun main(){ val test : Int by LoggingProperty(100) println(test) } class LoggingProperty (var value : T) { operator fun getValue( thisRef : Any?, prop : KProperty ) : T { println("${prop.name} returned value $value") return value } operator fun setValue( thisRef : Any?, prop : KProperty, newValue : T ) { val name = prop.name println("$name changed from $value to $..
Open Keyword Kotlin에서 클래스나 메서드를 상속 가능하게 하려면 open 키워드를 사용해야 합니다. 이는 Liskov Substitution Principle(LSP)를 준수하기 위한 것입니다. LSP는 서브타입(subtype)이 슈퍼타입(super type)을 대체할 수 있어야 한다는 원칙으로, 이를 위해서는 서브타입에서는 슈퍼타입의 모든 규칙을 따라야 합니다. 예를 들어, Animal 클래스를 살펴봅시다. open class Animal { open fun bark(){ println("animal") } fun test(){ println("test") } } 여기서 open 키워드는 이 클래스를 상속 가능하게 만듭니다. bark() 메서드 또한 open 키워드를 통해 서브클래스에서 ..
fun main(){ val name = "si8ae" val welcome = "Hello, $name" println(welcome) } Kotlin에서는 문자열 템플릿을 사용하여 문자열을 쉽게 결합할 수 있습니다. 위 코드와 같이 name이라는 변수를 문자열 템플릿을 이용하여 welcome 변수를 초기화하면 자바에서는 어떻게 구현이 되는지 살펴보겠습니다. public static final void main() { String name = "si8ae"; String welcome = "Hello, " + name; System.out.println(welcome); } 자바에서는 단순한 문자열 연결(+)로 변환되는 것을 확인할 수 있습니다.
data class Person( val age : Int, val name : String ) 위 코드는 'Person'이라는 이름의 Data Class를 선언한 것입니다. 이 클래스는 두 개의 프로퍼티를 가지고 있습니다: 'age'와 'name'. 이제 이 코드를 자바로 디컴파일하면 어떤 형태로 변환되는지 살펴보겠습니다. @Metadata( mv = {1, 9, 0}, k = 1, d1 = {"\u0000 \n\u0002\u0018\u0002\n\u0002\u0010\u0000\n\u0000\n\u0002\u0010\b\n\u0000\n\u0002\u0010\u000e\n\u0002\b\u000b\n\u0002\u0010\u000b\n\u0002\b\u0004\b\u0086\b\u0018\u00002..
Backgroud 가정하에 개발 중인 앱에서 사용자의 나이를 다루는 클래스를 만든다고 가정해봅시다. class User { var age: Int = 0 } 이 코드에서 User 클래스는 age라는 프로퍼티를 가지고 있습니다. 그런데 만약에 사용자의 나이가 음수가 될 수 없도록, 특별한 로직을 추가하고 싶다면 backing property와 backing field를 사용할 수 있습니다. Backging Field 하나의 접근자가 기본으로 구현되는 접근자를 사용하는 경우 커스텀 접근자가 field 키워드를 통해 bakcing field를 참조하는 경우 먼저, backing field를 이용하여 프로퍼티에 값을 저장하고, 그 값을 읽고 쓰는 메커니즘을 만들어봅시다. class User { var age: ..
Kotlin by 키워드: 위임 프로퍼티와 확장 함수 Kotlin은 강력한 기능 중 하나로 by 키워드를 사용하여 프로퍼티에 위임(delegation)하는 기능을 제공합니다. 이것은 코드의 재사용성과 모듈화를 높이는데 도움이 되며, 다양한 상황에서 유용하게 활용됩니다. 이번 포스팅에서는 by 키워드를 사용하는 두 가지 주요 방법에 대해 알아보겠습니다. 1. 위임 프로퍼티 (Delegated Properties) 위임 프로퍼티를 사용하면, 프로퍼티의 getter와 setter를 다른 객체에 위임할 수 있습니다. 이것은 코드 중복을 줄이고 프로퍼티 동작을 재사용할 수 있는 강력한 방법입니다. by 키워드를 사용하여 다음과 같이 선언할 수 있습니다. class Example { var someProperty:..
제 생각에 Kotlin 코루틴을 사용할 때 해야 할 일과 하지 말아야 할 일(또는 최소한 피해야 할 일) 몇 가지에 대해 글을 쓰기로 결정했습니다. Wrap async calls with coroutineScope or use SupervisorJob to handle exceptions ❌ async 블록이 예외를 발생시킬 수 있는 경우 try/catch 블록으로 감싸는 것에 의존하지 마세요. val job: Job = Job() val scope = CoroutineScope(Dispatchers.Default + job) // may throw Exception fun doWork(): Deferred = scope.async { ... } // (1) fun loadData() = scope.la..
The Big Difference Between Flows and Channels in Kotlin Stop worrying if flows are hot or cold, and focus on good old-fashioned encapsulation instead betterprogramming.pub "Channel은 Hot이고 Flow은 Cold"는 Kotlin 프로그래머의 말을 들어보셨을 것입니다. 이는 비동기 데이터 스트림으로 작업하는 두 가지 방법을 유용하게 구분하는 말입니다. Flow와 Channel은 함수와 개체만큼이나 서로 다릅니다. 하지만 이것이 전부는 아닙니다. Flow 자체는 적어도 두 가지 매우 다른 형태로 제공되기 때문입니다. 바로 이 지점에서 제한적인 Hot, Cold 비유가..