<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>민덕이의 개발노트</title>
    <link>https://minddong.tistory.com/</link>
    <description>민덕이의 개발노트입니다.</description>
    <language>ko</language>
    <pubDate>Fri, 12 Jun 2026 16:25:55 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>민덕이</managingEditor>
    <item>
      <title>[FLYWAY] Flyway 명령어</title>
      <link>https://minddong.tistory.com/109</link>
      <description>&lt;p&gt;Flyway는 데이터베이스 마이그레이션을 관리하는 강력한 도구입니다. 각 명령어의 기능과 사용 방법을 정리하여 블로그 포스팅을 준비했습니다.&lt;/p&gt;
&lt;h2&gt;Flyway 명령어 설명&lt;/h2&gt;
&lt;h3&gt;Migrate&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;기능&lt;/strong&gt;: 데이터베이스에 아직 적용되지 않은 마이그레이션 파일(V1, V2, V3 …)을 순차적으로 실행하여 최신 상태로 유지합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;사용 예시&lt;/strong&gt;: 새로운 버전의 스크립트를 적용할 때 사용합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Repair&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;기능&lt;/strong&gt;: &lt;code&gt;flyway_schema_history&lt;/code&gt; 테이블을 수정하여 실패한 마이그레이션의 체크섬을 재정렬하거나 손상된 엔트리를 제거합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;주의사항&lt;/strong&gt;: 성공한 마이그레이션 파일의 내용을 변경하지 않으며, 실패한 경우에만 사용합니다. 기존 파일을 변경하기보다는 새로운 버전의 파일을 추가해야 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Baseline&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;기능&lt;/strong&gt;: 기존 데이터베이스를 Flyway로 관리할 수 있도록 초기화합니다. 지정된 버전부터 이후의 마이그레이션만 적용되도록 설정합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;사용 예시&lt;/strong&gt;: 이미 운영 중인 데이터베이스에 Flyway를 도입할 때 유용하며, 현재까지의 테이블 DDL을 V1로 저장 후, V2부터 적용할 수 있습니다.&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;flyway baseline -baselineVersion=2&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Clean&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;기능&lt;/strong&gt;: 데이터베이스의 모든 테이블과 데이터를 삭제합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;주의사항&lt;/strong&gt;: 개발 환경에서 테스트 목적으로만 사용하며, 프로덕션 환경에서는 절대 사용하지 않아야 합니다. 데이터 손실 위험이 큽니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Validate&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;기능&lt;/strong&gt;: 이미 적용된 마이그레이션과 현재 파일 시스템의 마이그레이션 스크립트를 비교하여 변경 사항이나 누락된 파일이 없는지 확인합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;사용 예시&lt;/strong&gt;: &lt;code&gt;flyway_schema_history&lt;/code&gt;에 없는 마이그레이션 파일이 존재할 경우 에러가 발생합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;각 명령어는 특정 상황에 맞게 신중하게 사용해야 하며, 데이터베이스 관리의 안정성과 일관성을 유지하는 데 필수적입니다. 이 정보를 바탕으로 블로그 포스팅을 작성하여 Flyway 사용법을 공유해 보세요!&lt;/p&gt;</description>
      <category>FLYWAY</category>
      <category>flyway</category>
      <category>명렁어</category>
      <author>민덕이</author>
      <guid isPermaLink="true">https://minddong.tistory.com/109</guid>
      <comments>https://minddong.tistory.com/109#entry109comment</comments>
      <pubDate>Tue, 8 Oct 2024 22:32:56 +0900</pubDate>
    </item>
    <item>
      <title>[Kotlin] Kotlin 2.0 주요 변경점</title>
      <link>https://minddong.tistory.com/108</link>
      <description>&lt;p&gt;Kotlin 2.0은 여러 혁신적인 기능과 성능 개선을 통해 개발자들에게 더욱 강력한 도구를 제공했습니다. 이번 포스트에서는 Kotlin 2.0의 주요 변경 사항을 자세히 살펴보겠습니다.&lt;/p&gt;
&lt;h2&gt;&lt;strong&gt;Kotlin 2.0의 주요 변경 사항&lt;/strong&gt;&lt;/h2&gt;
&lt;h3&gt;&lt;strong&gt;1. 새로운 K2 컴파일러&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Kotlin 2.0에서 가장 주목할 만한 변경 사항 중 하나는 새로운 K2 컴파일러의 도입입니다. K2 컴파일러는 성능이 크게 향상되어, 컴파일 속도가 최대 94%까지 빨라졌습니다[1][2]. 또한, 초기화 단계에서 최대 488%의 속도 향상이 이루어졌습니다[1]. 이는 대규모 프로젝트에서 특히 유용하며, 개발자들이 더 빠르게 코드를 빌드할 수 있도록 돕습니다.&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;2. 성능 개선&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Kotlin 2.0은 전반적인 성능이 크게 개선되었습니다. 컴파일러의 최적화로 인해 코드 실행 속도가 빨라졌으며, 이는 대규모 프로젝트에서 특히 유용합니다. 이러한 성능 향상은 개발자들이 더 효율적으로 작업할 수 있도록 지원합니다[3][4].&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;3. 타입 시스템 강화&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Kotlin 2.0에서는 타입 시스템이 강화되었습니다. 이는 코드의 안정성을 높이고, 타입 관련 오류를 줄이는 데 기여합니다. 개발자들은 더욱 안전하고 견고한 코드를 작성할 수 있게 되었습니다[5][6].&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-kotlin&quot;&gt;// 타입 시스템 강화 예제
fun printLength(text: String?) {
    text?.let {
        println(&amp;quot;Length: ${it.length}&amp;quot;)
    } ?: println(&amp;quot;Text is null&amp;quot;)
}&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;&lt;strong&gt;4. 멀티플랫폼 개발 지원 강화&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Kotlin 2.0은 멀티플랫폼 개발을 위한 지원이 강화되었습니다. 소스 세트 관리가 개선되어, 다양한 플랫폼에서의 코드 재사용이 더욱 쉬워졌습니다[7][8]. 이는 개발자들이 여러 플랫폼에서 일관된 경험을 제공할 수 있도록 돕습니다.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-kotlin&quot;&gt;// 멀티플랫폼 프로젝트 예제
expect fun platformName(): String

