개발자들 사이에서 흔히들 하는 농으로 개발하는 시간보다 변수명을 짓는 데 더 시간을 쓴다고들 한다. 변수에 이름 붙이는 게 뭐 그리 어렵겠느냐만 사실 굉장히 어렵기도 하고 또 그만큼 중요하기도 하다.

importance of naming variable

얼마전 회사 미팅에서 있었던 일이다. 내부적으로 만든 서비스 중에 Alert Manager 라는 서비스가 있었고, 해당 서비스에 이러이러한 기능을 붙이자는 의견이 나왔다. Alert Manager 에 있음직한 기능이었기 때문에 의견은 받아들여졌고, 그에 대한 논의가 지속되면서 추가하고자 하는 기능의 범위가 넓어졌다. 어느 선부터는 Alert Manager 에 있음직하지 못한, 더 넓은 개념의 기능이었기 때문에 이 기능을 Alert Manager 와 분리시켜서 별도의 서비스를 만들기로 합의했고 그 서비스에 대한 논의를 이어갔다. 하지만 서비스의 이름을 짓지 않은 상태에서 논의하다보니 편의상 새롭게 만들 서비스도 Alert Manager 로 지칭하기 시작했고 나를 포함한 다른 사람들은 혼란을 겪기 시작했다. 지금 논의되고 있는 기능이 원래의 Alert Manager 에 들어가야 하는 건지, 아니면 새롭게 만들 서비스에 들어갈 기능을 이야기하는 건지 헷갈리기 시작했다. 특히 처음부터 논의해 포함되어 있지 않던 사람들의 혼란은 더 컸다. 더이상의 혼란을 방지하기 위해 논의를 잠시 중단시키고 가제라도 이름을 짓고 시작하자고 제의했고, Admin Portal 이라는 이름이 선정되었다. 새로운 이름이 지어진 이후에야 혼란은 줄어들었다. 심지어는 Admin Portal 에 새로 들어감직한 기능들이 더 구체적으로 논의되기 시작했다. 다들 머리속에서 unidentified 상태의 서비스를 구체화시키기 보다는 Admin Portal 이라는 서비스를 구체화시키는 편이 더 쉬운 듯 했다. 문득 작명의 중요성에 대해 다시 한 번 생각해보게 되었다.

다른 것들과 구별되어야 하는 대상들에는 모두 이름이 붙어 있다. 자동차, 빌딩, 가로등, 거리, 그림, 마우스, 키보드 등등. 그리고 그 이름이라는 것은 그 대상에 대해 이러이러한 이름으로 부르기로 모두와 약속이 된 부분이기 때문에 다른 사람과 소통하기도 쉽다. 자동차라는 이름 없이 “바퀴가 달리고 도로를 달릴 수 있는 교통수단"이라고 부르면 소통 간에 오해의 소지가 생기기 쉽다. 누군가는 오토바이를 상상할지도 모르고, 누군가는 롤러스케이트, 누군가는 리어카를 상상할지도 모르는 일이다. 그것에 대해 “자동차"라고 이름을 붙이기 시작하는 순간 그러한 오해의 소지는 최소화된다. 모두가 같은 대상을 머리속에 그려놓고 이야기를 할 수 있다.

더욱이 그 “무언가"를 만들어야 하는 사람들에게는 제대로 된 작명이 더 중요하게 된다. “자동차"라는 이름 없이 자동차를 만들어야 하는 조직에서는 자동차를 구체화시키기가 쉽지 않다. 하지만 만들어야 할 대상을 “자동차"로 이름붙이고 나서는 우리가 무엇을 만들어야 하는지가 더욱 분명해진다. 백미러와 사이드 미러가 있어야 하고, 고무로 만들어진 타이어와 사람이 타고 내릴 수 있는 문, 그리고 전방을 볼 수 있는 유리창을 다들 동일하게 머릿속에 떠올릴 것이다.

하지만 동시에 대상에 이름을 붙이는 것은 그 대상의 범위를 좁혀버리는 일이기도 하다. “자동차"를 만들기로 한 팀은 아마도 엔진과 연료의 효율 등에 자연스레 신경을 더 쓰게 될 것이다. 자동차 안에 무엇이 포함될 지는 더이상 이야기하지 않을 것이다. 자동차 안에 포함된 건 당연히 사용자가 않을 시트와 짐을 싣을 트렁크 뿐이니까. 하지만 “자동차"라는 이름의 한계를 뚫고 그 안에 주방과 화장실과 침대를 넣자는 아이디어가 어쩌면 그들에게는 더 필요한 방향일 수도 있다. (그리고 그 대상은 “캠핑카"라는 새로운 이름을 얻게 될 것이다.) 하지만 “자동차"라는 이름의 한계를 뚫기는 쉽지 않다.

대상에 이름을 붙이는 순간 그것이 상상력의 여지를 닫아버리는 효과도 있다는 것을 생각하게 되었다. 그래서 더 이름을 붙이는 문제가 중요하게 느껴졌다. 20대의 대학교 4학년에 재학중인 누군가에게 “대학교 졸업반"이라는 이름을 붙여버리는 그는 어째선가 취업 준비를 해야 할 것만 같다. 하지만 그에게 “청춘"이라는 이름을 붙이는 그는 래퍼가 될 수도 있고, 장사꾼이 될 수 도 있고, 또 다른 무언가가 될 수도 있다. 물론 백수가 될 수도 있다.

어떤 대상에 이름을 붙이는 건 그 대상의 구체성을 높이는 반면, 그 대상의 한계를 규정지어 버리는 효과도 있다. 똑같이 월급을 받으며 코드를 짜는 개발자들도 그들 자신을 “월급쟁이” 혹은 “샐러리맨"으로 규정짓는 사람들과 “개발자” 혹은 “소프트웨어 엔지니어"로 규정짓는 사람들과는 조금 거리가 있어 보인다. 그래서 이름을 붙이는 데이는 적지 않은 고민이 필요하고, 또 이름이 붙여진 이후에도 그 이름이 주는 한계에 갇히지 않고 가능성의 여지를 계속해서 만들려고 노력해야 한다는 생각을 했다.