0Pricing
Kotlin Academy · 강의

중첩 클래스

클래스 안의 클래스

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

클래스 안의 클래스

코틀린에서는 한 클래스 안에 다른 클래스를 선언할 수 있습니다. 기본적으로 이러한 클래스는 중첩 클래스이며 바깥 인스턴스에 대한 참조를 보유하지 않습니다.

class Outer {
    class Nested {
        fun hello() = "Hi from Nested"
    }
}

fun main() {
    println(Outer.Nested().hello())
}

중첩 인스턴스 만들기

중첩 클래스는 독립적이므로 바깥 인스턴스 없이 바깥 클래스 이름을 통해 생성합니다. 예를 들면 Outer.Nested()와 같습니다.

class Computer {
    class Cpu {
        val cores = 8
    }
}

fun main() {
    val cpu = Computer.Cpu()
    println(cpu.cores)
}

바깥 멤버에 접근할 수 없음

중첩 클래스에는 바깥 참조가 없으므로 바깥 클래스의 인스턴스 멤버를 볼 수 없습니다. 이름 아래에 범위가 지정된 최상위 클래스처럼 동작합니다.

class Bank {
    val name = "ACME"
    class Branch {
        fun describe() = "A branch"
    }
}

fun main() {
    println(Bank.Branch().describe())
}

중첩하는 이유

중첩은 논리적 그룹화를 표현합니다. 내부 타입이 개념적으로 바깥 타입에 속하도록 하여 코드 구성과 이름 공간을 개선합니다.

class Http {
    class Request(val url: String)
}

fun main() {
    val r = Http.Request("/home")
    println(r.url)
}

속성이 있는 중첩 클래스

중첩 클래스도 일반 클래스이므로 생성자, 속성, 메서드를 가질 수 있습니다.

class Garage {
    class Car(val model: String) {
        fun honk() = "$model: beep"
    }
}

fun main() {
    println(Garage.Car("Tesla").honk())
}

동반 객체 또는 정적과 유사한 멤버에 접근하기

Java의 정적 중첩 클래스와 비슷하게 바깥 클래스 이름을 사용하면 어디서든 중첩 클래스를 참조할 수 있습니다.

class Config {
    class Defaults {
        val timeout = 30
    }
}

fun main() {
    println(Config.Defaults().timeout)
}

여러 중첩 클래스

바깥 클래스에는 관련된 타입을 함께 묶기 위해 여러 중첩 클래스를 포함할 수 있습니다.

class Shapes {
    class Circle(val r: Int)
    class Square(val side: Int)
}

fun main() {
    println(Shapes.Circle(5).r)
    println(Shapes.Square(4).side)
}

중첩 클래스 안의 중첩 클래스

두 단계 이상 깊게 중첩할 수도 있지만, 지나치게 깊은 중첩은 가독성을 떨어뜨릴 수 있습니다.

class A {
    class B {
        class C {
            val value = 42
        }
    }
}

fun main() {
    println(A.B.C().value)
}

중첩 클래스와 최상위 클래스 비교

기능적으로 중첩 클래스는 최상위 클래스와 같습니다. 유일한 차이는 완전 수식 이름입니다. 중첩 관계가 코드를 더 명확하게 해 줄 때 중첩을 사용하십시오.

class Order {
    class Item(val price: Int)
}

fun main() {
    val total = Order.Item(10).price + Order.Item(5).price
    println(total)
}

실용적인 그룹화

Builder의 결과 타입을 소유자 아래에 그룹화하면 자연스럽게 읽힙니다.

class Parser {
    class Result(val ok: Boolean, val message: String)

    fun parse(text: String) = Result(text.isNotEmpty(), "parsed")
}

fun main() {
    val res = Parser().parse("data")
    println("${res.ok} ${res.message}")
}

기억해야 할 핵심 규칙

클래스가 바깥 클래스 참조를 보유하도록 만드는 키워드는 inner입니다. 이 키워드가 없으면 중첩 클래스는 정적 클래스와 비슷하게 동작하며 서로 독립적입니다.

class Box {
    class Lid
}

fun main() {
    println(Box.Lid() != null)
}

빠른 확인

중첩 클래스에 대한 이해도를 확인해 보십시오.

복습

중첩 클래스에 대해 다음을 배웠습니다.

  • 다른 클래스 안에 선언하며, 기본값은 class(중첩 클래스)입니다.
  • 바깥 인스턴스에 대한 참조가 없으므로 바깥 멤버에 접근할 수 없습니다.
  • 바깥 클래스 이름을 사용해 Outer.Nested()와 같이 생성합니다.
  • 논리적으로 그룹화하고 이름 공간을 구성하는 데 유용합니다.
class Outer {
    class Nested { val x = 1 }
}

fun main() {
    println(Outer.Nested().x)
}

자주 묻는 질문

“중첩 클래스” 강의는 무료인가요?

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

“중첩 클래스”에서 뭘 배우나요?

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

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

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

“중첩 클래스” 강의는 얼마나 걸리나요?

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

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

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

이 강의의 모든 강의

  1. 중첩 클래스
  2. 내부 클래스
  3. 익명 객체
  4. 지역 클래스
← Kotlin Academy(으)로 돌아가기