0Pricing
Kotlin Academy · 강의

apply와 also

구성하고 부수 효과를 적용합니다

apply와 also은(는) CoddyKit의 무료 Kotlin Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Kotlin Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Kotlin Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

객체 구성하기

apply와 also는 람다 결과가 아니라 객체 자체를 반환하는 스코프 함수입니다. 따라서 객체 구성과 호출 연결에 적합합니다.

apply 함수

apply는 객체를 this로 사용하는 블록을 실행한 다음 객체를 반환합니다. 객체를 생성한 후 초기화할 때 사용하는 대표적인 도구입니다.

fun main() {
    val builder = StringBuilder().apply {
        append("Hello")
        append(", ")
        append("World")
    }
    println(builder.toString())
}

apply가 객체를 반환하는 이유

apply는 수신 객체를 반환하므로, 구성한 객체를 변수에 바로 할당할 수 있습니다.

data class Person(var name: String = "", var age: Int = 0)

fun main() {
    val p = Person().apply {
        name = "Alice"
        age = 30
    }
    println(p)
}

apply는 this를 사용합니다

apply 내부에서는 객체가 수신 객체이므로 접두사 없이 객체의 속성에 직접 접근할 수 있습니다.

data class Config(var host: String = "", var port: Int = 0)

fun main() {
    val config = Config().apply {
        host = "localhost"
        port = 8080
    }
    println("${config.host}:${config.port}")
}

also 함수

also는 객체를 it으로 사용하는 블록을 실행하고 객체를 반환합니다. 객체를 변경하지 않는 로그 기록이나 검증 같은 부수 효과를 수행할 때 사용합니다.

fun main() {
    val numbers = mutableListOf(1, 2, 3)
    numbers
        .also { println("Before: $it") }
        .add(4)
    println("After: $numbers")
}

also는 it을 사용합니다

also는 객체를 it으로 노출하므로, 바깥쪽 this를 계속 참조하거나 참조 대상을 명시적으로 유지하고 싶을 때 편리합니다.

fun main() {
    val value = 42
        .also { println("Logging value: $it") }
    println(value)
}

apply와 also 비교

차이는 run과 let의 차이와 비슷합니다.

  • apply는 this를 사용하며 속성을 구성할 때 가장 적합합니다.
  • also는 it을 사용하며 객체에 부수 효과를 적용할 때 가장 적합합니다.

두 함수 모두 원래 객체를 반환합니다.

data class Box(var size: Int = 0)

fun main() {
    val box = Box()
        .apply { size = 5 }
        .also { println("Created box with size ${it.size}") }
    println(box)
}

apply와 also 연결하기

두 함수 모두 객체를 반환하므로, 먼저 구성한 다음 자연스러운 파이프라인에서 부수 효과를 수행하도록 연결할 수 있습니다.

data class Account(var owner: String = "", var balance: Int = 0)

fun main() {
    val account = Account()
        .apply { owner = "Sam" }
        .apply { balance = 100 }
        .also { println("New account: $it") }
    println(account.balance)
}

검증에 사용하는 also

also를 사용하면 흐름을 끊지 않고 호출 연결 중간에 확인 작업을 삽입할 수 있습니다.

fun main() {
    val result = listOf(1, 2, 3, 4)
        .filter { it % 2 == 0 }
        .also { check(it.isNotEmpty()) { "No even numbers" } }
    println(result)
}

객체 반환으로 파이프라인 구성하기

apply와 also의 공통된 특징은 항상 시작할 때의 동일한 객체를 돌려주므로 호출 연결을 절대 중단하지 않는다는 점입니다.

fun main() {
    val text = StringBuilder()
        .apply { append("a") }
        .also { it.append("b") }
        .apply { append("c") }
    println(text)
}

apply와 also 중 선택하기

객체를 초기화하거나 객체 자체의 멤버를 사용해 변경할 때는 apply를 사용합니다. 로그 기록, 디버깅, 검증처럼 객체를 사용하지만 구성하지는 않는 작업을 수행할 때는 also를 사용합니다.

빠른 확인

apply와 also는 어떤 값을 반환하나요?

복습

객체를 반환하는 두 스코프 함수를 배웠습니다.

  • apply는 객체를 구성할 때 this를 사용합니다.
  • also는 객체에 부수 효과를 적용할 때 it을 사용합니다.

두 함수 모두 객체를 반환하므로 깔끔하게 호출을 연결할 수 있습니다. 다음에는 with로 작업을 묶는 방법을 배웁니다.

자주 묻는 질문

“apply와 also” 강의는 무료인가요?

네 — “apply와 also” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Kotlin Academy 강의 전체를 잠금 해제할 수 있습니다. Kotlin Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“apply와 also”에서 뭘 배우나요?

구성하고 부수 효과를 적용합니다 브라우저에서 직접 실행하는 실습 코드로 Kotlin Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Kotlin Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Kotlin Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.

“apply와 also” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Kotlin Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Kotlin Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. let과 run
  2. apply와 also
  3. with
  4. 올바른 방법 선택하기
← Kotlin Academy(으)로 돌아가기