중첩 클래스
클래스 안의 클래스
중첩 클래스은(는) 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 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.