본문 바로가기
2학년 2학기/모바일 소프트웨어 - 코틀린

Class(2) - Object

by kkkkk1023 2024. 10. 11.

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