코틀린 설계자들이 이렇게 결정한 이유는 객체 선언이 싱글턴을 표현하지만 지역 객체들은 자신을 둘러싼 바깥 함수가 호출될 때마다 매번 다시 생성돼야 하기 때문이다.
midPoint() 함수가 반환하는 객체에 대해 명시적으로 타입을 지정하지 않았으므로, 이 함수의 반환 타입이 무엇인지 궁금할 것이다. 답은 객체 식 안에 정의된 모든 멤버가 들어있는 클래스를 표현하는 익명 객체 타입(anonymous object type)이며, 이런 타입은 단 하나만 존재한다(즉, 멤버가 모두 완전히 똑같은 두 객체 식이 있다고 해도, 둘의 타입은 서로 다르다). 코틀린 언어에서 이런 타입을 표현할 방법은 없다. 이 타입은 단지 코틀린 컴파일러가 객체 식의 타입을 표현하기 위해 사용하는 내부 표현일 뿐이다. 객체 식이 만들어내는 객체도 다른 클래스 인스턴스와 마찬가지로 사용할 수 있다. 예를 들어 앞 예제의 println 호출에서처럼 객체 식에 정의된 멤버에 접근할 수 있다.
IDE 팁 ≡
Show Expression Type 액션(Ctrl + Shift + P/Cmd - Shift - P)을 사용해 객체 식의 타입을 살펴보면 인텔리J는 <anonymous object>라고 표시해준다(그림 4-5).
▲ 그림 4-5 익명 객체 타입