최근 제가 작업했던 코드들을 돌아보면, 어떤 부분은 건드리기가 너무 조심스럽고, 또 어떤 부분은 예상치 못하게 다른
곳에 영향을 주어 당황스러울 때가 많았습니다.
왜 이런 복잡성이 생기는 걸까?
라는 질문을 품고, 존 오스터하우트의 이라는 책을 다시 펼쳐 들었습니다.
특히 이번에는 3회차 독서인데, 과 에 대한 챕터를 깊이 들여다봤습니다.
요즘 AI 도구들이 코드를 정말 빠르게 만들어내죠.
그렇다면 결국 어떤 코드가 오래 살아남고, 이해하기 쉽고, 또 수정할 수 있는 코드가 될까?
하는 질문이 제 머릿속을 떠나지 않았습니다.
이 책을 읽기 전에는 캡슐화를 그저 '필드 접근을 막는 것' 정도로만 이해하고 있었는데, 은 모듈의 경계를 그리는
방식에 대해 새로운 가설을 던져주었습니다.
'숨겨야 할 대상은 데이터가 아니라, 바로 설계 결정이다'라는 가설이었죠.
이 책은 설계를 거창한 아키텍처 선언이 아니라, 우리가 매일 마주하는 복잡성을 관리하는 일상적인 행위로 바라보게
합니다.
핵심은 이겁니다.
은 단순히 코드를 감추는 기술이 아니라, '앞으로 바뀔 가능성이 높은 설계 결정을 모듈 내부로 밀어 넣는
기술'이라는 거죠.
그리고 은 하나의 설계 결정이 여러 모듈에 퍼져나가는 상태를 말합니다.
이렇게 되면 어떤 부분을 수정했을 때, 그 변경이 어디까지 영향을 미칠지 알기 어려워지죠.
또한 저자는 의 중요성을 강조합니다.
특정 호출자에 묶이지 않는, 더 깊고 유연한 API를 지향해야 한다는 겁니다.
이건 과도한 추상화가 아니라, 현실적인 범용성을 의미합니다.
책을 읽으며 가장 크게 머리를 친 부분은, '무엇이 바뀔지 묻지 않으면, 무엇을 숨길지도 알 수 없다'는
깨달음이었습니다.
저는 그동안 코드를 짤 때 '이 필드는 private으로 할까, public으로 할까' 정도만 고민했던 것 같아요.
하지만 이 책은 훨씬 근본적인 질문을 던집니다.
'이 모듈의 어떤 결정이 미래에 변경될 가능성이 가장 높을까?' 그리고 을 '중복 코드보다
더 조용한 중복 지식'이라고 표현한 부분이 인상 깊었습니다.
눈에 보이는 코드는 중복을 찾아내기 쉽지만, 여러 모듈에 퍼져 있는 '동일한 지식'은 알아차리기 어렵고, 결국 변경
비용을 엄청나게 높인다는 거죠.
또 은 막연한 미래를 예측해서 미리 설계하는 것이 아니라, '현재 인터페이스를 단순화하는 데서 나온다'는 점도 제게
큰 울림을 주었습니다.
이 책의 관점을 제 작업에 적용해본다면, 질문이 완전히 달라질 것 같습니다.
단순히 '이 코드가 작동하는가?'를 넘어, '다음
변경자가 이 모듈을 수정할 때, 무엇을 알아야 하고, 무엇을 몰라도 되는가?'를 묻게 될 겁니다.
결국 설계는 거창한 설계 문서가 아니라, 우리가 매일 선택하는 이름, 모듈의 경계, 예외 처리 방식, 주석, 그리고
계층 구조 속에 사실을 다시금 깨닫습니다.
최근 제가 작업했던 모듈 하나를 이 책의 기준으로 다시 들여다보고, 숨겨져야 할지, 불필요하게 노출되어 있는지
고민해봐야겠습니다.
이 책은 단순히 코드를 잘 짜는 기술을 넘어, 를 원하는 모든 개발자에게 추천하고 싶습니다.
특히 '내 코드가 왜 이렇게 유지보수하기 어려운 걸까?'라는 질문을 자주 던지는 분들, 캡슐화나 모듈화에 대한
기존의 이해를 확장하고 싶은 분들에게 큰 도움이 될 겁니다.
결론적으로, 좋은 모듈은 이 아니라, 와 같다는 것을 배웠습니다.
이런 관점에서, , 과연 어떤 설계 원칙을 검증 루프에 넣어야 할지, 또 다른 질문을 안고 다음
책으로 향합니다.