본문 바로가기
Blog/TIL

2025-02-11 (화)

by 코젼 2025. 2. 11.
728x90
반응형

📌 TIL (Today I Learned) - Kotlin 문법 총정리 & 코루틴 실행 방법

🚀 오늘 배운 점

  1. Kotlin 기본 문법을 총 정리하면서 주요 개념을 다시 한번 확실히 다졌다.
  2. 코루틴을 main 함수에서 실행하는 방법을 배웠고, runBlockingCoroutineScope.launch의 차이점을 이해했다.
  3. 안드로이드에서 UI 스레드에서 실행하려면 Dispatchers.Main을 사용해야 함을 알게 됐다.

오늘은 Kotlin의 주요 문법을 정리하고, 추가로 코루틴을 main 함수에서 실행하는 방법을 배웠다.

✅ 1. Kotlin 기본 문법 정리

🔹 변수와 상수

  • val: 변경 불가능한 값 (Immutable)
  • var: 변경 가능한 값 (Mutable)
  • const val: 컴파일 타임 상수 (탑 레벨에서 사용)
    val a = 10
    const val b = 20 // 컴파일 타임 상수
    

fun main() {
var i: Int = 10
var name: String = "코틀린"
i = 20 // 재대입 가능
}


🔹 형변환 (`.to~~`)
```kotlin
fun main() {
    var i = 10
    var l = 20L
    l = i.toLong()
    i = l.toInt()
}

🔹 String 템플릿

fun main() {
    val name = "코틀린"
    println("현재 배우고 있는 언어는 $name 입니다.")
    println("현재 배우고 있는 언어는 ${name + 10} 입니다.") // 연산 가능
}

🔹 조건문 (if, when)

val i = 5
val result = when {
    i > 10 -> "10 보다 크다"
    i > 5 -> "5 보다 크다"
    else -> "!!!!"
}

🔹 반복문

for (i in 0..3) {
    println(i)
}

🔹 리스트와 배열

val list = listOf(1, 2, 3) // 변경 불가
val mutableList = mutableListOf(1, 2, 3) // 변경 가능
mutableList.add(4)

🔹 예외 처리

try {
    println(list[5])
} catch (e: Exception) {
    println(e.message)
}

🔹 Null 처리 (?, !!, ?.let)

var name: String? = null
name?.let {
    println("이름: $it") // null이 아닐 때만 실행
}

🔹 함수 정의

fun sum(a: Int, b: Int) = a + b
fun sumWithDefault(a: Int, b: Int, c: Int = 0) = a + b + c

🔹 클래스와 데이터 클래스

data class Person(
    private val name: String,
    var age: Int
)

🔹 상속과 인터페이스

interface Drawable {
    fun draw()
}

abstract class Animal {
    open fun move() { println("이동") }
}

class Cat : Animal(), Drawable {
    override fun move() { println("살금살금") }
    override fun draw() { println("그리기") }
}

🔹 제네릭

class Box<T>(var value: T)
val box = Box(10)

🔹 고차 함수

fun myFunc(callback: () -> Unit) {
    println("함수 시작")
    callback()
    println("함수 끝")
}
myFunc { println("콜백 함수 실행!") }

✅ 2. 코루틴 실행 방법 정리

오늘 질문한 코루틴을 main 함수에서 실행하는 방법에 대해 정리하면:

🔹 runBlocking 사용 (블로킹 방식)

import kotlinx.coroutines.runBlocking

fun main() = runBlocking {
    myFunc { println("함수 호출") }
}

suspend fun myFunc(callback: () -> Unit) {
    println("함수 시작")
    callback()
    println("함수 끝")
}

📌 runBlocking메인 스레드가 끝나지 않고 기다려줌.

🔹 CoroutineScope.launch 사용 (비동기 실행)

import kotlinx.coroutines.*

fun main() {
    val scope = CoroutineScope(Dispatchers.Default)
    scope.launch {
        myFunc { println("함수 호출") }
    }
    Thread.sleep(1000) // 메인 스레드가 종료되지 않도록 대기
}

📌 Dispatchers.Main을 사용하면 안드로이드 UI 스레드에서 실행 가능.

👉 앞으로 코루틴을 사용할 때 적절한 방식(runBlocking vs launch)을 선택하는 것이 중요하겠다! 🚀

728x90
반응형

'Blog > TIL' 카테고리의 다른 글

2025-02-13 (목)  (2) 2025.02.13
2025-02-12 (수)  (2) 2025.02.12
2025-02-10 (월)  (0) 2025.02.10
2025-02-06 (목)  (2) 2025.02.06
2025-02-05 (수)  (0) 2025.02.05

댓글