object 키워드가 사용되는 경우인, 다음 내용을 정리한다.
객체 선언 : 싱글턴 객체 생성
인스턴스가 하나만 필요한 경우가 있다.
자바에서는 다음과 같이 singleton pattern 으로 구현할 수 있다.
- 클래스의 생성자를 private 으로 제한하고,
- 정적인 플드에 그 클래스의 유일핸 객체를 저장
코틀린은 ‘객체 선언’ 기능을 통해, 싱글턴 패턴을 언어에서 기본 지원한다.
( 객체 선언 = 클래스 선언 + 그 클래스에 속한 단일 인스턴스 선언 )
object keyword 를 사용해서,
클래스를 정의하고 그 클래스의 인스턴스를 만들어서 변수에 저장하는 모든 작업을 한 문장으로 처리한다.
일반 클래스의 객체와 달리, 싱글턴 객체는 객체 선언문이 있는 위치에서 생성자 호출없이 즉시 만들어진다.
1 2 3 4 5 6 7 8 9 10 11 12 13
| object Payroll { val allEmployees = arrayListOf<Person>()
fun calculateSalary() { for (person in allEmployees) { } } }
Payroll.allEmployees.add(Person(name = "jko", isMarried = false)) Payroll.calculateSalary()
|
클래스 안에 객체로 선언할 수도 있다.
1 2 3 4 5 6 7 8 9 10
| data class Person(val name: String) {
object NameComparator : Comparator<Person> { override fun compare(o1: Person, o2: Person): Int = o1.name.compareTo(o2.name) } }
val persons = listOf(Person("jko"), Person("junhee-ko")) println(persons.sortedWith(Person.NameComparator))
|