객체는 오직 하나의 인스턴스만 존재하는 클래스는 object 키워드로 정의하며 객체라고 부릅니다. 객체에는 여러 종류가 있습니다. 이는 기존의 java와 큰 차이가 있는 부분이므로 이번 포스팅에서 정리해보려고 합니다.
객체
오직 하나의 인스턴스만 존재하는 클래스로 object라는 키워드로 정의하며 객체라고 부릅니다. 이러한 객체는 선언과 동시에 인스턴스가 생성됩니다.
object Application {
val name = "My Application"
override fun toString() = name
}
내포 객체
특정 클래스의 모든 인스턴스가 공유하는 객체를 의미합니다. 팩토리 디자인 패턴이 그 예라고 할 수 있습니다.
class Application private constructor(val name: String){
object Factory {
fun create(args: Array<String>): Application? {
val name = args.firstOrNull() ?:return null
return Application(name)
}
}
override fun toString() = name
}
fun main () {
val app = Application.Factory.create(arrayOf("My Application"))
print(app)
}
동반 객체
앞의 예제에서는 Factory라는 내부 객체명을 매번 명시해야합니다. 하지만 companion object로 선언하면 이를 생략할 수 있습니다.
class Application private constructor(val name: String) {
companion object {
fun create(args: Array<String>): Application? {
val name = args.firstOrNull() ?: return null
return Application(name)
}
}
override fun toString() = name
}
fun main () {
val a = Application.create(arrayOf("My Application"))
println(a)
}
익명 객체
익명의 객체를 프로그램 흐름에 생성하고자 할 때도 object를 사용합니다. 기존의 object와는 약간 개념이 다른데, 클래스를 정의하고 사용하기 복잡하니, 이를 간단하게 하기 위해 사용하는 것이라고 보면 됩니다.
fun main () {
fun midPoint(xRange: IntRange, yRange: IntRange) = object {
val x = (xRange.first + yRange.last) / 2
val y = (yRange.first + yRange.last) / 2
}
val midA = midPoint(1..3, 3..7)
println("${midA.x}, ${midA.y}")
}
익명 객체를 선언하는 함수를 함수 밖으로 빼면 필드를 인식할 수 없습니다. 따라서 밖에서 사용하려면 private을 붙여줘야 합니다.
'프로그래밍 언어 > Kotlin' 카테고리의 다른 글
[Kotlin] 프로퍼티 (0) | 2022.10.11 |
---|---|
[Kotlin] null 정리 (0) | 2022.10.11 |
[Kotlin] 코틀린 클래스, 생성자 (0) | 2022.10.09 |
[Kotlin] 코틀린 함수 (1) | 2022.10.08 |
[Kotlin] 코틀린 문자열과 배열 (1) | 2022.10.08 |