목을 사용하거나 은행에 연결하지 않고 프로그램을 테스트하고 싶다면 부수 효과를 없애야만 한다. 하지만 여전히 신용 카드로 도넛 가격을 지급하고 싶다면 유일한 해법은 카드 지급이라는 연산을 나타내는 표현을 반환 값에 덧붙이는 것뿐이다. 이제 buyDonut 함수는 도넛과 카드 지급에 대한 표현을 함께 반환해야 한다. 카드 지급을 표현하기 위해 다음 예제처럼 Payment라는 클래스를 사용할 수 있다.
예제 1-2 Payment 클래스
class Payment(val creditCard: CreditCard, val amount: Int)
이 클래스는 카드 지급 표현에 필요한 데이터를 포함한다. 그런 데이터로는 신용 카드와 청구 금액이 있다. buyDonut 함수가 Donut과 Payment를 한꺼번에 반환해야만 하기 때문에 이를 위한 클래스로 Purchase를 정의할 수도 있다.
class Purchase(val donut: Donut, val payment: Payment)
앞으로 서로 다른 타입의 두 값(또는 그보다 더 많은 값)을 저장하기 위한 클래스가 자주 필요할 것이다. 프로그램을 더 안전하게 만들려면 부수 효과를 수행하는 대신 그 효과에 대한 표현을 만들어 반환해야 하기 때문이다.