fun greet() {
    println(&amp;quot;Hello from ${platformName()}&amp;quot;)
}&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;&lt;strong&gt;5. 코루틴 개선&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Kotlin 2.0에서는 코루틴이 더욱 개선되었습니다. 비동기 프로그래밍을 위한 코루틴의 성능과 안정성이 향상되어, 복잡한 비동기 작업을 더욱 쉽게 관리할 수 있습니다[9][10].&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-kotlin&quot;&gt;import kotlinx.coroutines.*

fun main() = runBlocking {
    launch {
        delay(1000L)
        println(&amp;quot;World!&amp;quot;)
    }
    println(&amp;quot;Hello,&amp;quot;)
}&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;&lt;strong&gt;6. 새로운 언어 기능&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Kotlin 2.0은 새로운 언어 기능을 도입하여, 개발자들이 더욱 직관적으로 코드를 작성할 수 있도록 지원합니다. 이러한 기능들은 코드의 가독성과 유지보수를 용이하게 합니다[11][12].&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;7. Gradle 및 Java와의 호환성&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Kotlin 2.0.20에서는 멀티플랫폼 프로젝트의 소스 세트 관리가 개선되었으며, 일부 Gradle Java와의 호환성이 중단되었습니다. 이는 최신 기술 스택과의 통합을 지원하여, 개발자들이 최신 도구를 활용할 수 있도록 합니다[13][14].&lt;/p&gt;
&lt;p&gt;Kotlin 2.0은 이러한 다양한 기능과 개선 사항을 통해 개발자들에게 더 나은 개발 경험을 제공합니다. 특히 K2 컴파일러의 도입과 성능 개선은 다양한 플랫폼에서의 개발을 더욱 효율적으로 만들어 줍니다. Kotlin 2.0의 새로운 기능들을 프로젝트에 적용해 보시기 바랍니다!&lt;/p&gt;</description>
      <category>KOTLIN</category>
      <category>Kotlin</category>
      <category>코틀린</category>
      <author>민덕이</author>
      <guid isPermaLink="true">https://minddong.tistory.com/108</guid>
      <comments>https://minddong.tistory.com/108#entry108comment</comments>
      <pubDate>Mon, 7 Oct 2024 22:05:49 +0900</pubDate>
    </item>
    <item>
      <title>[Kotlin] Kotlin 1.9 주요 변경점</title>
      <link>https://minddong.tistory.com/107</link>
      <description>&lt;p&gt;Kotlin 1.9은 다양한 새로운 기능과 개선 사항을 통해 개발자들에게 더욱 강력한 도구를 제공했습니다. 이번 포스트에서는 Kotlin 1.9의 주요 변경 사항을 자세히 살펴보겠습니다.&lt;/p&gt;
&lt;h2&gt;&lt;strong&gt;Kotlin 1.9의 주요 변경 사항&lt;/strong&gt;&lt;/h2&gt;
&lt;h3&gt;&lt;strong&gt;1. WebAssembly(Wasm) 프로젝트의 코드 크기 개선&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Kotlin 1.9에서는 WebAssembly 프로젝트의 코드 크기가 크게 개선되었습니다. &amp;quot;Hello World&amp;quot; 프로젝트를 비교해보면, 코드의 크기가 상당히 줄어들어 성능과 효율성이 향상되었습니다. 이는 웹 애플리케이션 개발자들에게 더 빠르고 가벼운 애플리케이션을 제공할 수 있는 기회를 제공합니다.&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;2. Kotlin 멀티플랫폼의 개발자 경험 향상&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Kotlin 1.9에서는 멀티플랫폼 프로젝트의 개발자 경험(DX)이 크게 향상되었습니다. 안드로이드를 대상으로 한 지원이 변경되어, 개발자들이 다양한 플랫폼에서 Kotlin을 더욱 쉽게 사용할 수 있게 되었습니다.&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;3. 새로운 언어 기능 및 문법 개선&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Kotlin 1.9에서는 새로운 언어 기능과 문법 개선이 도입되었습니다. 이러한 개선은 코드의 가독성과 유지보수를 용이하게 하며, 개발자들이 더욱 직관적으로 Kotlin을 사용할 수 있도록 돕습니다.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-kotlin&quot;&gt;// 새로운 언어 기능 예제
val numbers = listOf(1, 2, 3, 4, 5)
val doubled = numbers.map { it * 2 }
println(doubled) // [2, 4, 6, 8, 10]&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;&lt;strong&gt;4. Kotlin/Native 및 Kotlin/Multiplatform 개선&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Kotlin 1.9에서는 Kotlin/Native와 Kotlin/Multiplatform의 기능이 크게 개선되었습니다. 이는 다양한 플랫폼에서의 성능을 향상시키고, 개발자들이 멀티플랫폼 프로젝트를 더욱 효율적으로 관리할 수 있게 합니다.&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;5. 새로운 enum 클래스 값 함수&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Kotlin 1.9.20에서는 새로운 enum 클래스 값 함수가 도입되었습니다. 이는 enum 클래스의 모든 값을 쉽게 가져올 수 있도록 하여, 코드의 간결성과 효율성을 높입니다.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-kotlin&quot;&gt;enum class Color {
    RED, GREEN, BLUE
}

