Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- Navigation
- 알고리즘
- Coroutine
- Android
- activity
- kotlin
- Behavior
- hilt
- Algorithm
- room
- notification
- onLayout
- onMeasure
- 알림
- lifecycle
- sqlite
- View
- 안드로이드
- AppBarLayout
- CoordinatorLayout
- 백준
- BOJ
- recyclerview
- HTTP
- 코틀린
- LiveData
- CustomView
- ViewModel
- CollapsingToolbarLayout
- DataBinding
Archives
- Today
- Total
개발일지
Kotlin in A..Z (22) - 내부 클래스 본문
- 내부 클래스
내부 클래스를 사용하는 이유는 독립적인 클래스로 정의하기 모호한 경우나 다른 클래스에서 잘 사용하지 않고 내부에서만 사용하는 클래스를 외부에서 접근할 필요가 없을 때 사용한다. 너무 무분별하게 사용하면 코드의 의존성이 커지기 때문에 조심해야 한다.
- 중첩 클래스 (Nested Class)
기본적으로 자바의 정적(static)클래스 처럼 다뤄진다.
- 바깥 클래스를 접근할 수 없다.
- 바깥 클래스를 인스턴스 할 필요 없이 바로 인스턴스화 할 수 있다.
- 바깥 클래스에서 중첩 클래스를 바로 접근할 수 없다. -> 인스턴스화 해야 함
코드
class Parent {
val value: Int = 0
fun func() {
println("Parent")
}
fun nestedAction() {
// Nested의 메서드를 바로 접근할 수 없음
Nested.action()
// Nested를 인스턴스화를 하고 접근
Nested().action()
}
class Nested {
fun action() {
// 바깥 클래스에 바로 접근할 수 없음.
func()
// 바깥 클래스에 바로 접근할 수 없음.
println(value)
}
}
}
fun main() {
// Parent를 인스턴스화 할 필요없이 바로 Nested를 인스턴스화 할 수 있음.
val nested = Parent.Nested()
nested.action()
}
- 이너 클래스 (Inner Class)
inner 키워드를 사용한다
바깥 클래스의 멤버들에 접근할 수 있다. (private도 접근할 수 있음)
코드
class Parent {
var value: Int = 0
inner class InnerClass {
fun action() {
println(value)
}
fun setValue(value: Int) {
this@Parent.value = value
}
}
}
fun main() {
val parent = Parent()
val inner1 = parent.InnerClass()
inner1.action()
parent.value = 10
inner1.action()
inner1.setValue(20)
println(parent.value)
inner1.action()
}
결과
0
10
20
20
- 지역 클래스
특정 블록에서만 유효하는 클래스이다.
코드
fun main() {
class LocalClass(val x:Int, y:Int) {
}
val pos1 = LocalClass(1, 1)
val pos2 = LocalClass(2, 2)
}
'Kotlin (코틀린)' 카테고리의 다른 글
Kotlin in A..Z (24) - 연산자 오버라이딩 (0) | 2020.07.18 |
---|---|
Kotlin in A..Z (23) - 열거형 클래스, 실드 클래스 (0) | 2020.07.17 |
Kotlin in A..Z (21) - 데이터 클래스 (0) | 2020.07.17 |
Kotlin in A..Z (20) - 추상 클래스 (0) | 2020.07.17 |
Kotlin in A..Z (19) - 인터페이스 (0) | 2020.07.17 |
Comments