본문 바로가기

코틀린에서의 OOP - 4. object

@silver-w2025. 10. 7. 17:46
  1. static 함수와 변수
  2. 싱글톤
  3. 익명 클래스
 - 자바의 static 변수와 함수를 만드려면, 코틀린에서는 companion object를 사용해야 한다.
 - companion object 도 하나의 객체로 취급되므로 이름을 붙일 수 있고 상속을 받을 수 있다.
 - Kotlin에서의 싱글톤은 object 키워드 하나면 된다.
 - 익명 클래스 구조는 (object : Type {})이다.

더보기

1 . static 함수와 변수

① companion object : static 역할

private val MIN_AGE: Int = 1

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

    companion object {
        fun newBaby(name: String): Person {
          return Person(name, MIN_AGE)
        }
    }

}

↓ 『 companion object {} 』를 자바 코드로 변환

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

※ companion object? 클래스와 동행하는 유일한 오브젝트
 - 자바의 static은 클래스가 인스턴스화 될 때 새로운 값이 복제되는게 아니라 정적으로 인스턴스끼리의 값을 공유한다.

 

② const vs val 변수

private val MIN_AGE = 1
private const MIN_AGE = 0

 val 은 런타임시에 값이 할당되는 반면, const는 컴파일시에 변수가 할당된다.

 

 ③ companion object (동반객체)도 하나의 객체로 간주된다. 그러므로 이름할당, interface 구현이 가능하다.

// Log : interface
companion object Factory : Log {
    fun newBaby(name: String): Person {
      return Person(name, MIN_AGE)
    }

    override fun log() {
        println("create companion Factory")
    }
}

 

④ companion 객체에 유틸성 함수를 넣어도 되지만, 최상단 파일을 활용하는 것을 추천

⑤ companion 객체를 자바에서 사용하는 방법 : @JvmStatic 사용 (3번 항목)
 1) companion 이름도 명시 안하고 @JVMStatic도 사용하지 않는 경우

Kotlin JAVA


 2) companion 이름 명시하는 경우 ▶ 자바에서 기본 이름이던 Companion 사용안

Kotlin JAVA


 3) @JVMStatic 을 선언하는 경우 ▶ 자바에서 정적메서드에 접근하는 것처럼 바로 호출 가

Kotlin JAVA
 


2 . 싱글톤

※ 자바에서의 싱글톤

public class JavaSingletone {
    private static final JavaSingletone instance = new JavaSingletone();

    private JavaSingletone() {}

    public static JavaSingletone getInstance() {
        return instance;
    }
}


※ 코틀린에서의 싱글톤 : 앞에 object만 붙여주면 된다.

object Singleton {
    var a = 0
}

fun main() {
    Singleton.a += 10
}

 

3 . 익명클래스

- (new Type {}) 의 자바문법을 코틀린에서는 (object : Type {})으로 사용

private interface Movable {
    fun move()
    fun fly()
}

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

fun main() {
    moveSth(object : Movable {
        override fun move() {
            println("move")
        }

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


 


 

※ (intellij) 코틀린 코드 자바로 변환
tool > Kotlin > Show Kotlin Bytecode


출처 : https://inf.run/sMPv5

silver-w
@silver-w :: silver-w 님의 블로그

silver-w 님의 블로그 입니다.

공감하셨다면 ❤️ 구독도 환영합니다! 🤗

목차