[자바 개발자를 위한 코틀린 입문] object 키워드 다루기
by dev.hardy코틀린에서 object 키워드를 다루는 방법
인프런에서 최태현 지식 공유자
님의자바 개발자를 위한 코틀린 입문
을 수강하며 정리한 내용 입니다.
하단에 강의 링크 있습니다.
static 함수와 변수
코틀린은 static이 라는게 없다. → companion object
class Person private constructor(
var name: String,
var age: Int,
){
companion object{
const val MIN_AGE = 1 // (1)
fun newBaby(name: String): Person{
return Person(name, MIN_AGE)
}
}
}
static
: 클래스가 인스턴스화 될 때 새로운 값이 복제되는게 아니라 정적으로 인스턴스끼리의 값을 공유companion object
: 클래스와 동행하는 유일한 오브젝트- 하나의 객체로 간주된다.
- 이름을 붙일 수도 있다.
- 인터페이스를 구현할 수도 있다.
(1) 저기에 const를 안붙이게 되면 런타임시에 변수가 할당 된다. 그러나 const를 붙이면 컴파일 시에 변수가 할당 된다.
const
: 진짜 상수에 붙이기 위한 용도. 기본 타입과 String에 붙일 수 있음
interface Log{
fun log()
}
class Person private constructor(
var name: String,
var age: Int,
){
companion object Factory : Log{ // (1)
private const val MIN_AGE = 1
fun newBaby(name: String): Person{
return Person(name, MIN_AGE)
}
override fun log() { // (2)
println("구현할 수 있어용")
}
}
}
(1) companion object는 이름을 붙일 수도 있다.
(2) 인터페이스를 구현할 수도 있다.
→ 하나의 객체로 간주되기 때문이다.
자바에서 코틀린의 companion object를 사용하려면 @JvmStatic
을 붙여야 한다.
싱글톤
싱글톤: 단 하나의 인스턴스만을 갖는 클래스
코틀린에서 싱글톤을 만드는 방법은 되게 간단하다.
→ object
만 붙여주면 된다.
object Singleton
- 싱글톤은 유일한 하나의 인스턴스이므로 바로 이름으로 접근한다.
fun main() {
println(Singleton.a) // 0
}
object Singleton{
var a: Int = 0
}
익명 클래스
익명클래스: 특정 인터페이스나 클래스를 상속받은 구현체를 일회성으로 사용할 때 쓰는 클래스
fun main() {
moveSomething(object : Movable { // (1)
override fun move() {
print("움직임")
}
override fun fly() {
println("날음")
}
})
}
private fun moveSomething(movable: Movable) {
movable.move()
movable.fly()
}
interface Movable {
fun move()
fun fly()
}
(1) 자바에서는 new 타입 이름() {} / 코틀린에서는 object : 타입이름
그리고 중괄호
Reference:
자바 개발자를 위한 코틀린 입문
블로그의 정보
개발자 하디 : 기록저장소
dev.hardy