728x90
반응형
1. 객체 선언
프로그램 전체에서 공유할 수 있는 하나뿐인 객체를 만드는 방법이다.
코틀린에서는 자바에서 사용하던 싱글톤 패턴 코드를 사용하지 않고도 object 키워드를 사용하면 싱글톤으로 생성할 수 있다.
클래스를 선언하듯이 객체를 선언하면 식별자로 객체에 바로 접근이 가능하다.
object Person {
var name: String = ""
var age: Int = 0
fun print(){
println(name)
println(age)
}
}
fun main() {
// 식별자 Person으로 객체에 바로 접근 가능
Person.name = "Singleton"
Person.age = 45
Person.print()
// Person은 타입 이름이기도 하기 때문에 아래와 같은 코드도 가능
// 앞의 Person은 타입으로서의 Person, 뒤의 Person은 표현식으로서의 Person이다.
val person: Person = Person
}
2. 동반자 객체
동반자 객체란? 클래스 안에 포함되는 이름 없는 객체이다.
어떤 클래스의 모든 인스턴스가 공유하는 객체를 만들고 싶을 때 사용한다.
(코틀린에는 static 키워드가 존재하지 않아 static의 효과를 얻고 싶으면 동반자 객체를 사용해야 한다)
동반자 객체를 정의할 때는 이름 없이 companion object라고만 적는다.
동반자 객체는 자신이 속한 클래스의 이름으로 접근할 수 있다.
ex) Person이라는 식별자는 Person 클래스의 동반자 객체로 인식
동반자 객체는 클래스당 한 개만 존재한다.
어떤 클래스 안에 동반자 객체를 정의해놓으면 Companion이라는 식별자가 자동으로 생성된다.
ex) Person.create()는 Person.Companion.create()로도 호출할 수 있다.
class Person private constructor() {
companion object { // 동반자 객체 정의
/* 해당 멤버 함수를 통해서만 Person 객체를 생성할 수 있도록 하기 위해
생성자의 접근지정자를 private로 지정 */
fun create(): Person { // Person 인스턴스를 생성하는 멤버 함수
countCreated += 1 // 생성한 인스턴스 갯수를 셈
return Person()
}
var countCreated = 0
private set // 외부에서 조작하지 못하게 private로 지정
}
}
fun main() {
val a = Person.create()
val b = Person.create()
println(Person.countCreated)
}
728x90
반응형
'TIL > Kotlin' 카테고리의 다른 글
[TIL/Kotlin] 코틀린 고급문법_Nullable 리시버, 동반자 객체의 확장 함수, 확장 함수의 리시버 타입이 상속 관계에 있을 때 참조 변수를 따른다 (0) | 2023.05.17 |
---|---|
[TIL/Kotlin] 코틀린 고급문법_inline 함수, const, lateinit (0) | 2023.05.17 |
[TIL/Kotlin] 코틀린 중급문법_접근지정자, 접근지정자 오버라이딩, 확장 함수, 확장 프로퍼티 (0) | 2023.05.14 |
[TIL/Kotlin] 코틀린 중급문법_스마트 캐스팅, is 연산자, as 연산자와 다운캐스팅 (0) | 2023.05.14 |
[TIL/Kotlin] 코틀린 중급문법_Nothing타입, Nullable, ?. 연산자, !! 연산자, ?: 연산자 (0) | 2023.05.14 |