본문 바로가기
Kotlin

[코틀린] Companion Object, object 선언

by Sky Titan 2020. 9. 19.
728x90

Companion Object

  • 코틀린에서는 static 키워드를 사용할 수 없는 대신, 정적 변수를 선언할 수 있도록 Companion Object를 제공한다.
  • companion object { 정적으로 선언할 변수, 함수들 } 

class P{

    companion object{
        var age : Int = 10 //정적 변수

        fun printAge() //정적 함수
        {
            println(age)
        }
    }
}
fun main() {

    P.printAge()
}

 

object와 싱글톤

  • object로 선언된 객체는 프로퍼티, 메서드에 객체 생성 없이 접근이 가능하다.
  • 단일 인스턴스를 생성하기 때문에 싱글톤 패턴을 구현하는데 사용된다.
  • 주 생성자, 부 생성자를 사용할 수 없다. (대신 init은 사용가능)

object P{

    var name = "park"
    init {

    }
}
fun main() {

    println(P.name)
}

 

object 표현식

  • 익명 내부 클래스 형태를 만들 수 있다.
  • 하위 클래스를 따로 선언하지 않고 클래스의 메서드를 오버라이딩 할 수 있다.
  • object 선언과 달리 싱글톤은 아니다.


open class P{

    var name = "park"

    open fun printName() = println(name)
}
fun main() {

    var p1 = P()
    var p2 = object : P(){
        override fun printName() {
            println("수정 출력 $name")
        }
    }

    var p3 = object { //상위 클래스, 인터페이스 없는 경우
        var name = "kim"
        fun printName(){
            println("상위 클래스 없음 $name")
        }
    }

    p1.printName()
    p2.printName()
    p3.printName()

    /* 결과
    park
    수정 출력 park
    상위 클래스 없음 kim
     */
}

 

728x90

'Kotlin' 카테고리의 다른 글

[코틀린] 실드 클래스 (Sealed Class)  (0) 2020.09.22
[코틀린] 데이터 클래스  (0) 2020.09.21
[코틀린] 위임 (Delegation)  (0) 2020.09.19
[코틀린] 프로퍼티의 오버라이딩  (0) 2020.09.19
[코틀린] 주 생성자  (0) 2020.09.19

댓글