관리 메뉴

hyeals study

[코틀린] object 키워드 본문

코틀린

[코틀린] object 키워드

hyeals 2020. 2. 19. 23:30

<object 키워드를 사용하는 경우>

  • 객체 선언은 싱글턴을 사용하는 방법 중 하나
  • 동반 객체(companion object)는 인스턴스 메소드는 아님. 하지만 어떤 클래스와 관련있는 메소드와 팩토리 메소드를 담을 때 쓰임. 동반 객체 메소드에 접근할 때 동반 객체가 포함된 클래스의 이름을 사용할 수 있음.
  • 객체 식자바의 익명 내부 클래스(anonymous inner class) 대신 쓰임.

공통점: 클래스를 정의하면서 동시에 인스턴스(객체)를 생성함.


[객체 선언(object declaration)]

* 싱글턴 패턴(singleton pattern): 자바에서 보통 클래스의 생성자를 private으로 제한하고, 정적인 필드에 그 클래스의 유일한 객체를 저장하는 패턴

☞ 코틀린은 객체 선언 기능을 통해서 싱글턴을 언어에서 기본으로 지원함.

 

* 객체 선언: 클래스 선언 + 그 클래스에 속한 단일 인스턴스 선언

  • object 키워드로 시작함.
  • 클래스를 정의하고 그 클래스의 인스턴스를 만들어서 변수에 저장하는 모든 작업한 문장으로 처리함.
  • 선언 안에 프로퍼티, 메소드, 초기화 블록 등이 들어갈 수 있음.
  • 하지만 생성자(주 생성자 + 부 생성자)는 객체 선언에 쓸 수 없음. → 일반 클래스의 인스턴스와 다르게 싱글턴 객체는 객체 선언문이 있는 위치에서 생성자 호출 없이 즉시 만들어지기 때문에 생성자를 정의할 필요가 없음.
  • 객체 선언에 사용한 이름 뒤에 마침표(.)를 붙이면 객체에 속한 메소드 또는 프로퍼티에 접근할 수 있음.
  • 클래스나 인터페이스를 상속할 수 있음.
  • 일반 객체를 사용할 수 있는 곳에서 항상 싱글턴 객체를 사용할 수 있음.
  • 클래스 안에 객체 선언 가능.

[동반 객체(companion object)]

* 코틀린에서는 자바의 static 키워드를 지원하지 않음. 대신 패키지 수준의 최상위 함수와 객체 선언을 활용함.

- 최상위 함수: 자바에서 정적 메소드의 역할을 거의 대신함

- 객체 선언: 자바의 정적 메소드의 역할 중 코틀린의 최상위 함수가 대신할 수 없는 역할이나 정적 필드를 대신할 수 있음.

 

* 하지만 최상위 함수는 private으로 표시된 클래스 비공개 멤버에 접근할 수 없음.

☞ 따라서 만약 클래스의 인스턴스와 관계없이 호출해야 하지만 클래스 내부 정보에 접근해야 하는 함수가 필요한 경우 클래스에 중첩된 객체 선언의 멤버 함수로 정의해야 함. → 대표적인 예시: 팩토리 메소드

 

* 클래스 안에 정의된 객체 중 하나에 companion을 붙이면 그 클래스의 동반 객체로 만들 수 있음.

  • 동반 객체의 프로퍼티나 메소드에 접근하는 방법: 그 동반 객체가 정의된 클래스의 이름 사용
  • 동반 객체는 자신을 둘러싼 클래스의 모든 private 멤버에 접근할 수 있음

[객체 식]

* "object 키워드"는 anonymous object를 정의할 때도 쓰임.

익명 클래스로 이벤트 리스너 구현 예시

  • object: MouseAdapter: MouseAdapter를 확장하는 익명 클래스를 선언 

※ 코틀린에서 객체 식 정리

  1. 자바의 anonymous inner class를 대신함
  2. 여러 인스턴스를 구현할 수 있음
  3. 객체가 포함된 영역에 있는 변수의 값을 변경할 수 있음

 

 

 

본 게시물은 "Kotlin IN ACTION"을 참고함.

 

 

 

 

 

 

Comments