더 좁은 타입의 유효성에 대하여

작성일:2025.04.25|조회수:2

더 좁은 타입의 유효성에 대하여

사람이 무언가를 집중해서 바라보다 보면, 어느샌가 주변부가 흐려지고 가끔은 집중하고 있던 그 대상조차 보이지 않게 된다. 처음엔 분명하게 인식되던 경계가 서서히 사라지고, 오히려 애써 무시했던 주변이 본질을 가릴 때도 있다. 잘 보려 애쓰는 행위가, 역설적으로 시야를 좁히는 순간이다.

개발에서도 비슷한 순간이 찾아온다. 타입을 정교하게 다듬고, 설계를 촘촘하게 만드는 데 집중하다 보면 어느새 전체 맥락을 잃어버린다. 엄밀함이라는 이름 아래, 타입 그 자체에 집착하게 되고, 그 타입이 놓인 현실적인 맥락은 시야에서 밀려난다. 나는 그 맹목의 순간을 몇 번이나 지나왔다.

타입스크립트를 사용하다 보면 “더 정확한 타입”, “더 안전한 설계”라는 목표는 언제나 옳아 보인다. 실제로 많은 버그를 사전에 차단해주고, 코드의 의도를 명확히 드러내는 데에도 큰 도움이 된다. 문제는 그 정확함이 목적이 되는 순간부터 시작된다.

타입을 정교하게 만들기 위해 복잡한 제네릭을 쌓고, 모든 경우의 수를 타입 레벨에서 봉쇄하려고 하다 보면, 어느새 질문이 바뀐다.

“이 코드는 현실에서 어떻게 쓰일까?”가 아니라
“이 타입은 논리적으로 완벽한가?”가 중심이 된다.

그 순간부터 설계는 점점 현실과 멀어진다.

개발에서의 엄밀함은 분명 중요하다. 하지만 그 엄밀함은 언제나 맥락 위에 놓여야 한다. 타입은 코드를 설명하는 수단이지, 그 자체로 완결된 세계가 아니다. 타입이 현실을 설명하지 못하는 순간, 타입을 잘못 설계한 것이 아니라 타입을 바라보는 시야를 잘못 설정한 것일지도 모른다.

이후 설계를 수정하면서 나는 한 가지 원칙을 다시 세웠다. 설계는 “완벽하게 막는 것”보다, “잘못되었을 때 드러나는 것”이 더 중요하다는 점이다. 모든 경우를 사전에 봉쇄하려 하기보다는, 현실적인 사용을 자연스럽게 수용하고, 잘못된 조합이 명확하게 실패하도록 만드는 쪽이 더 건강한 구조일 수 있다.

아이러니하게도, 그렇게 한 발 물러서서 설계를 다시 보니 이전보다 타입은 더 단순해졌고, 구조는 오히려 더 단단해졌다. 시야를 넓히자, 그제야 정말로 잘 보이기 시작했다.

개발자는 종종 “더 잘 보기 위해” 눈을 좁힌다. 하지만 집중이 맹목이 되는 순간, 우리는 중요한 것을 놓친다. 타입이든, 아키텍처든, 추상화든 마찬가지다. 잘 만든다는 명분 아래, 우리가 보고 있는 것이 무엇인지 스스로에게 묻지 않으면, 설계는 쉽게 현실과 어긋난다.

요즘 나는 코드보다도, 내가 어디를 보고 있는지를 더 자주 점검하려 한다. 엄밀함에 취해 시야를 좁히고 있지는 않은지, 논리적으로 완벽하다는 이유로 현실을 외면하고 있지는 않은지. 그 질문을 던지는 것만으로도, 설계는 조금 더 사람을 닮아간다.

더 읽어보기

  • 2026.04.29

    필요한 사람들의 세상 - omocon 후기

    이전 잡생각인 <너만의 월남쌈을 싸> 와 맥락적으로 이어지는 부분이 있지만, 꼭 가서 볼 필요는 없습니다. 나는 10년이라는 시간 동안 장편과 단편 소설을 썼다. 하지만 5년 전 어느 순간부터 더 이상 써야 할 이야기가 남지 않았다는 느낌을 받았고, 그 이후로는 단 한 번도 완성된 형태…

  • 2026.04.23

    너만의 월남쌈을 싸

    이 포스트의 제목은 유튜브 영상 <너만의 월남쌈을 싸 - 아이네 INE>에서 따왔다. 4월 초부터 @ilokesto 네임스페이스에 속한 거의 모든 라이브러리를 리뉴얼 하고 있다. 이미 deprecated 처리는 끝났고, 새로운 기준 위에서 라이브러리의 구조를 재정의하는 단계를 거치고 있…

  • 2025.09.14

    Loose Autocomplete

    프로그래밍을 하다 보면 개발자가 의도한 선택지를 에디터가 자동완성으로 얼마나 잘 안내해 주느냐가 개발 경험에 큰 영향을 미친다는 사실을 자주 체감하게 된다. 특히 문자열 기반의 옵션을 다룰 때는 이 차이가 더욱 극명하게 드러난다. 예를 들어 HTTP 메서드를 표현할 때 "GET" | "…

  • 2025.04.06

    재귀 조건부 타입에서의 추론 컨텍스트 손실

    타입스크립트에서는 조건부 타입의 분배 과정에서도 타입 추론 컨텍스트가 유지된다. 이 특성 덕분에 단순한 분기 수준을 넘어, 상당히 복잡한 조건부 타입에서도 개발자가 의도한 방향으로 타입 추론을 유도할 수 있다. 실제로 이러한 특성은 고급 유틸리티 타입을 설계할 때 매우 강력한 도구로 작…

댓글

댓글을 불러오는 중...