BackEnd/Kotlin
12강. 코틀린에서 object 키워드를 다루는 방법
hanseom
2024. 3. 7. 22:30
반응형
- static 함수와 변수
- 싱글톤
- 익명 클래스
static 함수와 변수
다음은 static 함수와 변수를 가지는 JavaPerson 클래스입니다.
public class JavaPerson {
private static final int MIN_AGE = 1; // static 변수
private final String name;
private final int age;
private JavaPerson(String name, int age) {
this.name = name;
this.age = age;
}
public static JavaPerson newBaby(String name) { // static 함수
return new JavaPerson(name, MIN_AGE);
}
}
Kotlin으로 구현하면 다음과 같습니다.
class Person private constructor(
private val name: String,
private val age: Int,
) {
companion object { // Java의 static 변수와 함수처럼 사용됩니다.
private const val MIN_AGE = 0 // 컴파일 시 변수가 할당됩니다.
// private val MIN_AGE = 0 // 런타임 시 변수가 할당됩니다.
fun newBaby(name: String): Person {
return Person(name, MIN_AGE)
}
}
}
- Kotlin에서는 static 대신 companion object를 사용합니다.
- const: 진짜 상수에 붙이기 위한 용도입니다. 기본 타입과 String에 붙일 수 있습니다.
companion object, 즉 동반객체도 하나의 객체로 간주됩니다. 그러므로 이름을 붙일 수도 있고, interface를 구현할 수도 있습니다.
interface Log {
fun log()
}
companion object Factory : Log { // Java의 static 변수와 함수처럼 사용됩니다.
private const val MIN_AGE = 0 // 컴파일 시 변수가 할당됩니다.
// private val MIN_AGE = 0 // 런타임 시 변수가 할당됩니다.
fun newBaby(name: String): Person {
return Person(name, MIN_AGE)
}
override fun log() {
println("나는 Person 클래스의 동행객체 Factory 입니다.")
}
}
Java에서 Kotlin의 companion object를 사용하려면 @JvmStatic을 붙여줘야 합니다.
Person person = Person.newBaby("Kotlin");
companion object Factory : Log { // Java의 static 변수와 함수처럼 사용됩니다.
private const val MIN_AGE = 0 // 컴파일 시 변수가 할당됩니다.
// private val MIN_AGE = 0 // 런타임 시 변수가 할당됩니다.
@JvmStatic
fun newBaby(name: String): Person {
return Person(name, MIN_AGE)
}
override fun log() {
println("나는 Person 클래스의 동행객체 Factory 입니다.")
}
}
만약 companion object 이름이 있으면, 이름을 사용하면 됩니다. 기본 이름은 Companion입니다.
Person person = Person.Factory.newBaby("Kotlin");
// 이름이 없는 경우, 기본 이름을 사용할 수 있습니다.
Person person = Person.Companion.newbaby("Kotlin");
싱글톤
싱글톤이란 단 하나의 인스턴스만을 갖는 클래스입니다.
다음은 Java의 Singleton 클래스 입니다.
public class JavaSingleton {
private static final JavaSingleton INSTANCE = new JavaSingleton();
private JavaSingleton() {
}
public static JavaSingleton getInstance() {
return INSTANCE;
}
}
Kotlin에서 싱글톤은 object 키워드만 붙여주면 됩니다.
fun main() {
println(Singleton.a)
Singleton.a += 10
println(Singleton.a)
}
object Singleton { // 싱글톤
var a: Int = 0
}
익명 클래스
익명 클래스란 특정 인터페이스나 클래스를 상속받은 구현체를 일회성으로 사용할 때 쓰는 클래스입니다.
다음은 익명클래스를 사용한 Java 코드입니다.
public interface Movable {
void move();
void fly();
}
public static void main(String[] args) {
moveSomething(new Movable() {
@Override
public void move() {
System.out.println("Move!!");
}
@Override
public void fly() {
System.out.println("Fly!!");
}
});
}
private static void moveSomething(Movable movable) {
movable.move();
movable.fly();
}
Kotlin으로 구현하면 다음과 같습니다.
fun main() {
moveSomething(object : Movable {
override fun move() {
println("Move!!")
}
override fun fly() {
println("Fly!!")
}
})
}
private fun moveSomething(movable: Movable) {
movable.move()
movable.fly()
}
- 익명 클래스라는 개념 자체는 동일합니다.
- Java에서는 new 타입이름(), Kotlin에서는 object : 타입이름을 사용합니다.
감사합니다.
반응형