[Kotlin] 더블콜론(::) 이란

Janzizu·2023년 9월 20일
0


안드로이드 스튜디오에서 코틀린으로 앱을 개발하다보면 더블콜론 (::) 을 자주 접하게 된다.
더블콜론은 왜 쓰이고 그 의미가 무엇일까
그 전에 리플렉션에 대해 간단히 개념만 알고 가보자!

Reflection --> "반사"

런타임 (실행시점)에 프로그램의 클래스를 조사하기 위해서 사용되는 기술이다.
즉, 프로그램이 실행중일 때 객체의 내부 구조를 리플렉션을 통해 알 수 있다.
(ex: 어노테이션)

  • 주로 런타임 시간에 프로그램의 구조를 분석하고 조작하는 데에 사용되지만,
    컴파일 시간에도 접근할 수 있다.

타입과 관계없이 객체를 다루거나, 객체가 제공하는 정보 (메소드 , 프로퍼티) 를 실행시점에만 알 수 있는 경우에 리플렉션을 사용한다.

더블콜론 (::) ?

더블콜론 연산자는 함수나 클래스를 참조하거나 호출할 때 사용된다.

리플렉션 <-> 더블콜론

리플렉션을 사용하여 클래스 또는 함수를 동적으로 찾아 더블콜론(::) 연산자를 통해 참조할 수 있다
우리는 안드로이드 프로그래밍 내에서 액티비티를 띄울 때 아래와 같은 코드를 많이 접한다.

val intent = Intent(this, TestClass::class.java)
startActivity(intent)

위 코드는 TestClass라는 액티비티 클래스의 정보를 가져오며,
이를 통해 액티비티로 이동하거나 정보를 전달할 수 있게 된다.

(더블 콜론 연산자를 통해 클래스를 참조하고, 이와 같은 표현은 클래스 정보를 얻는 리플렉션의 한 형태)

그럼 끝에 붙은 .java는 무엇일까?

자바에서는 클래스 정보를 가져올 때 'Class' 객체를 사용한다. (class객체 리턴)
하지만 코틀린에서는 더블콜론을 통해 클래스를 참조하면 'KClass'를 리턴하게 된다.

두 언어간에 클래스 정보를 표현하는 방식이 다르기 때문에 Kotlin에서 사용할 때 . java를 붙인 형태로
Class객체를 얻을 수 있게 되는 것이다.

사용

더블 콜론 연산자는 다음과 같이 여러 경우에서 사용될 수 있다.

1. 메서드 참조

  • 더블 콜론 연산자를 통해 함수나 메서드를 참조할 수 있다.
val printMessage: (String) -> Unit = ::println
printMessage("funny","yammi)

2. 클래스 참조

val myClass = MyClass::class

3. 패키지 멤버 참조

fun add() { .. }
val addREf = ::add

4. 프로퍼티 참조

data class Singer(val name: String, val songName: String, val age: Int)
val name = Person::name
val sName = Person::songName
val age = Person::age
  • 인스턴스를 직접 생성하지 않고 참조하므로 특정 클래스의 메타 정보를 동적으로 활용하는데 유용하다!

0개의 댓글