fun main() {
    val colors = Color.values()
    println(colors.joinToString()) // RED, GREEN, BLUE
}&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;&lt;strong&gt;6. Open-ended Ranges를 위한 새로운 연산자&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Kotlin 1.9에서는 Open-ended Ranges를 위한 새로운 연산자가 추가되었습니다. 이는 범위를 보다 유연하게 정의할 수 있게 하여, 다양한 시나리오에서의 코드 작성을 용이하게 합니다.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-kotlin&quot;&gt;// Open-ended Range 예제
val range = 1 until 10
println(range.contains(5)) // true
println(range.contains(10)) // false&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Kotlin 1.9은 이러한 다양한 기능과 개선 사항을 통해 개발자들에게 더 나은 개발 경험을 제공합니다. 특히 WebAssembly 프로젝트의 코드 크기 개선과 멀티플랫폼 프로젝트의 개발자 경험 향상은 다양한 플랫폼에서의 개발을 더욱 효율적으로 만들어 줍니다. Kotlin 1.9의 새로운 기능들을 프로젝트에 적용해 보시기 바랍니다!&lt;/p&gt;</description>
      <category>KOTLIN</category>
      <category>Kotlin</category>
      <category>코틀린</category>
      <author>민덕이</author>
      <guid isPermaLink="true">https://minddong.tistory.com/107</guid>
      <comments>https://minddong.tistory.com/107#entry107comment</comments>
      <pubDate>Sun, 6 Oct 2024 22:05:59 +0900</pubDate>
    </item>
    <item>
      <title>[Kotlin] Kotlin 1.8 주요 변경점</title>
      <link>https://minddong.tistory.com/106</link>
      <description>&lt;p&gt;Kotlin 1.8은 여러 새로운 기능과 개선 사항을 통해 개발자들에게 더욱 강력한 도구를 제공했습니다. 이번 포스트에서는 Kotlin 1.8의 주요 변경 사항을 자세히 살펴보겠습니다.&lt;/p&gt;
&lt;h2&gt;&lt;strong&gt;Kotlin 1.8의 주요 변경 사항&lt;/strong&gt;&lt;/h2&gt;
&lt;h3&gt;&lt;strong&gt;1. JVM용 새로운 실험적 함수&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Kotlin 1.8에서는 JVM을 위한 새로운 실험적 함수가 도입되었습니다. 이 함수들은 디렉토리 내용을 재귀적으로 복사하거나 삭제하는 기능을 제공합니다. 이를 통해 파일 시스템 작업을 보다 효율적으로 수행할 수 있습니다.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-kotlin&quot;&gt;import java.nio.file.*
import kotlin.io.path.*

fun main() {
    val sourceDir = Path(&amp;quot;source&amp;quot;)
    val targetDir = Path(&amp;quot;target&amp;quot;)

    // 재귀적으로 디렉토리 복사
    sourceDir.toFile().copyRecursively(targetDir.toFile(), overwrite = true)

    // 재귀적으로 디렉토리 삭제
    targetDir.toFile().deleteRecursively()
}&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;&lt;strong&gt;2. kotlin-reflect 성능 개선&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;kotlin-reflect의 성능이 개선되어, JVM 타겟 1.8로 컴파일됩니다. 내부 캐시 메커니즘이 Java의 &lt;code&gt;ClassValue&lt;/code&gt;로 마이그레이션되어, &lt;code&gt;typeOf()&lt;/code&gt;를 호출할 때 성능이 크게 향상되었습니다. 이는 리플렉션을 사용하는 애플리케이션의 실행 속도를 개선합니다.&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;3. Objective-C 및 Swift 상호 운용성 개선&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Kotlin 1.8에서는 Objective-C와 Swift와의 상호 운용성이 개선되었습니다. 새로운 어노테이션(@ObjCName, @HiddenFromObjC, @ShouldRefineInSwift)을 통해 Kotlin 코드를 더 쉽게 Swift 및 Objective-C와 통합할 수 있습니다. 이는 iOS 애플리케이션 개발을 더욱 원활하게 만들어 줍니다.&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;4. Gradle 7.3 호환성&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Kotlin 1.8은 Gradle 7.3과 호환되며, 최신 빌드 시스템과의 통합을 지원합니다. 이는 개발자들이 최신 도구를 활용하여 Kotlin 프로젝트를 더욱 효율적으로 빌드하고 관리할 수 있도록 돕습니다.&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;5. 표준 라이브러리 개선&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Kotlin 1.8에서는 표준 라이브러리의 여러 개선 사항이 포함되어 있습니다. Java의 &lt;code&gt;Optional&lt;/code&gt; 클래스와 작업하기 위한 확장 함수가 안정화되어, Java API와의 상호 운용성을 보다 쉽게 처리할 수 있게 합니다.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-kotlin&quot;&gt;import java.util.Optional

