Kotlin에서 class와 object 키워드의 용도는 비슷하지만 전혀 다른 역할로 사용되고 있습니다.
class는 클래스를 정의하는 경우 사용하며, object는 싱글턴 패턴이 적용되어 객체가 한개만 생성됩니다.
object 키워드 단 하나로 싱글턴 생성이 가능하며 보일러플레이트(boilerplate)를 작성하지 않아도 되어
많은 문법 오류와, 수정 범위를 줄여줍니다. 그리고 object 키워드는 익명 객체를 구현할때도 사용됩니다.
Object 특징
- object 객체는 주생성자, 부생성자 모두 사용 불가
- object는 상속 시 부모가 될순 없지만 자녀로서 상속을 받을 수 있습니다.
- Java에서 Kotlin의 object를 사용할때는 {클래스}.INSTANCE.{함수 or 변수명} 으로 사용하면 된다.
예1) Navigation.INSTANCE.printMyName()
예2) Navigation.INSTANCE.name
Object 선언 및 호출 예제
//아래와 같이 object를 생성하며 클래스 선언과 동시에 객체가 생성됩니다.
object User {
val name :String = "choi"
fun printMyName() {
println(name)
}
}
//Singleton인 User는 외부에서 아래와 같이 호출합니다.
User.printMyName()
Object 익명 객체 구현 예제
//interface 등록
interface Navigation {
fun showNetworkError()
}
//익명객체 생성
val navigation: Navigation = object : Navigation {
override fun showNetworkError() {
println("네트워크 에러 발생")
}
}
//익명객체 실행
fun main(args: Array<String>) {
navigation.showNetworkError()
}
중첩 object 구현 예제
import kotlin.Comparator
data class User(val id: Int, val name: String) {
//object를 중첩으로 사용
object UserComparator : Comparator<User> {
override fun compare(o1: User, o2: User): Int {
return o1.id.compareTo(o2.id)
}
}
}
fun main(args: Array<String>) {
val userList = listOf(
User(1024, "choi"),
User(1023, "kim"),
User(1025, "Lee")
)
//UserComparator 중첩을 사용해 정렬
println(userList.sortedWith(User.UserComparator))
}
Companion Object란?
- 어떤 클래스의 모든 인스턴스가 공유하는 객체를 만들고 싶을 때 사용하며, 클래스당 1개만 가질 수 있다.
- companion Object는 이름을 가질수 있다.
companion object Constant {
const val MAX_LEVEL:Int = 100
}
- companion Object는 상속을 받을 수 있다.
companion object: Comparator {
override fun compare(o1:Int, o2:Int){
return o1.compare(o2)
}
}
[Kotlin] Data Class (데이터 클래스) (0) | 2021.09.21 |
---|---|
[Kotlin] 표준함수 (0) | 2020.12.06 |
[Kotlin] 문자열 (0) | 2020.12.05 |
[Kotlin] 익명 함수와 함수 타입 (1) | 2020.12.05 |
[Kotlin] 함수(Function) (0) | 2020.12.04 |