[Kotlin] Static Variable / Method

sundays·2022년 11월 22일
0

kotlin

목록 보기
9/19

정적 변수와 메서드

  • 자바에서 static 변수 또는 객체에 해당하는 companion object 로 사용
  • 고정적 메모리로 객체 생성 없이 사용한다
  • 코틀린에서 자바의 static 사용
  • 자바에서 코틀린 컴패니언 객체 사용
    • @JvmStatic 어노테이션 표기법을 사용
    • 코틀린 최상위 함수는 클래스가 없으나 자바와 연동시에는 내부적으로 Kt접미사가 붙은 클래스를 자동 생성
    • 명시적으로 지정시 코드 최상단에 @file:JvmName("ClassName") 사용

최상위 함수 (package-level function)

  • 클래스 없이 만들었던 최상위 함수들은 객체 생성 없이도 어디서든 실행
  • 최상위 함수는 결국 자바에서 static final 로 선언된 함수이다

obejct 와 싱글톤

상속 불가 클래스에서 내용이 변경된 객체를 생성할때

  • 자바의 경우 익명 내부 클래스를 사용해 새로운 클래스를 생성한다
  • 코틀린에서는 object 표현식이나 object 선언으로 이 경우를 더 쉽게 처리한다

object 키워드

object OCustomer {
    var name = "Kildong"
    fun greeting() = println("Hello World!")
    val HOBBY = Hobby("Basketball")
    init {
        println("Init!")
    }
}

class Hobby(val name:String)

fun main() {
	Ocustomer.greeting()
    Ocustomer.name = "Dooly"
    println("name=${OCustomer.name}")
    println(Ocustomer.Hobby.name)
    ...
}
  • 접근 시점에 객체가 생성된다
  • 생성자 호출을 하지 않으므로 object 선언에는 주/부 생성자를 사용할 수 없다
  • 자바에서는 OCustomer.INSTANCE.getName() 형태로 접근

object 표현식

open class Superman() {
	fun work() = println("Talking Photos")
    fun talk() = println("Talking with people")
    open fun fly() = println("Flying int the air")
}

fun main() {
	val pretendedMan = object: Superman() { // object 표현식으로 재정의
    	override fun fly() = println("I'm not a real superman, I can't fly")
    }
    pretendedMan.work()
    pretendedMan.talk()
    pretendedMan.fly()
}
  • object 선언과 달리 이름이 없으며 싱글턴이 아님
  • 사용 될 때마다 새로운 인스턴스가 생성
  • 이름이 없는 익명 내부 클래스(임시)로 불리는 형태를 object 표현식으로 만들수 있다

Reference

  • 코틀린 프로그래밍 - 황영덕
profile
develop life

0개의 댓글