hyeals study
[코틀린] object 키워드 본문
<object 키워드를 사용하는 경우>
- 객체 선언은 싱글턴을 사용하는 방법 중 하나
- 동반 객체(companion object)는 인스턴스 메소드는 아님. 하지만 어떤 클래스와 관련있는 메소드와 팩토리 메소드를 담을 때 쓰임. 동반 객체 메소드에 접근할 때 동반 객체가 포함된 클래스의 이름을 사용할 수 있음.
- 객체 식은 자바의 익명 내부 클래스(anonymous inner class) 대신 쓰임.
☞ 공통점: 클래스를 정의하면서 동시에 인스턴스(객체)를 생성함.
[객체 선언(object declaration)]
* 싱글턴 패턴(singleton pattern): 자바에서 보통 클래스의 생성자를 private으로 제한하고, 정적인 필드에 그 클래스의 유일한 객체를 저장하는 패턴
☞ 코틀린은 객체 선언 기능을 통해서 싱글턴을 언어에서 기본으로 지원함.
* 객체 선언: 클래스 선언 + 그 클래스에 속한 단일 인스턴스 선언
- object 키워드로 시작함.
- 클래스를 정의하고 그 클래스의 인스턴스를 만들어서 변수에 저장하는 모든 작업을 한 문장으로 처리함.
- 선언 안에 프로퍼티, 메소드, 초기화 블록 등이 들어갈 수 있음.
- 하지만 생성자(주 생성자 + 부 생성자)는 객체 선언에 쓸 수 없음. → 일반 클래스의 인스턴스와 다르게 싱글턴 객체는 객체 선언문이 있는 위치에서 생성자 호출 없이 즉시 만들어지기 때문에 생성자를 정의할 필요가 없음.
- 객체 선언에 사용한 이름 뒤에 마침표(.)를 붙이면 객체에 속한 메소드 또는 프로퍼티에 접근할 수 있음.
- 클래스나 인터페이스를 상속할 수 있음.
- 일반 객체를 사용할 수 있는 곳에서 항상 싱글턴 객체를 사용할 수 있음.
- 클래스 안에 객체 선언 가능.
[동반 객체(companion object)]
* 코틀린에서는 자바의 static 키워드를 지원하지 않음. 대신 패키지 수준의 최상위 함수와 객체 선언을 활용함.
- 최상위 함수: 자바에서 정적 메소드의 역할을 거의 대신함
- 객체 선언: 자바의 정적 메소드의 역할 중 코틀린의 최상위 함수가 대신할 수 없는 역할이나 정적 필드를 대신할 수 있음.
* 하지만 최상위 함수는 private으로 표시된 클래스 비공개 멤버에 접근할 수 없음.
☞ 따라서 만약 클래스의 인스턴스와 관계없이 호출해야 하지만 클래스 내부 정보에 접근해야 하는 함수가 필요한 경우 클래스에 중첩된 객체 선언의 멤버 함수로 정의해야 함. → 대표적인 예시: 팩토리 메소드
* 클래스 안에 정의된 객체 중 하나에 companion을 붙이면 그 클래스의 동반 객체로 만들 수 있음.
- 동반 객체의 프로퍼티나 메소드에 접근하는 방법: 그 동반 객체가 정의된 클래스의 이름 사용
- 동반 객체는 자신을 둘러싼 클래스의 모든 private 멤버에 접근할 수 있음
[객체 식]
* "object 키워드"는 anonymous object를 정의할 때도 쓰임.
- object: MouseAdapter: MouseAdapter를 확장하는 익명 클래스를 선언
※ 코틀린에서 객체 식 정리
- 자바의 anonymous inner class를 대신함
- 여러 인스턴스를 구현할 수 있음
- 객체가 포함된 영역에 있는 변수의 값을 변경할 수 있음
본 게시물은 "Kotlin IN ACTION"을 참고함.
'코틀린' 카테고리의 다른 글
[코틀린] 수신 객체 지정 람다 (0) | 2020.02.22 |
---|---|
[코틀린] 람다식 & 멤버 참조 (0) | 2020.02.21 |
[코틀린] 컴파일러가 생성한 메소드 (0) | 2020.02.19 |
[코틀린] 특이한 생성자와 프로퍼티를 갖는 클래스 (0) | 2020.02.19 |
[코틀린] 클래스 계층 정의 (0) | 2020.02.18 |