1979년 VisiCalc를 C 언어로 부활시키다!
1979년 최초의 스프레드시트, VisiCalc를 C 언어로 재현하는 과정을 소개
수식 평가기(Formula Evaluator), 재계산(Recalculation), UI 구성 등 핵심 기능 구현에 집중
ncurses 라이브러리를 활용하여 터미널 기반 UI(TUI)를 구축
VisiCalc의 핵심 기능 구현에 초점을 맞춰, 스프레드시트의 기본 원리를 이해
수식 평가기(Formula Evaluator) 설계
저자는 VisiCalc의 핵심 기능 중 하나인 수식 평가기를 구현하기 위해 재귀 하강 파서(Recursive Descent Parser)를 사용했다. 특히, 수식 내 셀 참조를 처리하기 위해 `ref` 함수를, 숫자 파싱을 위해 `number` 함수를, 함수 호출을 위해 `func` 함수를 구현했다. 이러한 함수들을 조합하여 `expr`, `term`, `primary` 함수를 통해 전체 수식을 평가하는 구조를 갖췄다. 이러한 구조는 수식의 복잡성을 효과적으로 관리하고, 유지보수성을 향상시키는 데 기여한다.
재계산(Recalculation) 메커니즘
VisiCalc는 셀 값 변경 시 전체 스프레드시트를 재평가하는 방식을 사용했다. 저자는 이러한 방식을 C 언어로 구현하기 위해 `recalc` 함수를 정의하고, 각 셀의 타입을 확인하여 수식인 경우 해당 수식을 재평가하도록 했다. 이러한 방식은 의존성 그래프(Dependency Graph)를 유지하는 것보다 간단하지만, 작은 규모의 스프레드시트에서는 효율적인 성능을 제공한다. 또한, 수동 재계산 기능을 통해 사용자가 재계산 시점을 제어할 수 있도록 했다.
터미널 기반 UI(TUI) 구현
저자는 ncurses 라이브러리를 활용하여 VisiCalc와 유사한 터미널 기반 UI를 구현했다. UI는 상태 표시줄, 편집 라인, 열 머리글, 그리드 셀로 구성되며, 뷰포트(Viewport)를 통해 화면에 표시되는 셀 범위를 제어한다. 사용자의 입력에 따라 셀 값을 변경하고, 수식을 입력받아 평가하는 기능을 제공한다. 이러한 UI 구현은 사용자 경험(UX)을 향상시키고, 스프레드시트의 핵심 기능을 직관적으로 사용할 수 있도록 돕는다.
VisiCalc의 핵심 기능 구현
저자는 VisiCalc의 핵심 기능을 C 언어를 사용하여 구현하는 과정을 상세히 설명했다. 특히, 셀, 수식, 참조, 재계산, UI 구성 등 스프레드시트의 기본 원리를 이해하는 데 초점을 맞췄다. 또한, ncurses 라이브러리를 활용하여 터미널 기반 UI를 구현함으로써, VisiCalc의 사용자 인터페이스(User Interface)를 재현했다. 이러한 과정을 통해, 스프레드시트의 동작 원리를 깊이 있게 이해하고, 소프트웨어 아키텍처(Software Architecture)에 대한 통찰력을 얻을 수 있다.