fun main() {
    val optionalValue: Optional&amp;lt;String&amp;gt; = Optional.of(&amp;quot;Kotlin&amp;quot;)
    val value = optionalValue.orElse(&amp;quot;Default&amp;quot;)
    println(value) // Kotlin
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Kotlin 1.8은 이러한 다양한 기능과 개선 사항을 통해 개발자들에게 더 나은 개발 경험을 제공합니다. 특히 JVM용 새로운 함수와 kotlin-reflect 성능 향상은 멀티플랫폼 프로젝트에서의 개발을 더욱 효율적으로 만들어 줍니다. Kotlin 1.8의 새로운 기능들을 프로젝트에 적용해 보시기 바랍니다!&lt;/p&gt;</description>
      <category>KOTLIN</category>
      <category>Kotlin</category>
      <category>코틀린</category>
      <author>민덕이</author>
      <guid isPermaLink="true">https://minddong.tistory.com/106</guid>
      <comments>https://minddong.tistory.com/106#entry106comment</comments>
      <pubDate>Sat, 5 Oct 2024 22:05:59 +0900</pubDate>
    </item>
    <item>
      <title>[Kotlin] Kotlin 1.7 주요 변경점</title>
      <link>https://minddong.tistory.com/105</link>
      <description>&lt;p&gt;Kotlin 1.7은 여러 새로운 기능과 개선 사항을 통해 개발자들에게 더욱 강력한 도구를 제공했습니다. 이번 포스트에서는 Kotlin 1.7의 주요 변경 사항을 자세히 살펴보겠습니다.&lt;/p&gt;
&lt;h2&gt;&lt;strong&gt;Kotlin 1.7의 주요 변경 사항&lt;/strong&gt;&lt;/h2&gt;
&lt;h3&gt;&lt;strong&gt;1. Kotlin/JVM 컴파일러 성능 개선&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Kotlin 1.7에서는 Kotlin/JVM 컴파일러의 성능이 크게 개선되었습니다. JetBrains의 벤치마크에 따르면 컴파일 시간은 이전 버전에 비해 상당히 단축되었습니다. 이는 대규모 프로젝트에서의 빌드 시간을 줄여 개발자들이 더 효율적으로 작업할 수 있도록 합니다.&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;2. Kotlin/JVM K2 컴파일러 알파 버전&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;새로운 Kotlin/JVM K2 컴파일러의 알파 버전이 공개되었습니다. K2 컴파일러는 기존 컴파일러보다 더 나은 성능과 확장성을 제공하며, 향후 Kotlin의 발전에 중요한 역할을 할 것으로 기대됩니다.&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;3. 언어 기능의 안정화&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Kotlin 1.7에서는 여러 언어 기능이 안정화되었습니다. 이는 개발자들이 새로운 기능을 안정적으로 사용할 수 있도록 하여, 코드의 안정성과 유지보수를 용이하게 합니다.&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;4. 제네릭 인라인 클래스&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Kotlin 1.7에서는 제네릭 인라인 클래스가 도입되었습니다. 이는 성능 최적화와 메모리 사용을 개선하는 데 유용하며, 특정 상황에서 더 효율적인 코드를 작성할 수 있게 합니다.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-kotlin&quot;&gt;inline class Box&amp;lt;T&amp;gt;(val value: T)

fun main() {
    val box = Box(1)
    println(box.value) // 1
}&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;&lt;strong&gt;5. 위임된 프로퍼티의 바이트코드 최적화&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;위임된 프로퍼티에 대한 바이트코드 최적화가 추가되었습니다. 이는 프로퍼티 위임을 사용하는 코드의 성능을 향상시켜, 보다 효율적인 실행을 가능하게 합니다.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-kotlin&quot;&gt;class Example {
    var p: String by Delegate()
}

class Delegate {
    operator fun getValue(thisRef: Any?, property: KProperty&amp;lt;*&amp;gt;): String {
        return &amp;quot;$thisRef, thank you for delegating &amp;#39;${property.name}&amp;#39; to me!&amp;quot;
    }

    operator fun setValue(thisRef: Any?, property: KProperty&amp;lt;*&amp;gt;, value: String) {
        println(&amp;quot;$value has been assigned to &amp;#39;${property.name}&amp;#39; in $thisRef.&amp;quot;)
    }
}

fun main() {
    val e = Example()
    println(e.p) // Example@&amp;lt;hash&amp;gt;, thank you for delegating &amp;#39;p&amp;#39; to me!
    e.p = &amp;quot;NEW&amp;quot; // NEW has been assigned to &amp;#39;p&amp;#39; in Example@&amp;lt;hash&amp;gt;.
}&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;&lt;strong&gt;6. Gradle 7.1 지원&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Kotlin 1.7.20에서는 Gradle 7.1에 대한 지원이 추가되었습니다. 이는 최신 빌드 시스템과의 호환성을 보장하여, 개발자들이 최신 도구를 활용할 수 있도록 돕습니다.&lt;/p&gt;
&lt;p&gt;Kotlin 1.7은 이러한 다양한 기능과 개선 사항을 통해 개발자들에게 더 나은 개발 경험을 제공합니다. 특히 컴파일러 성능 개선과 새로운 언어 기능의 안정화는 코드의 효율성과 안정성을 높여줍니다. Kotlin 1.7의 새로운 기능들을 프로젝트에 적용해 보시기 바랍니다!&lt;/p&gt;</description>
      <category>KOTLIN</category>
      <category>Kotlin</category>
      <category>코틀린</category>
      <author>민덕이</author>
      <guid isPermaLink="true">https://minddong.tistory.com/105</guid>
      <comments>https://minddong.tistory.com/105#entry105comment</comments>
      <pubDate>Fri, 4 Oct 2024 22:05:20 +0900</pubDate>
    </item>
    <item>
      <title>[Kotlin] Kotlin 1.6 주요 변경점</title>
      <link>https://minddong.tistory.com/104</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Kotlin 1.6은 여러 새로운 기능과 개선 사항을 통해 개발자들에게 더욱 강력한 도구를 제공했습니다. 이번 포스트에서는 Kotlin 1.6의 주요 변경 사항을 자세히 살펴보겠습니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Kotlin 1.6의 주요 변경 사항&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. 안정적인 &lt;code&gt;when&lt;/code&gt; 문&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Kotlin 1.6에서는 &lt;code&gt;when&lt;/code&gt; 문에 대한 안정적인 기능이 도입되었습니다. 이제 &lt;code&gt;sealed&lt;/code&gt; 클래스나 &lt;code&gt;enum&lt;/code&gt; 타입을 사용할 때, 모든 가능한 경우를 처리하지 않으면 컴파일러가 경고를 제공합니다. 이는 코드의 안전성을 높이고, 모든 경우를 처리하도록 강제하여 유지보수를 용이하게 합니다.&lt;/p&gt;
&lt;pre class=&quot;kotlin&quot;&gt;&lt;code&gt;sealed class ContactPreference
object Email : ContactPreference()
object SMS : ContactPreference()

fun sendNotification(preference: ContactPreference) {
    when (preference) {
        Email -&amp;gt; println(&quot;Sending email&quot;)
        SMS -&amp;gt; println(&quot;Sending SMS&quot;)
        // 모든 경우를 처리하지 않으면 경고 발생
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. &lt;code&gt;suspend&lt;/code&gt; 함수의 상위 타입으로 사용&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Kotlin 1.6에서는 &lt;code&gt;suspend&lt;/code&gt; 함수 타입을 상위 타입으로 사용할 수 있게 되었습니다. 이는 코루틴을 사용하는 API 디자인을 더욱 유연하게 만들어 줍니다.&lt;/p&gt;
&lt;pre class=&quot;kotlin&quot;&gt;&lt;code&gt;interface SuspendFunction : suspend () -&amp;gt; Unit

class MySuspendFunction : SuspendFunction {
    override suspend fun invoke() {
        println(&quot;Executing suspend function&quot;)
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3. 타입 추론 개선&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Kotlin 1.6에서는 재귀 제네릭 타입에 대한 타입 추론이 개선되었습니다. 이는 빌더 API와 같은 패턴에서 더욱 강력한 타입 추론을 가능하게 합니다.&lt;/p&gt;
&lt;pre class=&quot;kotlin&quot;&gt;&lt;code&gt;fun &amp;lt;T&amp;gt; buildList(builderAction: MutableList&amp;lt;T&amp;gt;.() -&amp;gt; Unit): List&amp;lt;T&amp;gt; {
    val list = mutableListOf&amp;lt;T&amp;gt;()
    list.builderAction()
    return list
}

val myList = buildList {
    add(&quot;Hello&quot;)
    add(&quot;World&quot;)
}&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;4. 새로운 표준 라이브러리 함수&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Kotlin 1.6에서는 &lt;code&gt;readln()&lt;/code&gt;과 &lt;code&gt;readlnOrNull()&lt;/code&gt;과 같은 새로운 표준 입력 함수가 추가되었습니다. 이는 &lt;code&gt;!!&lt;/code&gt; 연산자를 사용하지 않고도 입력을 안전하게 처리할 수 있게 합니다.&lt;/p&gt;
&lt;pre class=&quot;kotlin&quot;&gt;&lt;code&gt;val input = readlnOrNull() ?: &quot;Default&quot;
println(&quot;Input: $input&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;5. 안정적인 Duration API&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Duration API가 안정화되어, 시간 관련 연산을 더욱 쉽게 수행할 수 있습니다. &lt;code&gt;Duration.toString()&lt;/code&gt;의 출력이 개선되었고, 문자열에서 Duration을 파싱하는 기능이 추가되었습니다.&lt;/p&gt;
&lt;pre class=&quot;lasso&quot;&gt;&lt;code&gt;val duration = Duration.parse(&quot;PT20.345S&quot;)
println(duration) // 20.345s&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;6. Kotlin/Native의 새로운 메모리 관리자&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Kotlin 1.6에서는 Kotlin/Native의 새로운 메모리 관리자가 도입되었습니다. 이는 스레드 간 객체 공유에 대한 기존 제한을 해제하고, 안전한 동시성 프로그래밍을 지원합니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;7. Kover: 코드 커버리지 플러그인&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Kotlin 1.6에서는 새로운 코드 커버리지 측정 도구인 Kover가 도입되었습니다. 이는 Kotlin/JVM 컴파일러로 빌드된 Kotlin 코드의 커버리지를 측정하는 데 유용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Kotlin 1.6은 이러한 다양한 기능과 개선 사항을 통해 개발자들에게 더 나은 개발 경험을 제공합니다. 특히 안정적인 &lt;code&gt;when&lt;/code&gt; 문과 새로운 메모리 관리자는 코드의 안전성과 효율성을 높여줍니다. Kotlin 1.6의 새로운 기능들을 프로젝트에 적용해 보시기 바랍니다!&lt;/p&gt;</description>
      <category>KOTLIN</category>
      <category>Kotlin</category>
      <category>코틀린</category>
      <author>민덕이</author>
      <guid isPermaLink="true">https://minddong.tistory.com/104</guid>
      <comments>https://minddong.tistory.com/104#entry104comment</comments>
      <pubDate>Thu, 3 Oct 2024 22:05:30 +0900</pubDate>
    </item>
    <item>
      <title>[Kotlin] Kotlin 1.5 주요 변경점</title>
      <link>https://minddong.tistory.com/103</link>
      <description>&lt;p&gt;Kotlin 1.5는 여러 새로운 기능과 개선 사항을 통해 개발자들에게 더욱 강력한 도구를 제공했습니다. 이번 포스트에서는 Kotlin 1.5의 주요 변경 사항을 자세히 살펴보겠습니다.&lt;/p&gt;
&lt;h2&gt;&lt;strong&gt;Kotlin 1.5의 주요 변경 사항&lt;/strong&gt;&lt;/h2&gt;
&lt;h3&gt;&lt;strong&gt;1. 안정적인 언사인드 정수 타입 (Stable Unsigned Integer Types)&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Kotlin 1.5에서는 언사인드 정수 타입이 안정화되었습니다. &lt;code&gt;UInt&lt;/code&gt;, &lt;code&gt;ULong&lt;/code&gt;, &lt;code&gt;UByte&lt;/code&gt;, &lt;code&gt;UShort&lt;/code&gt;와 같은 언사인드 정수 타입이 이제 안정적으로 사용 가능하며, 비음수 정수 연산에 유용합니다. 이러한 타입들은 배열, 범위, 프로그레션 등에서도 사용할 수 있습니다.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-kotlin&quot;&gt;val uInt: UInt = 42u
val uLong: ULong = 12345678901234567890uL&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;&lt;strong&gt;2. &lt;code&gt;java.nio.file.Path&lt;/code&gt; 확장 함수&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Kotlin 1.5에서는 &lt;code&gt;java.nio.file.Path&lt;/code&gt;에 대한 확장 함수가 추가되어, Kotlin 스타일로 비차단 Java IO를 사용할 수 있습니다. 이는 Kotlin에서 파일 경로를 보다 직관적으로 다룰 수 있게 합니다.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-kotlin&quot;&gt;import kotlin.io.path.*

val path = Path(&amp;quot;example.txt&amp;quot;)
val lines = path.readLines()&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;&lt;strong&gt;3. 로케일에 독립적인 문자열 대소문자 변환 (Locale-Agnostic Case Conversion)&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;기존의 &lt;code&gt;toUpperCase()&lt;/code&gt;와 &lt;code&gt;toLowerCase()&lt;/code&gt; 함수는 로케일에 민감했지만, 이제 로케일에 독립적인 &lt;code&gt;uppercase()&lt;/code&gt;와 &lt;code&gt;lowercase()&lt;/code&gt; 함수가 도입되었습니다. 이는 플랫폼 로케일 설정에 관계없이 일관된 결과를 제공합니다.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-kotlin&quot;&gt;val text = &amp;quot;kotlin&amp;quot;
println(text.uppercase()) // &amp;quot;KOTLIN&amp;quot;&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;&lt;strong&gt;4. &lt;code&gt;Char&lt;/code&gt;와 숫자 간의 변환 함수&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Kotlin 1.5에서는 &lt;code&gt;Char&lt;/code&gt;와 숫자 간의 변환을 위한 명확한 함수들이 추가되었습니다. 이는 코드의 가독성을 높이고, 변환 과정에서 발생할 수 있는 실수를 줄여줍니다.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-kotlin&quot;&gt;val charCode = &amp;#39;A&amp;#39;.code
val char = Char(65)&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;&lt;strong&gt;5. &lt;code&gt;String?.toBoolean()&lt;/code&gt;의 엄격한 버전&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;기존의 &lt;code&gt;String?.toBoolean()&lt;/code&gt; 함수는 문자열이 &amp;quot;true&amp;quot;일 때만 &lt;code&gt;true&lt;/code&gt;를 반환했지만, 이제 &lt;code&gt;toBooleanStrict()&lt;/code&gt;와 &lt;code&gt;toBooleanStrictOrNull()&lt;/code&gt; 함수가 추가되어 보다 엄격한 변환을 지원합니다. 이는 잘못된 입력을 방지하는 데 유용합니다.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-kotlin&quot;&gt;val isTrue = &amp;quot;true&amp;quot;.toBooleanStrictOrNull() // null 반환&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;&lt;strong&gt;6. 새로운 수학 연산: &lt;code&gt;floorDiv()&lt;/code&gt;와 &lt;code&gt;mod()&lt;/code&gt;&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Kotlin 1.5에서는 &lt;code&gt;floorDiv()&lt;/code&gt;와 &lt;code&gt;mod()&lt;/code&gt; 함수가 도입되어, 정수의 바닥 나눗셈과 모듈러 연산을 보다 직관적으로 수행할 수 있습니다.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-kotlin&quot;&gt;val result = 7.floorDiv(3) // 2
val modulus = 7.mod(3) // 1&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;&lt;strong&gt;7. 새로운 컬렉션 함수: &lt;code&gt;firstNotNullOf()&lt;/code&gt;와 &lt;code&gt;firstNotNullOfOrNull()&lt;/code&gt;&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Kotlin 1.5에서는 컬렉션에서 첫 번째로 널이 아닌 값을 찾는 &lt;code&gt;firstNotNullOf()&lt;/code&gt;와 &lt;code&gt;firstNotNullOfOrNull()&lt;/code&gt; 함수가 추가되었습니다. 이는 코드의 간결성과 효율성을 높입니다.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-kotlin&quot;&gt;val list = listOf(null, &amp;quot;Kotlin&amp;quot;, null)
val firstNonNull = list.firstNotNullOfOrNull { it }&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Kotlin 1.5는 이러한 다양한 기능과 개선 사항을 통해 개발자들에게 더 나은 개발 경험을 제공합니다. 특히 안정적인 언사인드 정수 타입과 로케일에 독립적인 문자열 대소문자 변환은 코드의 안정성을 높이고, 다양한 플랫폼에서의 개발을 더욱 효율적으로 만들어 줍니다. Kotlin 1.5의 새로운 기능들을 프로젝트에 적용해 보시기 바랍니다!&lt;/p&gt;</description>
      <category>Kotlin</category>
      <category>코틀린</category>
      <author>민덕이</author>
      <guid isPermaLink="true">https://minddong.tistory.com/103</guid>
      <comments>https://minddong.tistory.com/103#entry103comment</comments>
      <pubDate>Wed, 2 Oct 2024 22:05:29 +0900</pubDate>
    </item>
    <item>
      <title>[Kotlin] Kotlin 1.4 주요 변경점</title>
      <link>https://minddong.tistory.com/102</link>
      <description>&lt;p&gt;Kotlin 1.4는 품질과 성능에 중점을 두고 여러 혁신적인 기능과 개선 사항을 도입했습니다. 이번 포스트에서는 Kotlin 1.4의 주요 변경 사항을 자세히 살펴보겠습니다.&lt;/p&gt;
&lt;h2&gt;&lt;strong&gt;Kotlin 1.4의 주요 변경 사항&lt;/strong&gt;&lt;/h2&gt;
&lt;h3&gt;&lt;strong&gt;1. 새로운 컴파일러 백엔드 (IR Backend)&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Kotlin 1.4에서는 새로운 IR(중간 표현) 백엔드가 도입되었습니다. 이 백엔드는 더 나은 성능과 최적화를 제공하며, Kotlin/JS와 Kotlin/Native를 포함한 여러 플랫폼에서 일관된 컴파일러 인프라를 제공합니다. 이는 개발자들이 다양한 플랫폼에서 Kotlin을 더 효율적으로 사용할 수 있도록 돕습니다[3][5].&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;2. 품질과 성능 개선&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;이번 릴리스의 주요 초점은 전반적인 개발 경험을 개선하는 것이었습니다. IDE의 성능과 안정성이 크게 향상되었으며, 코틀린 코드를 작성하고 실행하는 과정이 더욱 매끄러워졌습니다. 이러한 개선은 개발자들이 더 생산적으로 작업할 수 있도록 지원합니다[2][6].&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;3. 코루틴 디버깅 지원&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Kotlin 1.4에서는 코루틴 디버깅이 개선되었습니다. 새로운 디버깅 기능을 통해 코루틴의 상태를 쉽게 추적할 수 있으며, 이는 비동기 코드의 디버깅을 크게 단순화합니다. 개발자들은 이제 더 복잡한 비동기 작업을 보다 쉽게 관리할 수 있습니다[6].&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;4. 트레일링 콤마 (Trailing Comma)&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Kotlin 1.4에서는 인수 및 매개변수 목록, &lt;code&gt;when&lt;/code&gt; 항목, 열거형에서 트레일링 콤마를 사용할 수 있게 되었습니다. 이는 코드의 가독성을 높이고, 항목을 추가하거나 제거할 때 발생할 수 있는 실수를 줄여줍니다[1].&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-kotlin&quot;&gt;fun printValues(
    first: String,
    second: String,
    third: String, // 트레일링 콤마 허용
) {
    println(&amp;quot;$first, $second, $third&amp;quot;)
}&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;&lt;strong&gt;5. 타입 추론 개선&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;타입 추론이 더욱 강력해졌으며, 이는 특히 제네릭 함수와 람다 표현식에서 유용합니다. 개발자들은 이제 더 적은 코드로 복잡한 타입을 처리할 수 있으며, 이는 코드의 간결성과 가독성을 높입니다[6].&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;6. 새로운 표준 라이브러리 함수&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Kotlin 1.4에서는 여러 새로운 표준 라이브러리 함수가 추가되었습니다. 이러한 함수들은 개발자들이 더욱 쉽게 다양한 작업을 수행할 수 있도록 돕습니다.&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;7. 실험적 API의 안정화&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Kotlin 1.4에서는 여러 실험적 API가 안정화되었습니다. 이는 개발자들이 새로운 기능을 안정적으로 사용할 수 있게 하여, 코드의 안정성을 높입니다[4].&lt;/p&gt;
&lt;p&gt;Kotlin 1.4는 이러한 다양한 기능과 개선 사항을 통해 개발자들에게 더 나은 개발 경험을 제공합니다. 특히 새로운 컴파일러 백엔드와 품질 및 성능 개선은 다양한 플랫폼에서의 개발을 더욱 효율적으로 만들어 줍니다. Kotlin 1.4의 새로운 기능들을 프로젝트에 적용해 보시기 바랍니다!&lt;/p&gt;</description>
      <category>KOTLIN</category>
      <category>Koltin</category>
      <category>코틀린</category>
      <author>민덕이</author>
      <guid isPermaLink="true">https://minddong.tistory.com/102</guid>
      <comments>https://minddong.tistory.com/102#entry102comment</comments>
      <pubDate>Tue, 1 Oct 2024 22:05:39 +0900</pubDate>
    </item>
    <item>
      <title>[Kotlin] Kotlin 1.3 주요 변경점</title>
      <link>https://minddong.tistory.com/101</link>
      <description>&lt;p&gt;Kotlin 1.3은 여러 혁신적인 기능과 개선 사항을 도입하여 개발자들에게 더욱 강력한 도구를 제공했습니다. 이번 포스트에서는 Kotlin 1.3의 주요 변경 사항을 자세히 살펴보겠습니다.&lt;/p&gt;
&lt;h2&gt;&lt;strong&gt;Kotlin 1.3의 주요 변경 사항&lt;/strong&gt;&lt;/h2&gt;
&lt;h3&gt;&lt;strong&gt;1. 코루틴 안정화 (Coroutines Stabilization)&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Kotlin 1.3에서 코루틴은 안정적인 기능으로 자리 잡았습니다. 코루틴은 비동기 프로그래밍을 단순화하고, 경량 스레드로서 일시 중단 및 재개가 가능합니다. 코루틴을 사용하면 복잡한 비동기 작업을 간결하게 표현할 수 있습니다.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-kotlin&quot;&gt;import kotlinx.coroutines.*

fun main() = runBlocking {
    launch {
        delay(1000L)
        println(&amp;quot;World!&amp;quot;)
    }
    println(&amp;quot;Hello,&amp;quot;)
}&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;&lt;strong&gt;2. 멀티플랫폼 프로젝트 (Multiplatform Projects)&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Kotlin 1.3에서는 멀티플랫폼 프로젝트 지원이 강화되었습니다. 이를 통해 JVM, JavaScript, Native 등 다양한 플랫폼 간에 코드를 재사용할 수 있습니다. 공통 모듈에는 플랫폼에 종속되지 않은 코드가 포함되고, 플랫폼 모듈에는 각 플랫폼에 맞는 구현이 포함됩니다.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-kotlin&quot;&gt;// 공통 코드
expect fun platformName(): String

// JVM 플랫폼 코드
actual fun platformName(): String = &amp;quot;JVM&amp;quot;&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;&lt;strong&gt;3. 새로운 &lt;code&gt;main&lt;/code&gt; 함수 형태&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Kotlin 1.3에서는 &lt;code&gt;main&lt;/code&gt; 함수가 인자를 받지 않는 형태로도 정의될 수 있습니다. 이는 커맨드라인 인자를 사용하지 않는 애플리케이션에 유용합니다.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-kotlin&quot;&gt;fun main() {
    println(&amp;quot;Hello, Kotlin 1.3!&amp;quot;)
}&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;&lt;strong&gt;4. &lt;code&gt;when&lt;/code&gt;의 주제 캡처 (Subject Capture in When)&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;when&lt;/code&gt; 구문에서 주제를 캡처하여 &lt;code&gt;when&lt;/code&gt; 블록 내에서만 사용할 수 있는 변수를 선언할 수 있습니다. 이는 코드의 간결성과 가독성을 높입니다.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-kotlin&quot;&gt;fun evaluate(input: Int): String {
    return when (val outcome = input % 3) {
        0 -&amp;gt; &amp;quot;Divisible by 3&amp;quot;
        1 -&amp;gt; &amp;quot;Remainder 1&amp;quot;
        else -&amp;gt; &amp;quot;Remainder 2&amp;quot;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;&lt;strong&gt;5. 랜덤 숫자 생성 (Random Number Generation)&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Kotlin 1.3에서는 플랫폼에 독립적인 랜덤 숫자 생성 기능이 추가되었습니다. &lt;code&gt;Random&lt;/code&gt; 클래스를 사용하여 다양한 랜덤 숫자를 생성할 수 있습니다.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-kotlin&quot;&gt;import kotlin.random.*

fun main() {
    val randomValue = Random.nextInt(0, 100)
    println(&amp;quot;Random value: $randomValue&amp;quot;)
}&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;&lt;strong&gt;6. 새로운 표준 라이브러리 함수&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Kotlin 1.3에서는 &lt;code&gt;kotlin.random&lt;/code&gt; 패키지와 같은 새로운 표준 라이브러리 함수가 추가되었습니다. 이는 다양한 확장 함수와 함께 제공되어 개발자들이 더욱 쉽게 코드를 작성할 수 있도록 돕습니다.&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;7. Kotlin/Native 및 Kotlin/JS 개선&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Kotlin 1.3에서는 Kotlin/Native와 Kotlin/JS의 기능이 크게 개선되었습니다. 이는 Kotlin을 다양한 플랫폼에서 사용할 수 있게 하여, 개발자들이 더욱 다양한 환경에서 Kotlin을 활용할 수 있도록 합니다.&lt;/p&gt;
&lt;p&gt;Kotlin 1.3은 이러한 다양한 기능과 개선 사항을 통해 개발자들에게 더 나은 개발 경험을 제공합니다. 특히 코루틴의 안정화와 멀티플랫폼 프로젝트 지원은 다양한 플랫폼에서의 코드 재사용을 가능하게 하여, 개발자들이 더욱 효율적으로 작업할 수 있도록 돕습니다. Kotlin 1.3의 새로운 기능들을 프로젝트에 적용해 보시기 바랍니다!&lt;/p&gt;</description>
      <category>KOTLIN</category>
      <category>Kotlin</category>
      <category>코틀린</category>
      <author>민덕이</author>
      <guid isPermaLink="true">https://minddong.tistory.com/101</guid>
      <comments>https://minddong.tistory.com/101#entry101comment</comments>
      <pubDate>Mon, 30 Sep 2024 22:05:48 +0900</pubDate>
    </item>
    <item>
      <title>[Kotlin] Kotlin 1.2 주요 변경점</title>
      <link>https://minddong.tistory.com/100</link>
      <description>&lt;p&gt;Kotlin 1.2는 여러 혁신적인 기능과 개선 사항을 도입하여 개발자들에게 더욱 강력한 도구를 제공했습니다. 이번 포스트에서는 Kotlin 1.2의 주요 변경 사항을 자세히 살펴보겠습니다.&lt;/p&gt;
&lt;h2&gt;&lt;strong&gt;Kotlin 1.2의 주요 변경 사항&lt;/strong&gt;&lt;/h2&gt;
&lt;h3&gt;&lt;strong&gt;1. 멀티플랫폼 프로젝트 (Multiplatform Projects)&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Kotlin 1.2에서는 멀티플랫폼 프로젝트에 대한 실험적 지원이 도입되었습니다. 이를 통해 JVM, JavaScript, Native 등 다양한 플랫폼 간에 코드를 재사용할 수 있습니다. 공통 모듈에는 플랫폼에 종속되지 않은 코드가 포함되고, 플랫폼 모듈에는 각 플랫폼에 맞는 구현이 포함됩니다.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-kotlin&quot;&gt;// 공통 코드
expect fun hello(world: String)

// JVM 플랫폼 코드
actual fun hello(world: String) {
    println(&amp;quot;Hello from JVM $world&amp;quot;)
}&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;&lt;strong&gt;2. 어노테이션에서 배열 리터럴 (Array Literals in Annotations)&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;이제 어노테이션에서 배열 인수를 &lt;code&gt;arrayOf&lt;/code&gt; 함수 대신 배열 리터럴 구문을 사용하여 전달할 수 있습니다.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-kotlin&quot;&gt;@CacheConfig(cacheNames = [&amp;quot;books&amp;quot;, &amp;quot;default&amp;quot;])
class BookRepositoryImpl&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;&lt;strong&gt;3. &lt;code&gt;lateinit&lt;/code&gt; 개선 (Lateinit Improvements)&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;lateinit&lt;/code&gt; 변수가 초기화되었는지 확인할 수 있는 새로운 reflection API가 추가되었습니다. 또한, &lt;code&gt;lateinit&lt;/code&gt; 수식어를 최상위 프로퍼티와 로컬 변수에서도 사용할 수 있게 되었습니다.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-kotlin&quot;&gt;lateinit var file: File

if (::file.isInitialized) {
    // 파일이 초기화되었을 때의 처리
}&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;&lt;strong&gt;4. 표준 라이브러리의 수학 연산 (Math Operations in Standard Library)&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Kotlin 1.2에서는 수학 연산을 위한 &lt;code&gt;kotlin.math&lt;/code&gt; 패키지가 추가되었습니다. 이 패키지는 삼각 함수, 지수 연산, 로그 함수 등을 포함합니다.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-kotlin&quot;&gt;import kotlin.math.*

val angle = 45.0
val result = cos(angle)&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;&lt;strong&gt;5. 스마트 캐스트 개선 (Smart Cast Improvements)&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;스마트 캐스트가 안전한 호출 표현식에도 적용되며, 람다에서 스마트 캐스트가 허용되는 경우가 늘어났습니다.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-kotlin&quot;&gt;val firstChar = (s as? CharSequence)?.firstOrNull()
if (firstChar != null) {
    // s는 CharSequence로 스마트 캐스트됨
}&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;&lt;strong&gt;6. &lt;code&gt;windowed&lt;/code&gt;, &lt;code&gt;chunked&lt;/code&gt;, &lt;code&gt;zipWithNext&lt;/code&gt; 함수&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;새로운 확장 함수들이 추가되어 리스트의 버퍼링, 슬라이딩 창, 연속 항목 쌍 처리 등의 기능을 제공합니다.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-kotlin&quot;&gt;val items = (1..9).toList()
val chunkedIntoLists = items.chunked(3)&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;&lt;strong&gt;7. &lt;code&gt;fill&lt;/code&gt;, &lt;code&gt;replaceAll&lt;/code&gt;, &lt;code&gt;shuffle&lt;/code&gt; 함수&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;리스트 조작을 위한 새로운 함수들이 추가되어 리스트의 요소를 쉽게 변경할 수 있습니다.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-kotlin&quot;&gt;val items = (1..5).toMutableList()
items.shuffle()
println(&amp;quot;Shuffled items: $items&amp;quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Kotlin 1.2는 이러한 다양한 기능과 개선 사항을 통해 개발자들에게 더 나은 개발 경험을 제공합니다. 특히 멀티플랫폼 프로젝트 지원은 다양한 플랫폼에서의 코드 재사용을 가능하게 하여, 개발자들이 더욱 효율적으로 작업할 수 있도록 돕습니다. Kotlin 1.2의 새로운 기능들을 프로젝트에 적용해 보시기 바랍니다!&lt;/p&gt;</description>
      <category>KOTLIN</category>
      <category>Koltin</category>
      <category>코틀린</category>
      <author>민덕이</author>
      <guid isPermaLink="true">https://minddong.tistory.com/100</guid>
      <comments>https://minddong.tistory.com/100#entry100comment</comments>
      <pubDate>Sun, 29 Sep 2024 22:05:18 +0900</pubDate>
    </item>
  </channel>
</rss>