본문 바로가기
Java & Kotlin/Kotlin

[Kotlin] object를 다루는 방법

by heekng 2022. 7. 6.
반응형

Object를 다루는 방법

static 함수와 변수

Java

public class JavaPerson {

    private static final int MIN_AGE = 1;

    public static JavaPerson newBaby(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;
    }

}

Kotlin

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

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

        override fun log() {
            println("나는 person 클래스의 동행 객체입니다.")
        }
    }

}
  • 코틀린은 자바의 static 대신 compaion object를 사용한다.
    • static: 클래스가 인스턴스화 될 때 새로운 값이 복제되는게 아니라 정적으로 인스턴스끼리의 값을 공유
    • companion object: 클래스와 동행하는 유일한 오프젝트
  • const의 유무: const를 사용하게 되면 컴파일시에 변수가 할당된다.
    • 진짜 상수에 붙이기 위한 용도이다.
    • 기본타입과 String에만 사용할 수 있다.
  • companion object(동반객체)도 하나의 객체로 간주된다.
    • 때문에 이름을 붙잉ㄹ 수도 있고, interface를 구현할 수도 있다.
  • companion object에 유틸성 함수를 넣어도 되지만, 최상단 파일에 작성해 사용하는것을 추천한다.
  • 자바에서 코틀린의 companion object를 사용하고 싶다면?
    • 이름이 없다면 타입.Companion.이름
    • 이름이 있다면 타입.CompaionObject이름.이름
    • 사용할 변수 또는 함수에 @JvmStatic을 작성한 후 타입.이름

싱글톤

Java

public class JavaSingleton {

    private static final JavaSingleton INSTANCE = new JavaSingleton();

    private JavaSingleton() { }

    public static JavaSingleton getInstance() {
        return INSTANCE;
    }

}

Kotlin

object Singleton {
    var a: Int = 0
}
  • 코틀린에서 싱글톤은 정말 간단하게도 object 키워드만 붙여주면 끝난다.

익명 클래스

Kotlin

fun main() {
    moveSomething(object : Moveable {
        override fun move() {
            println("move")
        }

        override fun fly() {
            println("fly")
        }
    })
}

private fun moveSomething(moveable: Moveable) {
    moveable.move()
    moveable.fly()
}
  • 자바에서 익명 클래스는 특정 인터페이스나 클래스를 상속받은 구현체를 일회성으로 사용할 때 쓰는 클래스이다.
  • 자바에서는 new 타입이름()으로 사용하지만
  • 코틀린에서는 object : 타입이름으로 사용한다.
반응형