객체 object
클래스를 정의하면서 인스턴스를 생성하는 키워드
선언 : object {}
선언식Object declaration
싱글톤Singleton패턴. 단일 인스턴스이므로 생성자 사용불가, 상속불가, 인스턴스 추가생성 불가
Thread-safe : 멀티 스레드 환경에서 일반적으로 어떤 함수나 변수, 혹은 객체가 여러 스레드로부터 동시에 접근이 이루어져도 프로그램 실행에 문제가 없는 것
lazy initialization : Object 키워드가 선언된 클래스는 외부에서 객체가 사용되는 시점에 초기화
표현식
익명객체annonymous object. 호출할 때마다 새로운 인스턴스 생성
여러 메소드를 오버라이드해야되는 경우 권장되고 하나의 메소드일 경우 람다식이 효율적
리스너(object: 클래스() {} 형태로 많이 쓴다.
상속받은 클래스의 멤버함수를 구현하거나 오버라이드 가능
동반객체 companion object
클래스에 속하는 객체
하나의 클래스 내 오직 하나의 companion object만 가능 object는 여러개 가능
외부에서 동반객체로 접근은 가능하나 동반객체에서 외부로 접근은 불가능
인터페이스, 상속 가능
동반객체가 속한 클래스가 사용될 때(load될 때) 초기화
최상위 함수, 객체선언
목적
클래스 내 싱글톤, 클래스에서 일부만 싱글톤으로 사용하고 싶을 때
클래스 내 상수를 정의할 때
인스턴스를 생성하지 않고 클래스에 접근할 때
팩토리패턴을 구현할 때
선언과 호출
선언 : companion object {}
default 객체명은 Companion이며 이름을 붙일 수도 있는데 Companion은 사용불가
호출 :
클래스명 { companion object 동반객체명 {메소드} }
1. 클래스명.메소드() : 동반객체명 생략
2. 클래스명.동반객체명.메소드() : 모두 사용
3. 동반객체명.메소드() // 클래스명 생략
확장함수 사용시 클래스명.Companion을 꼭 명시해야 한다. 클래스명만 사용하면 클래스의 인스턴스에 대한 확장함수 생성
'코틀린 > 코틀린 문법' 카테고리의 다른 글
Textwatcher (1) | 2024.08.14 |
---|---|
Repository (0) | 2024.08.13 |
코틀린문법 5주차 강의 [심화] (0) | 2024.06.12 |
코틀린문법 4주차 강의 [심화] (0) | 2024.06.10 |
코틀린문법 3주차 강의 [객체지향 프로그래밍] (0) | 2024.06.03 |