
371
18
장
열린 클래스에서 봉인된 클래스로
우리 시스템은 타입과 연산, 즉 명사와 동사로 이뤄진다. 자바에서 명사는 클래스와 인터페이스로 표
현되고, 동사는 메서드로 표현된다. 하지만 코틀린은 봉인된 클래스 계층과 독립적인 함수를 추가했
다. 이들이 명사와 동사들의 협력에 어떤 가능성을 가져왔을까?
소프트웨어를 설계할 때 변경을 어떻게 잘 처리하느냐는 항상 어려운 문제이다. 소프트웨어를
사용하는 사람이 늘어나면 사용자들이 소프트웨어에 바라는 요구사항도 더 늘어난다. 새로운
사용을 지원하기 위해서는 기존 데이터 타입에 작용할 수 있는 새로운 기능을 추가할 필요가
있고, 기존 함수에서 다룰 수 있는 새로운 타입을 추가할 필요도 생긴다. 설계가 소프트웨어의
진화 방향과 같은 방향으로 잘 정렬되어 있다면 새 코드를 추가하고, 기존 코드에 약간의 여파
가 한정된 변화를 가함으로써 새 기능을 추가할 수 있다. 하지만 정렬이 잘 되어있지 않다면 새
데이터타입을 추가할 때 많은 코드를 변경해야만 하거나, 새 함수를 추가할 때 많은 데이터 타
입을 변경해야만 한다.
이런 데이터 타입과 함수의 변경 가능성 사이의 긴장을 가장 가깝게 느낄 수 있는 부분은 도
메인 모델의 핵심 엔티티이다. 예를 들어, 고객의 여정은 트래블레이터 애플리케이션의 핵
심 엔티티이다. 애플리케이션에서 ...