더북(TheBook)

가격이나 무게 생성에서 바뀐 부분은 없다. invoke 함수 호출은 예전에 생성자를 호출하는 구문과 비슷하지만, 이제는 비공개인 생성자는 쓰이지 않는다. fold에 사용한 ‘영’ 값(identity라고 부름)은 동반 객체에 정의된 것을 가져와 사용한다. 이 값을 invoke를 사용해 생성하려고 하면 검증 코드가 예외를 발생시키므로 직접 생성은 불가능하다.

Note≡

데이터 클래스의 비공개 생성자는 자동으로 생성된 copy 함수에 의해 외부에 노출되므로 사실은 비공개가 아니다. 이미 검증이 끝난 객체로부터 값을 복사할 때 copy를 사용하기는 하지만 필드에 원하는 대로 값을 설정할 수 있어 문제가 될 수도 있다. 현재 코틀린에서는 데이터 클래스에 대해 컴파일러가 생성하는 copy 함수를 변경할 방법이 없으므로 검증 규칙을 꼭 지켜야만 한다면 데이터 클래스를 사용하지 않고 일반 클래스를 사용하는 방법밖에 없다.

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