인프런에서 제공하고 있는 강의를 보고 정리한 글입니다.
static 함수와 변수
class Person private constructor(
var name: String,
var name: Int,
) {
// static 이 코틀린에서는 없다. static 대신 사용한다.
companion object {
private const val MIN_AGE = 1 // 확인
fun newBaby(name: String) : Person {
return Person(name, MIN_AGE)
}
}
}
- static : 클래스가 인스턴스화 될 때 새로운 값이 복제되는 것이 아닌 정적으로 인스턴스끼리의 값을 공유함.
- companion object : 클래스와 동행하는 유일한 오브젝트. companion object 도 하나의 객체로 간주되어서, 이름을 붙일 수도 있고, interface 를 구현할 수도 있다.
const
을 붙이면 컴파일 시 변수가 할당된다. 진짜 상수에 붙이기 위한 용도. 기본 타입과 String 에 붙일 수 있다.
자바에서 코틀린의 static field, static function 을 사용하고 싶을 때는 다음과 같이 사용한다.
// 1. 이름이 없는 경우
// In kotlin,
class Person private constructor(
var name: String,
var age: Int,
) {
companion object {
private cosnt val MIN_AGE = 1
fun newBaby(name:String): Person {
return Person(name, MIN_AGE)
}
}
}
// In Java
public class JavaMain {
pupblic static void main(String[] args) {
Person.Companion.newBaby("ABC") // Companion 직접 명시
}
}
// 2. @JvmStatic Annotation 붙이기
// In kotlin,
@JvmStatic
class Person private constructor(
var name: String,
var age: Int,
) {
companion object {
private cosnt val MIN_AGE = 1
fun newBaby(name:String): Person {
return Person(name, MIN_AGE)
}
}
}
// In Java
public class JavaMain {
pupblic static void main(String[] args) {
Person.newBaby("ABC") // Companion 직접 명시
}
}
// 3. 이름이 있을 때는 이름으로 접근 가능
Java 에서 Kotlin companion object 에 접근하고자 하는데, 이름이 없을 때는 @JvmStatic
으로 접근한다.
싱글톤
object Singleton
만 하면 된다… 쉽다…
object Singleton {
var a: Int = 0
}
fun main() {
println(Singleton.a)
}
익명 클래스
특정 인터페이스나 클래스를 상속받은 구현체를 일회성으로 사용하기 위한 클래스
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의 static 변수 및 함수를 만드려면 Kotlin 에서는
companion object
키워드를 사용한다. - companion object 도 하나의 객체로 간주되므로, 이름/다른 타입 상속이 가능하다.
- Kotlin 에서 싱글톤 클래스를 만드려면
object
키워드를 사용한다. - Kotlin 에서 익명 클래스를 만드려면,
object : 타입
을 사용한다.
'[ Kotlin ]' 카테고리의 다른 글
코틀린에서 다양한 클래스를 다루는 방법 - 14강 (0) | 2024.08.28 |
---|---|
코틀린에서 중첩 클래스를 다루는 방법 - 13강 (0) | 2024.08.28 |
코틀린에서 접근 제어를 다루는 방법 - 11강 (2) | 2024.08.28 |
코틀린에서 상속을 다루는 방법 - 10강 (1) | 2024.08.28 |
코틀린에서 클래스를 다루는 방법 - 9강 (0) | 2024.08.23 |