대규모 시스템이 모듈성 modularity를 가지도록 시스템의 구조를 만들자.

이를 위한 두 가지 조직화 전략

  1. 객체 기반 접근 방식
  2. 스트림 처리 접근 방식

3.1 배정과 지역 상태

어떤 객체의 행동이 해당 객체의 역사에 영향을 받을 때 이런 객체를 가리켜 상태가 있다 혹은 상태를 가진다라고 표현

시스템 내에서 각 객체들은 서로 영향을 미친다.

계산 모형을 모듈성을 지니도록 하려면, 계산 모형이 표현하고자 하는 모형화 대상이 되는 시스템(물리계 등)의 실제 객체들을 모형화하는 계산적 객체들로 분해해야 한다. → 계산 모형을 계산적 객체들로 분해해야 한다.

이 때 각 계산적 객체는 실제 객체의 상태를 서술하는 역할을 하는 자신만의 지역 상태 변수들이 필요하다. 대상 시스템의 실제 객체들이 시간에 따라 변하므로, 이 상태 변수들은 시간에 따라 변화해야 한다.

반드시 주어진 이름과 연관된 값을 변경할 수 있는 배정 연산 assignment operation을 지원해야 한다. 그래서 상태 변수들을 어떤 특정한 프로그래밍 언어의 통상적인 기호 이름으로 표현하고자 한다면 필수.

3.1.1 지역 상태 변수

계산적 객체는 시변 상태 time-varying state를 가져야 한다. 예시로 계좌에서 돈을 뽑는 withdraw 함수

withdraw(25);
// 75

withdraw(25);
// 50

두 번 평가했는데 결과가 각자 다르다. 지금까지의 함수와 차이가 있다. 구현해보자.

image.png

balance가 withdraw가 아니더라도 프로그램의 모든 함수에서 자유롭게 접근 및 값을 변경할 수 있으므로 balance가 withdraw의 한 지역 변수라는 점을 더 명확하게 표현 필요

image.png