Object란?
싱글톤 객체를 정의하거나 익명 객체를 생성하며, 동반 객체를 통해 클래스이 정적 멤버처럼 사용되는 특수한 객체를 만드는 키워드이다.
즉, object를 사용해서 3개의 기능을 얻을 수 있다. 싱글톤, 동반 객체, 무명 객체 이렇게 3개의 기능이 있다.
1. object - singleton
클래스는 원래 한개로 여러개의 객체를 만들 수 있다. 하지만 class 키워드 대신에, object를 사용하면 객체가 한개만 만들 수 있다.
object Button {
var clicked = 0
fun onClick() {
clicked++
}
}
이렇게 생성할 수 있다. object를 사용할 때는 객체가 하나만 생성이 되기 때문에 따로 객체를 생성하지 않고 사용할 수 있다.
object Button {
var clicked = 0
fun onClick() {
clicked++
}
}
fun main(){
Button.onClick()
}
object는 클래스 상속, 인터페이스 상속 모두가 가능하다.
object에 인터페이스 상속
class Person(val name: String, val age: Int)
object NameCompare : Comparator<Person> {
override fun compare(p1: Person, p2: Person): Int {
return p1.name.compareTo(p2.name)
}
}
fun main(){
val kim = Person("Kim", 18)
val park = Person("Park", 18)
println(NameCompare.compare(kim, park)) //-5
}
이렇게 오브젝트는 인터페이스를 상속받아서 해당 인터페이스의 메소드를 구현해서 객체를 생성하지 않고 바로 사용할 수 있다.
2. object - 동반 객체
동반객체란 바깥 클래스의 객체를 생성하지 않고도 사용할 수 있다.
class Counter {
companion object {
private var counter = 0
fun increment() {
counter++
}
fun getCount() = counter
}
}
fun main(){
Counter.increment()
println(Counter.getCount()) // 1
}
이러한 점을 이용해서 바깥 클래스의 private 생성자를 호출 할 수도 있다.
class AddUser private constructor(val name: String) {
companion object {
fun addName(name: String): AddUser = AddUser(name)
}
}
fun main(){
val User = AddUser.addName("kim")
println(User.name) //kim
}
이렇게 object를 이용해서 private 생성자를 외부에서 호출하여 값을 넣을 수 있다.
3. object - 무명 객체
interface Clickable {
fun setButtonListener()
}
fun main(){
val myButton = object : Clickable {
override fun setButtonListener() {
print("Button clicked")
}
}
myButton.setButtonListener() //Button clicked
}
이렇게 object를 활용해서 이름 없는 객체인 무명객체를 선언해서 사용할 수 있다.
'2학년 2학기 > 모바일 소프트웨어 - 코틀린' 카테고리의 다른 글
Class(2) - data class (0) | 2024.10.11 |
---|---|
Class(2) - 클래스의 기본 메소드 정의 (0) | 2024.10.11 |
익명 함수 (1) | 2024.10.11 |
확장함수(Extension Funtions) (1) | 2024.10.11 |
람다식(2) - it, _ 사용 (0) | 2024.10.10 |