컴퓨터 언어/코틀린

[Kotlin] 코틀린 오브젝트 싱글톤 패턴 object

훈츠 2020. 2. 15. 06:16
반응형

안녕하세요. 훈츠 입니다. 오늘은 오브젝트 object 에 대해 이야기 해 보겠습니다. 여러 인스턴스를 생성할 필요 없이 하나의 객체만으로 공통적인 속성과 함수를 사용해야 할때는 class 가 아닌 object로 선언하여 사용 할수 있습니다. 

오브젝트 Object 

  • 클래스 대신 object 라는 키워드를 사용합니다. 
  • 생성자는 허용하지 않습니다. 
  • 싱글톤 패턴 : Singleton Pattern
싱글톤 패턴 : 클래스의 인스턴스를 단하나만 만들어 사용하도록 하는 코딩 아키텍쳐 패턴
object Calculator{
    fun add(a:Int,b:Int) = a + b
    fun sub(a:Int,b:Int) = a - b
    fun multiply(a:Int,b:Int) = a * b
    fun divide(a:Int,b:Int) = a / b
}

fun main() {
    var value= Calculator.add(3,5)
    println(value)

}
Calculator 라는 오브젝트는 위와 같이 인스턴스 생성없이 한번 사용된 이후에는 프로그램이 종료되기 이전까지 코드 전체에서 공용으로 사용될수 있습니다. 

Compainon object : 컴패니언 오브젝트

클래스 안에 만드는 공용 속성 및 함수를 이용해야 할때 사용 합니다. 기존 언어의 static 멤버와 비슷 합니다. 클래스 내부에서 별도의 영역에 고정적으로 존재하여 인스턴스를 생성하지 않아도 공용으로 사용가능한 속성이나 함수 입니다. 

fun main() {
    var cal= Comupter()  //인스턴스 생성
    cal.enter(3,4,"add") //다음과 같이 내부적으로 이용 
    cal.enter(4,3,"mul")
    val result = Comupter.Calculator.add(8,4) // 외부적 이용도 가능
    println(result)
}
//클래스 안에 Companion object 
class Comupter(){

    fun enter(a:Int,b:Int,cal:String){
        var result = when(cal){
            "add" -> add(a,b)
            "sub" -> sub(a,b)
            "mul" -> multiply(a,b)
            "div" -> divide(a,b)
            else -> "enter calculate"
        }
        println(result)
    }

    companion object Calculator{
        fun add(a:Int,b:Int) = a + b
        fun sub(a:Int,b:Int) = a - b
        fun multiply(a:Int,b:Int) = a * b
        fun divide(a:Int,b:Int) = a / b
    }
}

 

반응형