더북(TheBook)

3.2.3 객체 생성자를 함수로 사용하기

객체 생성자는 사실 함수다. 객체 생성 시 특별한 구문을 사용하는 자바와 달리, 코틀린은 함수 호출 구문을 사용한다(하지만 객체를 함수로 만들어주는 것은 생성자 구문이 아닌 다른 요소다. 자바 객체도 함수다). 코틀린에서는 클래스 이름 뒤에 괄호를 붙이고 괄호 안에 생성자 인자를 넣으면 클래스 인스턴스 객체를 얻을 수 있다.

val person = Person("Elvis")

중요한 의문이 하나 생긴다. 순수 함수는 인자가 같을 때 같은 결과를 돌려줘야 한다고 말했다. 생성자는 과연 순수 함수인가? 다음 예를 보자.

val elvis = Person("Elvis")
val theKing = Person("Elvis")

두 객체는 같은 인자로부터 만들어진다. 따라서 생성자가 순수 함수라면 같은 값을 반환해야 한다.

val elvis = Person("Elvis")
val theKing = Person("Elvis")

println(elvis == theKing) // "true"를 반환해야 함

여기서 동등성 검사 결과는 equals 함수가 제대로 정의된 경우에만 true를 반환한다. 그러므로 Person이 데이터 클래스(2장을 보라)라면 true가 반환된다.

data class Person(val name: String)

Person이 데이터 클래스가 아니라면 여러분이 정의한 equals 함수에 따라 동등성이 달라진다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.