소프트웨어 제품의 설계에는 두 가지 측면이 존재한다. 하나는 ‘기능(function)’ 측면의 설계이고, 다른 하나는 ‘구조(struct)’ 측면의 설계다
<aside> 💡 기능 측면의 설계: 제품이 사용자를 위해 무엇을 할 수 있는 지에 초점을 맞춘다.
구조 측면의 설계: 제품의 형태가 어떠해야 하는 지에 초점을 맞춘다.
</aside>
객체지향 접근방법은 자주 변경되지 않는 안정적인 객체 구조를 바탕으로 시스템 기능을 객체 간의 책임으로 분배한다. 객체지향은 객체의 구조에 집중하고 기능이 객체의 구조를 따르게 만든다. 시스템 기능은 더 작은 책임으로 분할되고 적절한 객체에게 분배되기 때문에 기능이 변경되더라도 객체 간의 구조는 그대로 유지된다.
<aside> 💡 유스케이프 모델링: 기능을 수집하고 표현하기 위한 기법
</aside>
<aside> 💡 도메인 모델링: 구조를 수집하고 표현하기 위한 기법
</aside>
두 가지 모델링의 결과물을 유스케이프, 도메인 모델이라 부른다.