코틀린

15. 클래스 - Object

mks160615 2025. 2. 6. 13:43

싱글톤 패턴

생성자가 여러 차례 호출이 되더라도 실제로 생성되는 객체는 하나를 리턴하는 디자인 패턴이다.

 

디자인 패턴에 대해 궁금하다면 아래의 페이지를 확인하길 바란다.

 

디자인 패턴

객체 지향 프로그래밍 설계를 할 때 자주 발생하는 문제들을 피하기 위해 사용되는 패턴. 여러 사람이 협업해서 개발

namu.wiki

 

코틀린에서는 이 싱글톤 패턴을 처리하기 위한 고유의 문법 object라는 개념을 가지고 있다.

 

오브젝트

아래의 코드를 바탕으로 오브젝트를 설명하겠다.

object Sole{
    val number = 1
    fun sayHello() : String{
        return "Hello Object"
    }
}

 

오브젝트를 사용하면 클래스와 달리 따로 선언할 필요가 사라진다. 메인 함수를 보자.

// 오브젝트
println(Sole.number) // 1
println(Sole.sayHello()) // Hello Object

// 일반 클래스
val notSole = NotSole()
println(notSole.number) // 1
println(notSole.sayHello()) // Hello Object

오브젝트는 바로 사용이 가능하나 일반 클래스는 따로 선언이 필요하다.

그렇다면 오브젝트만 사용하면 될까? 안타깝게도 하나의 패키지에는 하나의 오브젝트만 사용할 수 있다. 이 아쉬움을 약간이라도 달래주는 것이 있으니 바로 Companion Object이다.

 

Companion Object

Companion Object는 일반 클래스에서 사용이 가능하다. (아쉽게도 object에서는 사용할 수 없다.)

class Meal{
    
    val lunch = "Kimbap"
    
    companion object {
        val dinner = "Steak"
        fun showDiet(menu : String) : String{
            return "Today\'s dinner is $menu"
        }
    }
}

 

Companion Object에 한해서 클래스를 따로 선언하지 않고도 내부의 객체를 자유롭게 사용할 수 있다.

// Companion Object
println(Meal.showDiet(Meal.dinner)) // Today's dinner is Steak

 

Meal  클래스의 변수 lunch는 사용하려면 클래스 선언이 필수이다.

val lunch = Meal()
println(Meal.showDiet(lunch.lunch)) // Today's dinner is Kimbap

 

Companion Object 역시 한 개의 클래스에서 단 한 번만 사용할 수 있다.

 

 

GitHub - KrillM/Kotlin_Again: init project

init project. Contribute to KrillM/Kotlin_Again development by creating an account on GitHub.

github.com

 

'코틀린' 카테고리의 다른 글

17. Null  (0) 2025.02.08
16. 인터페이스  (0) 2025.02.06
14. 추상 클래스, 데이터 클래스  (0) 2025.02.05
13. 클래스 - 상속  (0) 2025.01.29
12. 클래스 - 기본  (1) 2025.01.29