반응형

Kotlin 221

코루틴과 일시 중단 함수

코틀린의 코루틴은 비동기 프로그래밍을 편리하게 다룰 수 있도록 하는 기능 중 하나입니다. 코루틴은 코틀린 표준 라이브러리에 내장되어 있으며, kotlinx.coroutines 라이브러리를 통해 제공됩니다. 이를 통해 일시 중단 함수(suspending functions)를 사용하여 비동기적인 작업을 효과적으로 다룰 수 있습니다. 1. 일시 중단 함수 코루틴을 사용하면 일시 중단 함수를 작성하여 비동기 코드를 더 쉽게 작성할 수 있습니다. 일시 중단 함수는 suspend 키워드를 사용하여 선언됩니다. import kotlinx.coroutines.delay suspend fun mySuspendingFunction() { println("Start") delay(1000) // 1초 동안 일시 중단 pri..

Kotlin/포스팅 2024.01.07

코틀린 코루틴

코틀린 코루틴은 비동기 프로그래밍 및 다중 스레드 환경에서 가독성 높은 코드를 작성하고 성능을 향상시킬 수 있는 도구입니다. 코루틴은 경량 스레드와 같은 동작을 하면서도 오버헤드가 낮아 효율적으로 동작할 수 있습니다. 1. 코루틴 기본 개념 코루틴은 비선점형 멀티태스킹을 제공하는데, 이는 코루틴이 실행되는 도중 다른 코루틴으로 양보하거나 다시 호출될 수 있다는 것을 의미합니다. import kotlinx.coroutines.* fun main() = runBlocking { // 메인 코루틴 println("Start") launch { // 코루틴 블록 delay(1000) println("Hello") } println("World") delay(2000) println("End") } 위의 예제에서..

Kotlin/포스팅 2024.01.07

코틀린 쓰레드

코틀린에서의 스레드 관리는 주로 Java의 java.lang.Thread 클래스를 기반으로 합니다. 그러나 코틀린에서는 스레드를 좀 더 간결하게 다룰 수 있도록 확장 함수 및 람다를 활용하는 등의 편의 기능이 제공됩니다. 1. 기본적인 스레드 생성 코틀린에서 스레드를 생성하는 가장 기본적인 방법은 Thread 클래스를 사용하는 것입니다. class MyThread : Thread() { override fun run() { println("MyThread is running.") } } fun main() { val myThread = MyThread() myThread.start() // 새로운 스레드에서 run 메서드 실행 println("Main thread is running.") } 2. Run..

Kotlin/포스팅 2024.01.07

코틀린 동시성

코틀린은 기본적으로 JVM 위에서 동작하며, Java의 동시성 기능을 상당 부분 그대로 활용합니다. 따라서 코틀린에서의 동시성은 Java의 동시성 프로그래밍 모델과 유사한 개념과 기술을 사용합니다. 1. 스레드 (Threads) 코틀린에서 스레드는 Java와 동일한 방식으로 사용됩니다. Thread 클래스나 Runnable 인터페이스를 구현하거나, 람다 함수를 사용하여 스레드를 생성할 수 있습니다. import kotlin.concurrent.thread fun main() { // 스레드 생성 방법 1 val thread1 = Thread { println("Thread 1 is running.") } // 스레드 생성 방법 2 (코틀린 확장 함수 사용) val thread2 = thread { pri..

Kotlin/포스팅 2024.01.07

코틀린 인라인 함수

코틀린에서의 인라인 함수(Inline Function)은 호출하는 곳에 함수의 본문을 복사하여 넣어줌으로써 함수 호출의 오버헤드를 최소화하는 기능을 제공합니다. 즉, 함수를 호출하는 것이 아니라 함수의 본문이 호출되는 곳에 삽입되어 실행됩니다. 인라인 함수는 주로 고차 함수와 함께 사용되며, 람다 함수를 매개변수로 전달할 때 발생하는 오버헤드를 줄이는 데 유용합니다. 인라인 함수 선언 inline fun myInlineFunction(action: () -> T): T { println("Before action") val result = action() println("After action") return result } 위의 함수 myInlineFunction은 람다 함수 action을 받아 실행하..

Kotlin/포스팅 2024.01.07

코틀린 예외 선언

코틀린에서 예외 처리는 Java와 유사하지만 몇 가지 차이가 있습니다. 코틀린에서는 예외를 명시적으로 선언하지 않습니다. 예외를 던지는 함수에 대한 선언에서 throws 키워드가 필요하지 않습니다. 대신, 코틀린은 예외 처리를 위해 try, catch, finally 블록을 제공합니다. 예외 던지기 코틀린에서 함수는 특별한 표현식인 throw를 사용하여 예외를 던질 수 있습니다. fun divide(a: Int, b: Int): Int { if (b == 0) { throw ArithmeticException("Division by zero") } return a / b } 예외 처리 예외를 처리하기 위해 try, catch, finally 블록을 사용할 수 있습니다. fun main() { try { ..

Kotlin/포스팅 2024.01.07

코틀린 오버로딩한 메서드 생성

코틀린에서 메서드를 오버로딩(Overloading)하는 것은 하나의 클래스나 파일 내에서 동일한 이름을 가진 메서드를 여러 개 정의하는 것을 의미합니다. 메서드 오버로딩을 통해 동일한 작업을 수행하지만 다양한 매개변수를 허용하여 더 편리하게 사용할 수 있습니다. 메서드 오버로딩의 조건 1. 메서드 이름은 동일해야 합니다. 2. 매개변수의 개수 또는 타입이 달라야 합니다. class Calculator { // 정수형 두 개를 더하는 메서드 fun add(a: Int, b: Int): Int { return a + b } // 실수형 두 개를 더하는 메서드 fun add(a: Double, b: Double): Double { return a + b } // 문자열 두 개를 이어붙이는 메서드 fun add..

Kotlin/포스팅 2024.01.07

코틀린 노출된 선언 이름 변경

코틀린에서 노출된 선언의 이름을 변경하려면 @JvmName 애노테이션을 사용할 수 있습니다. 이 애노테이션은 Kotlin 코드를 Java 코드와의 상호 운용성을 위해 사용됩니다. @JvmName 애노테이션을 사용하면 Kotlin에서 정의한 이름과 Java에서 사용할 이름을 별도로 지정할 수 있습니다. // Kotlin 코드 class MyKotlinClass { @JvmName("greet") fun sayHello() { println("Hello from Kotlin!") } } fun main() { val myObject = MyKotlinClass() myObject.sayHello() // Kotlin 코드에서는 "sayHello"로 호출 } 위의 Kotlin 코드에서 sayHello 함수에 ..

Kotlin/포스팅 2024.01.07

코틀린 정적 멤버

코틀린에서는 명시적인 static 키워드가 없습니다. 대신, 정적 멤버를 정의하기 위해서는 객체 선언(object declaration)이나 컴패니언 객체(companion object)를 사용합니다. 여기에서는 각각의 방법에 대해 알아보겠습니다. 1. 객체 선언 (Object Declaration) object 키워드를 사용하여 객체 선언을 하면 해당 객체는 싱글톤 패턴으로 동작하며, 그 안에 정의된 멤버들은 정적(static)으로 취급됩니다. object MyObject { var staticVariable: Int = 0 fun staticFunction() { println("Static Function") } } fun main() { MyObject.staticVariable = 42 prin..

Kotlin/포스팅 2024.01.07

코틀린 객체

코틀린에서 객체(Object)는 여러 의미를 가질 수 있습니다. 여러 의미 중 주로 사용되는 객체에 대해 설명하겠습니다. 1. 객체 선언 (Object Declaration) 객체 선언은 싱글톤 패턴을 간편하게 구현하는 방법 중 하나입니다. 클래스를 정의하고 그 클래스의 단일 인스턴스를 생성한 다음, 해당 인스턴스를 사용하여 작업할 수 있습니다. object MySingleton { var name: String = "Singleton" fun printName() { println(name) } } fun main() { MySingleton.printName() // 출력: Singleton MySingleton.name = "Updated" MySingleton.printName() // 출력: U..

Kotlin/포스팅 2024.01.07

코틀린 최상위 선언

코틀린에서의 최상위 선언(Top-Level Declaration)은 특정 클래스나 함수 내부가 아닌 파일의 최상위에 직접 선언되는 것을 의미합니다. 최상위 선언은 해당 파일에서만 유효하며, 다른 파일에서 동일한 이름을 사용할 수 있습니다. 최상위 선언에는 변수, 함수, 클래스, 프로퍼티 등이 포함될 수 있습니다. 1. 최상위 함수 선언 // 파일: TopLevelDeclarations.kt fun topLevelFunction() { println("This is a top-level function.") } 위의 코드에서 topLevelFunction은 파일의 최상위에 선언된 함수입니다. 이 함수는 다른 파일에서도 동일한 이름으로 사용할 수 있습니다. 2. 최상위 변수 선언 // 파일: TopLevel..

Kotlin/포스팅 2024.01.07

코틀린 프로퍼티 접근

코틀린에서 프로퍼티(property)는 클래스 멤버로서 필드(field)와 그에 대한 게터(Getter)와 세터(Setter) 메서드를 캡슐화한 개념입니다. 여기에서는 코틀린 프로퍼티의 선언, 접근, 및 커스터마이징에 대해 알아보겠습니다. 1. 코틀린 프로퍼티 선언 프로퍼티는 일반적으로 클래스의 멤버로서 선언되며, 코틀린에서는 다음과 같은 형태로 선언됩니다. class MyClass { var myProperty: Int = 0 } 위의 예제에서 myProperty는 기본적으로 Int 타입의 프로퍼티로 선언되었습니다. 2. 프로퍼티 접근 프로퍼티에 대한 접근은 일반적으로 클래스 인스턴스를 통해 이루어집니다. 게터와 세터는 필요에 따라 자동으로 생성되거나 사용자가 직접 정의할 수 있습니다. fun main..

Kotlin/포스팅 2024.01.07

코틀린 코드를 자바에서 사용

코틀린 코드를 자바에서 사용하는 것은 코틀린과 자바 간의 원활한 상호 운용성을 통해 가능합니다. 여기에서는 코틀린 코드를 자바에서 호출하고 사용하는 방법에 대해 설명하겠습니다. 1. 코틀린 코드 컴파일 먼저, 코틀린 코드를 자바에서 사용하려면 코틀린 코드를 자바 바이트 코드로 컴파일해야 합니다. 코틀린 파일은 .kt 확장자를 가지고 있습니다. IntelliJ IDEA나 Gradle과 같은 빌드 도구를 사용하여 코틀린 코드를 컴파일할 수 있습니다. 2. 코틀린 코드에서 자바에서 호출 가능한 코드 작성 코틀린에서 자바에서 호출 가능한 코드를 작성하려면 몇 가지 규칙을 따라야 합니다. // KotlinClass.kt class KotlinClass { fun add(a: Int, b: Int): Int { r..

Kotlin/포스팅 2024.01.07

자바를 코틀린으로 변환하는 변환기

자바 코드를 코틀린 코드로 변환하는 것은 코틀린에서 제공하는 여러 도구들을 통해 수행될 수 있습니다. 이러한 도구들은 자동 변환기, IDE(Integrated Development Environment) 내장 도구 등이 포함됩니다. 주로 IntelliJ IDEA와 같은 IDE에서는 자동 변환 기능을 제공하여 편리하게 자바 코드를 코틀린 코드로 변환할 수 있습니다. IntelliJ IDEA를 통한 자동 변환 1. IntelliJ IDEA 열기 IntelliJ IDEA를 열고, 프로젝트를 로드합니다. 2. 자바 파일 선택 변환하고자 하는 자바 파일을 선택합니다. 3. 코드 변환 실행 선택한 파일에서 마우스 오른쪽 버튼을 클릭하거나, Code 메뉴에서 Convert Java File to Kotlin File..

Kotlin/포스팅 2024.01.07

코틀린 단일 추상 메서드 인터페이스

코틀린에서 단일 추상 메서드(SAM, Single Abstract Method) 인터페이스는 자바의 함수형 인터페이스와 유사한 개념입니다. 이러한 인터페이스는 하나의 추상 메서드만을 가지며, 그 외의 다른 메서드나 멤버가 없는 특별한 종류의 인터페이스입니다. 이러한 인터페이스는 람다 식을 사용하여 간단하게 인스턴스화할 수 있어 함수형 프로그래밍 스타일을 코틀린에서 지원합니다. 단일 추상 메서드 인터페이스 예제 // 단일 추상 메서드를 가진 인터페이스 interface Calculator { fun add(a: Int, b: Int): Int } fun main() { // 람다를 사용하여 인터페이스의 구현체 생성 val addition: Calculator = { a, b -> a + b } // 람다를..

Kotlin/포스팅 2024.01.07

코틀린/자바 타입 매핑

코틀린에서는 자바와의 상호 운용성을 위해 자동으로 타입 매핑이 이루어집니다. 이는 자바의 타입 시스템과 코틀린의 타입 시스템 간에 적절한 매핑을 수행하여 두 언어 간에 원활한 통합을 가능하게 합니다. 아래에서는 주요한 코틀린 타입과 자바 타입 간의 매핑에 대해 살펴보겠습니다. 1. 기본 타입 - 코틀린 Int, Long, Short, Byte, Float, Double, Char, Boolean 등이 있습니다. - 자바 매핑 int, long, short, byte, float, double, char, boolean 등으로 자동 매핑됩니다. 2. 문자열 - 코틀린 String 클래스를 사용합니다. - 자바 매핑 java.lang.String으로 자동 매핑됩니다. 3. 리스트와 배열 - 코틀린 List,..

Kotlin/포스팅 2024.01.07

코틀린 널 가능성 애너테이션

코틀린에서는 널 가능성(Nullable)에 대한 정보를 표시하기 위해 널 가능성 애너테이션을 사용합니다. 이러한 애너테이션은 코드에서 널 처리와 관련된 경고를 통해 프로그래머에게 유용한 정보를 제공합니다. 주로 자바와의 상호 운용성을 강화하고 안전한 널 처리를 위해 사용됩니다. 널 가능성 애너테이션 종류 1. @Nullable - @Nullable 애너테이션은 해당 요소(타입이나 메서드 매개변수 등)가 널 값을 가질 수 있다는 것을 나타냅니다. - 자바에서의 @Nullable 애너테이션과 함께 사용되어 널 가능성에 대한 정보를 전달합니다. 2. @NotNull - @NotNull 애너테이션은 해당 요소가 널 값을 가질 수 없다는 것을 나타냅니다. - 자바에서의 @NotNull 애너테이션과 함께 사용되어 ..

Kotlin/포스팅 2024.01.06

코틀린 플랫폼 타입

코틀린에서 플랫폼 타입(platform type)은 자바와의 상호 운용성을 위해 사용되는 특수한 타입입니다. 코틀린은 기본적으로 널 안전성을 갖춘 언어이지만, 자바와의 상호 운용성을 고려하여 일부 상황에서는 널 안전성이 보장되지 않는 플랫폼 타입을 사용할 수 있습니다. 플랫폼 타입의 특징 1. 널 안전성이 보장되지 않음 플랫폼 타입은 널 안전성이 보장되지 않습니다. 이는 코틀린 컴파일러가 해당 타입이 널이 될 수도, 되지 않을 수도 있다는 것을 알지 못하기 때문입니다. 2. 자바 타입과의 상호 운용성 플랫폼 타입은 주로 자바 코드와의 상호 운용성을 위해 사용됩니다. 예를 들어, 자바 메서드의 반환 타입이 String!이라면, 코틀린에서는 플랫폼 타입으로 처리됩니다. 플랫폼 타입 사용 예제 fun getJ..

Kotlin/포스팅 2024.01.06

코틀린 합성 프로퍼티

코틀린에서 합성 프로퍼티(composite property)는 여러 다른 프로퍼티들을 결합하여 하나의 프로퍼티처럼 다뤄질 수 있도록 하는 기능을 말합니다. 이는 코드의 가독성을 높이고 중복을 방지하는 데 도움이 됩니다. 합성 프로퍼티 예제 class Person { var firstName: String = "" var lastName: String = "" // 합성 프로퍼티 val fullName: String get() = "$firstName $lastName" } fun main() { val person = Person() person.firstName = "John" person.lastName = "Doe" println(person.fullName) // 출력: John Doe } 위의 ..

Kotlin/포스팅 2024.01.06

코틀린 Unit과 void

코틀린의 Unit과 자바의 void는 기본적으로 비슷한 역할을 하는 것처럼 보이지만 몇 가지 중요한 차이점이 있습니다. 1. Unit - Unit은 코틀린에서의 함수의 반환 타입입니다. - Unit은 실제로는 반환값이 없음을 나타내는 특수한 객체이며, 자바의 void와 유사한 역할을 합니다. - 함수의 반환 타입이 Unit인 경우, 반환값이 없거나 반환값을 사용하지 않음을 의미합니다. - Unit은 명시적으로 반환 타입을 선언하지 않아도 됩니다. (컴파일러가 자동으로 Unit을 삽입함) fun printMessage(message: String): Unit { println(message) } 또는 반환 타입을 생략해도 됩니다. fun printMessage(message: String) { printl..

Kotlin/포스팅 2024.01.06

코틀린 자바 메서드와 필드

코틀린에서 자바 메서드와 필드를 사용하는 것은 일반적인 상호 운용성의 일부입니다. 코틀린은 JVM 언어이며, 따라서 자바 코드와의 상호 작용이 자연스럽게 지원됩니다. 아래에서는 코틀린에서 자바 메서드와 필드를 어떻게 사용하는지에 대한 예제를 제시합니다. 1. 자바 클래스 사용 자바 클래스를 코틀린에서 사용하는 것은 간단합니다. import 문을 사용하여 자바 클래스를 가져올 수 있고, 그 후에는 자바 클래스의 메서드와 필드를 일반적인 방식으로 사용할 수 있습니다. JavaClass.java public class JavaClass { private String message = "Hello from Java!"; public String getMessage() { return message; } publ..

Kotlin/포스팅 2024.01.06

자바 코드를 코틀린에서 사용

코틀린은 자바와 완벽하게 상호 운용할 수 있는 언어이며, 따라서 자바 코드를 코틀린에서 사용하는 것은 매우 쉽습니다. 아래에는 자바 코드를 코틀린에서 사용하는 방법에 대한 예제를 제공합니다. 1. 자바 클래스 사용 자바로 작성된 클래스를 코틀린에서 사용하려면 단순히 import 문을 사용하여 해당 클래스를 가져오면 됩니다. JavaClass.java public class JavaClass { public String getGreeting() { return "Hello from Java!"; } } KotlinClass.kt import JavaClass fun main() { val javaObject = JavaClass() println(javaObject.getGreeting()) // 출력: ..

Kotlin/포스팅 2024.01.06

코틀린 @DslMarker

@DslMarker는 코틀린 DSL (Domain-Specific Language)을 구현할 때 사용되는 마커 애노테이션입니다. 이 애노테이션은 특정 클래스를 DSL의 일부로 표시하고, 해당 클래스의 멤버 함수들이 DSL의 일부로 간주되도록 하는 역할을 합니다. @DslMarker 애노테이션을 사용하면 특정 클래스나 인터페이스에서만 DSL 구문을 적용하도록 제한할 수 있습니다. 이를 통해 DSL을 정의하거나 사용할 때 컴파일러가 더욱 강력한 타입 검사를 수행하도록 할 수 있습니다. 예제 @DslMarker annotation class MyDslMarker // @MyDslMarker 애노테이션이 붙은 클래스 @MyDslMarker class MyDslBuilder { var name: String = ..

Kotlin/포스팅 2024.01.06

코틀린 타입 안전한 빌더 사용

코틀린에서 안전한 빌더 패턴을 구현하기 위해 DSL과 함께 타입 안전한 빌더를 사용할 수 있습니다. 이 패턴은 빌더를 통해 객체를 생성하고 초기화할 때 컴파일러가 타입 불일치를 방지하여 안전성을 높이는 것을 목적으로 합니다. 타입 안전한 빌더 패턴 예제 // 안전한 빌더 패턴을 위한 클래스 class PersonBuilder { var firstName: String = "" var lastName: String = "" var age: Int = 0 var address: String = "" // DSL 함수로 사용할 함수 fun build(): Person { return Person(firstName, lastName, age, address) } } // 빌더 패턴을 사용하는 클래스 class ..

Kotlin/포스팅 2024.01.06

코틀린 중위 함수를 사용해 플루언트 DSL 생성

코틀린에서 플루언트 DSL을 생성하기 위해 중위 함수를 활용할 수 있습니다. 중위 함수는 인자가 하나뿐이고, 그 함수를 호출할 때 괄호를 사용하지 않고 호출할 수 있는 함수를 말합니다. 이러한 특성을 활용하여 DSL을 더 읽기 쉽게 만들 수 있습니다. 아래는 간단한 플루언트 DSL을 생성하는 예제입니다. // DSL을 위한 람다와 중위 함수를 정의한 클래스 class HTML { private val elements = mutableListOf() // 중위 함수를 사용하여 태그를 추가 infix fun String.tag(block: HTMLElement.() -> Unit) { val element = HTMLElement(this) element.block() elements.add(element)..

Kotlin/포스팅 2024.01.06

코틀린 고차 함수와 DSL

코틀린에서는 고차 함수(higher-order function)와 DSL(domain-specific language)을 사용하여 강력하고 표현력 있는 코드를 작성할 수 있습니다. 고차 함수 (Higher-Order Function) 고차 함수는 다른 함수를 매개변수로 받거나 함수를 반환하는 함수를 의미합니다. 이를 통해 함수를 일급 객체로 취급할 수 있어, 함수형 프로그래밍의 특징을 지원합니다. 매개변수로 함수 전달하기 // 람다식을 매개변수로 받는 고차 함수 fun higherOrderFunction(action: (Int, Int) -> Int): Int { return action(3, 5) } fun main() { // 람다식을 인자로 전달하여 호출 val result = higherOrder..

Kotlin/포스팅 2024.01.06

코틀린 위임 표현

코틀린에서 위임(delegation)은 클래스가 특정 동작을 다른 객체에게 위임하는 메커니즘을 의미합니다. 주로 프로퍼티 위임을 다루고 있지만, 위임은 메서드 호출에도 활용될 수 있습니다. 프로퍼티 위임 프로퍼티 위임은 새로운 프로퍼티를 선언할 때, 해당 프로퍼티의 getter나 setter를 다른 객체에 위임하는 기능입니다. by 키워드를 사용하여 프로퍼티 위임을 선언합니다. interface PropertyDelegate { operator fun getValue(thisRef: Any?, property: KProperty): T operator fun setValue(thisRef: Any?, property: KProperty, value: T) } class Example : PropertyD..

Kotlin/포스팅 2024.01.06

코틀린 커스텀 위임 만들기

코틀린에서는 사용자 정의 프로퍼티 위임을 만들어서 특정 프로퍼티의 동작을 커스터마이징할 수 있습니다. 이를 위해서는 ReadOnlyProperty 또는 ReadWriteProperty 인터페이스를 구현해야 합니다. 각각은 읽기 전용과 읽기/쓰기 가능한 프로퍼티에 대한 인터페이스입니다. 아래에 간단한 사용자 정의 프로퍼티 위임의 예제를 제시합니다. import kotlin.properties.ReadOnlyProperty import kotlin.reflect.KProperty // ReadOnlyProperty 인터페이스를 구현한 사용자 정의 위임 클래스 class CustomReadOnlyDelegate : ReadOnlyProperty { // getValue 메서드는 프로퍼티에 접근할 때 호출됨 o..

Kotlin/포스팅 2024.01.06

코틀린 표준 위임들

코틀린에서 제공하는 표준 위임은 주로 kotlin.properties 패키지에 포함되어 있습니다. 여러 표준 위임 중에서 대표적인 몇 가지를 살펴보겠습니다. 1. lazy lazy는 프로퍼티를 처음 사용할 때까지 초기화를 지연시키는 데 사용됩니다. 다음은 lazy를 사용한 간단한 예제입니다. val lazyValue: String by lazy { println("Computed!") "Hello Lazy" } fun main() { println(lazyValue) // 첫 번째 호출 시에만 "Computed!" 출력, 이후 호출은 초기화된 값을 반환 println(lazyValue) // 두 번째 호출부터는 "Computed!" 출력 없이 초기화된 값을 반환 } 2. observable observa..

Kotlin/포스팅 2024.01.06

코틀린 위임 프로퍼티

코틀린에서 위임 프로퍼티(delegated property)는 프로퍼티의 getter 및 setter 로직을 다른 객체에게 위임하는 메커니즘을 제공합니다. 이를 통해 코드 중복을 피하고, 재사용성을 높일 수 있습니다. 주요한 위임 프로퍼티 중에는 by 키워드를 사용하여 위임을 설정하는 여러 클래스들이 있습니다. 1. Lazy 위임 Lazy는 프로퍼티를 처음으로 사용할 때까지 초기화하지 않고, 사용 시에 초기화하는 데 사용됩니다. val lazyValue: String by lazy { println("Computed!") "Hello Lazy" } fun main() { println(lazyValue) // 첫 번째 호출 시에만 "Computed!" 출력, 이후 호출은 초기화된 값을 반환 println..

Kotlin/포스팅 2024.01.06