Sleeep23' space
Front-end Engineer

자바스크립트로 배우는 SICP - 14. 복소수 산술의 호환성과 패키지

복소수의 산술을 유리수 산술에서 다뤘던 것처럼 추상화해보자!

2023-11-07 | 독서 | 3min


오늘은 이전의 복소수를 표현하는 방식에 이어 이를 태깅하는 전략을 소개하며 더 나아가 더욱 추상화한 패키지를 만드는 것을 소개한다.

태깅 전략이란, 복소수 연산을 이용하는 프로그램이 극 좌표계를 이용하는 복소수를 활용할수도 있고 직교좌표계를 이용할수도 있기에 이를 연산 프로그램 자체에서 각 좌표계별 연산을 태그를 다는 과정을 추가한다. 이는 이후 프로그램 내에서 이용될 경우, 태그를 확인하는 과정을 거쳐 각 좌표계별 연산이 진행된다.

하지만, 이 태깅 전략에도 문제가 있다. 만약 태그가 많아지면 어떻게 될까? 복소수의 경우 좌표계 두 개에서 끝나지만, 사실 세상에는 수많은 데이터들이 존재하며 이 데이터들에 최적화된 함수를 이용하기 위해서 매번 태그를 추가해줘야하는 번거로움이 생긴다. 이는 추후에 구현하는 함수의 이름이 겹치는 문제와 수정이 잦아진다는 문제를 발생시킨다.

그렇다면 이를 줄이는 방법에는 어떤 방법들이 있을까? 바로 추상화다. 하지만 결이 조금 다르다. 이전에는 공통 패턴을 추출해서 하나의 함수를 구성했다면, 이번엔 테이블에 함수를 등록하는 방식이다. 즉, 매번 다른 데이터를 활용하는 함수를 태그로 분류하는 전략을 취하기보다, 각 데이터에 최적화된 함수를 이용하는 패키지 함수를 구현하고, 해당 패키지 내부에 알맞게 함수를 구현한다는 것이다.

패키지를 구현하기 위해서는 테이블에 패키지 정보를 등록하는 put 함수와 테이블로부터 정보를 가져오는 get 함수를 이용한다. 사용하려는 함수 내부에서는 우선 이전에 구현하듯 각 좌표계별 연산을 구현하고, 이 연산들을 put 을 이용해 테이블에 등록하는 방식으로 구현한다.

이렇게 구현하게되면, 시스템의 나머지 부분과 연동하기 위해 이 함수들을 고칠 이유가 사라진다. 이들은 또 설치 함수 안에 있어 외부의 함수들과 충돌할 여지가 사라지게 된다.

이번 내용은 참 와닿는 내용이었다. 보통 npm 이나 pnpm , yarn 과 같은 패키지 매니저들이 이러한 방식을 이용하는 것을 보면 현재 다루고 있는 데이터 추상화 내용의 수준이 많이 높아졌다는 것을 깨닫게 해준다. 확실히 내용이 재미있다!