0Pricing
Kotlin Academy · 강의

인덱스와 호출

get, set, invoke

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

인덱스 연산자

operator fun get을 정의하면 obj[i]와 같은 대괄호 구문으로 값을 읽을 수 있습니다.

class Row(val cells: List<String>) {
    operator fun get(i: Int) = cells[i]
}

fun main() {
    val r = Row(listOf("a", "b", "c"))
    println(r[1])
}

set으로 작성하기

operator fun set을 사용하면 obj[i] = value와 같이 할당할 수 있습니다. 마지막 매개변수는 값입니다.

class Grid {
    private val data = IntArray(3)
    operator fun get(i: Int) = data[i]
    operator fun set(i: Int, value: Int) { data[i] = value }
}

fun main() {
    val g = Grid()
    g[0] = 42
    println(g[0])
}

여러 인수를 사용하는 인덱싱

get과 set은 여러 인덱스를 받을 수 있으므로 행렬에 적합합니다.

class Matrix {
    private val d = Array(2) { IntArray(2) }
    operator fun get(r: Int, c: Int) = d[r][c]
    operator fun set(r: Int, c: Int, v: Int) { d[r][c] = v }
}

fun main() {
    val m = Matrix()
    m[1, 1] = 9
    println(m[1, 1])
}

Int가 아닌 키로 인덱싱하기

인덱스 매개변수에는 어떤 타입이든 사용할 수 있으므로 맵과 같은 접근을 구현할 수 있습니다.

class Settings {
    private val map = mutableMapOf<String, String>()
    operator fun get(key: String) = map[key]
    operator fun set(key: String, value: String) { map[key] = value }
}

fun main() {
    val s = Settings()
    s["theme"] = "dark"
    println(s["theme"])
}

호출 연산자

operator fun invoke를 정의하면 obj()와 같이 인스턴스를 함수처럼 호출할 수 있습니다.

class Greeter(val name: String) {
    operator fun invoke() = "Hello, $name"
}

fun main() {
    val g = Greeter("Sam")
    println(g())
}

인수를 사용하는 invoke

invoke는 매개변수를 받을 수 있으므로 객체가 매개변수를 받는 함수처럼 동작하게 만들 수 있습니다.

class Multiplier(val factor: Int) {
    operator fun invoke(x: Int) = x * factor
}

fun main() {
    val triple = Multiplier(3)
    println(triple(5))
}

상태를 가진 호출 가능 객체

객체가 상태를 보유하므로 invoke를 사용하면 구성 가능한 함수와 같은 객체를 만들 수 있습니다.

class Accumulator {
    var total = 0
    operator fun invoke(n: Int) { total += n }
}

fun main() {
    val acc = Accumulator()
    acc(5)
    acc(10)
    println(acc.total)
}

여러 invoke 오버로드

매개변수가 다른 여러 invoke 오버로드를 선언할 수 있습니다.

class Printer {
    operator fun invoke(s: String) = println(s)
    operator fun invoke(n: Int) = println("num: $n")
}

fun main() {
    val p = Printer()
    p("hi")
    p(7)
}

표현식에서의 인덱스

인덱스 접근은 다른 연산과 자연스럽게 결합됩니다.

class Scores(private val list: List<Int>) {
    operator fun get(i: Int) = list[i]
}

fun main() {
    val s = Scores(listOf(10, 20, 30))
    println(s[0] + s[2])
}

get과 invoke 결합하기

타입이 인덱싱과 호출을 모두 지원하면 표현력이 풍부한 API를 만들 수 있습니다.

class Lookup(private val data: Map<String, Int>) {
    operator fun get(key: String) = data[key]
    operator fun invoke() = data.size
}

fun main() {
    val l = Lookup(mapOf("a" to 1))
    println(l["a"])
    println(l())
}

표준 라이브러리의 활용 방식

목록의 list[i]와 맵의 map[key]는 바로 이러한 연산자입니다. 여러분의 타입도 그만큼 자연스럽게 사용할 수 있습니다.

fun main() {
    val list = listOf(1, 2, 3)
    val map = mapOf("x" to 9)
    println(list[0])
    println(map["x"])
}

빠른 확인

인덱스와 invoke에 대한 이해도를 확인해 보세요.

복습

인덱스와 invoke를 배웠습니다:

  • get은 obj[i]를 뒷받침하고, set은 obj[i] = v를 뒷받침합니다.
  • 인덱스 연산자는 여러 키와 Int가 아닌 키를 지원합니다.
  • invoke를 사용하면 인스턴스를 인수가 있거나 없는 함수처럼 호출할 수 있습니다.
  • 표준 컬렉션은 바로 이러한 연산자를 사용합니다.
class Box {
    private val m = mutableMapOf<String, Int>()
    operator fun get(k: String) = m[k]
    operator fun set(k: String, v: Int) { m[k] = v }
}

fun main() {
    val b = Box()
    b["x"] = 5
    println(b["x"])
}

자주 묻는 질문

“인덱스와 호출” 강의는 무료인가요?

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

“인덱스와 호출”에서 뭘 배우나요?

get, set, invoke 브라우저에서 직접 실행하는 실습 코드로 Kotlin Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

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

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

“인덱스와 호출” 강의는 얼마나 걸리나요?

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

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

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

이 강의의 모든 강의

  1. 연산자 함수
  2. 비교 연산자
  3. 인덱스와 호출
  4. 모범 사례
← Kotlin Academy(으)로 돌아가기