본문 바로가기
Kotlin

Object 키워드

by oncerun 2023. 1. 12.
반응형

companion object

 

자바의 클래스를 코틀린으로 변경해 보자.

 

 

public class JavaPerson {

  private static final int MIN_AGE = 1;

  public static JavaPerson of(String name) {
    return new JavaPerson(name, MIN_AGE);
  }

  private String name;

  private int age;

  private JavaPerson(String name, int age) {
    this.name = name;
    this.age = age;
  }

}
class Person private constructor(
    var name: String,
    var age : Int,
) {
    



}

 

코틀린에는 static 키워드가 존재하지 않는다. 대신 companion object라는 블록으로 감싸 static 한 변수와 함수를 선언한다.

companion object {
    private const val MIN_AGE = 1
    fun of(name: String): Person {
        return Person(name, MIN_AGE)
    }
}

companion object는 클래스와 동행하는 유일한 오브젝트라고 생각하자. 

 

그렇다면 const라는 키워드는 무엇일까? 

 

보통 val이라는 키워드를 사용하면 런타임에 값이 할당된다. 하지만 const라는 키워드를 사용하게 되면 컴파일 시 값이 할당된다.

 

또한 companion object는 하나의 객체이다. 그렇기 때문에 이름을 부여할 수도 있고, interface를 구현할 수도 있다.

 

companion object Factory : Log{
    private const val MIN_AGE = 1
    fun of(name: String): Person {
        return Person(name, MIN_AGE)
    }

    override fun log() {
        TODO("Not yet implemented")
    }
}

 

이름이 없다면 다음과 같이 companion 오브젝트에 접근할 수 있다.

 

Person.Companion.of()

 

즉 이름을 사용하지 않는다면 Companion이라는 이름이 생략된 것이다. 자바처럼 사용하기 위해선 @JvmStatic이라는 어노테이션을 붙여줘야 한다.

 

 

이 경우는 Factory라는 이름을 부여했기 때문에 다음과 같이 코드를 작성할 수 있다.

Person.Factory.of("name");

 

 

싱글톤.

public class JavaSingleton {

  private static final JavaSingleton INSTANCE = new JavaSingleton();

  private JavaSingleton() { }

  public static JavaSingleton getInstance() {
    return INSTANCE;
  }

}

 

코틀린에서는 다음과 같이 구현한다.


object Singleton{
    var a: Int = 0;
}

 

 

익명 클래스

 

익명 클래스라는 건 클래스를 상속받은 구현체나 인터페이스를  일회성으로 사용할 때 쓰는 클래스이다.

 

fun main() {
    moveSomething(object : Movable{
        override fun move() {
            TODO("Not yet implemented")
        }

        override fun fly() {
            TODO("Not yet implemented")
        }
    })
}


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

 

익명클래스라는 개념은 동일하지만 new Movable로 익명클래스를 만들던 자바와 달리 object : Movable {}을 통해 

익명 클래스를 구현한다.

 

반응형

'Kotlin' 카테고리의 다른 글

함수  (0) 2023.01.15
중첩 클래스, 다양한 클래스  (0) 2023.01.15
접근 제어  (0) 2023.01.02
상속  (0) 2023.01.01
클래스  (0) 2022.12.05

댓글