[Kotlin] object키워드

백현균·2023년 4월 16일

1. static함수, 변수

class Person private constructor (
	var name:String,
    var age:Int
){
	// 자바에서의 static과 동일한 역할을 하는 블록
	companion object{
    	const var MIN_AGE = 1
        fun newBaby(name:String):Person{
        	return Person(name, MIN_AGE)
        }
    }
}

1) static

클래스가 인스턴스화될 때 새로운 값이 복제되는 개념이 아닌 정적으로 
인스턴스끼리의 값을 공유

2) companion object

클래스와 동일하는 유일한 오브젝트 정보, static처럼 여러개의 인스턴스가
존재하더라도 companion object안에 선언된 것들은 유일한 값들임

3) const

- 자바와 같이 상수를 의미하는 키워드이고, 다른 키워드와는 다르게 
컴파일 시에 변수가 할당 됨
- 기본타입과 String타입에만 사용할 수 있음

4) companion object에 유틸성 함수를 넣어도 되지만, 최상단 파일 활용을 추천

5) 자바에서 접근 방법

* @jvmStatic을 붙이면 static 함수 호출처럼 사용 가능

void main(){
	Person.Companion.newBaby("ret");
    
    // newBaby @jvmStatic을 붙여주면 바로 호출 가능
    Person.newBaby("aaaa");
}

2. 싱글톤

1) object형태로 만들면 된다

object Singleton{
    var a:Int = 0
}

3. 익명클래스

1) 정의

특정 인터페이스나 클래스를 상속받은 구현체를 일회성으로 사용할 때 사용되는
클래스

2) 예시

interface Movalble{
	void move()
    void fly()
}

fum main(){
	// 자바에서 moveSomthing(new Movalble())형태와 동일
    // 코틀린에서는object를 이용하여 익명클래스 생성
	moveSomthing(object : Movable{
    	override fun move(){
        	println("move")
        }
        override fun fly(){
        	println("fly")
        }
    })
}

private fun moveSomething(movalble:Movable){
	movalble.move()
    movalble.fly()
}

4. 정리

1) 자바의 static같은 형태를 코틀린에서 만들 때 companion object를 사용

2) companion object도 하나으 객체로 간주 되어 이름을 붙일수도있고, 상속을 받을 수도 있다

3) 코틀린에서 싱글톤을 만들 때 object키워드를 사용

4) 익명클래스를 만들 때 object : 타입을 사용

0개의 댓글