‘책상은 책상이다’라는 소설을 아는지. 페터 빅셀의 단편 소설. 요즘도 배우는지 모르겠지만 나는 이 소설을 중학교 때 배웠다. 줄거리는 대략 아래와 같다.
‘주인공 남자는 일상의 단조로움에 지루함을 느낀다. 그래서 물건의 이름을 바꾸어 부르기 시작한다. 침대는 사진으로, 책상은 양탄자로, 의자는 시계로. 모든 단어를 자기만의 단어로 바꾸어버린 남자는 결국 다른 사람과 소통할 수 없게 된다. 그는 더 이상 사람들과 말하지 않고 혼자 침묵한다.’
자, 그럼 여기서 나오는 시험 단골 문항.
‘이 글에서 알 수 있는 언어의 특성은 무엇인가?’
답은 ‘언어의 사회성’이다. 언어는 사회적 ‘약속’이라서 개인이 함부로 바꾸어 사용할 수 없다. 약속을 지키지 않으면 의사소통이 불가능하다. 다시 한번 말한다. ‘약속을 지키지 않’으면 ‘의사소통이 불가능’하다.
갑자기 왜 소설이나 언어의 사회성 같은 이야기를 하냐고? 개발하다 보면 자주 이 소설이 떠오르기 때문이다.
개발자는 혼자 일하는 법이 없다. 혼자 일했다 한들 작업한 코드를 다른 사람도 봐야 하는 상황이 생긴다. 협업을 잘하려면 의사소통 능력이 필요하다는 사실은 두말할 필요도 없고. 그럼 의사소통 능력을 키우기 위해 필요한 것은? 하나를 꼽으라면 ‘작명’이다. 이름 짓기.
이름 없이는 코딩을 하기 매우 불편하다. (이 문단에서는 코딩의 기초인 변수 개념을 설명할 건데 이해할 필요는 없다. 시간이 없다면 다음 문단으로 넘어가도 된다) 예를 들어 ‘김수한무거북이와두루미삼천갑자동방삭’이라는 내용의 데이터를 사용한다고 치자. 이 데이터를 화면에 100번 보여준다고 생각해 보자. 단순히 생각하면 ‘김수한무거북이와두루미삼천갑자동방삭’ 18글자를 100번 작성하는 수고를 들여야 할 것이다. ‘김’이 ‘박’으로 바뀌기라도 하면 100번 고쳐줘야 한다. 하지만 이름을 붙여준다면?
name = ‘김수한무거북이와두루미삼천갑자동방삭’
이제 ‘김수한무거북이와두루미삼천갑자동방삭’ 대신 ‘name’이라고 100번 작성하면 되고, 내용이 바뀌더라도
name = ‘박수한무거북이와두루미삼천갑자동방삭’
이라고 한 번만 바꿔주면 된다.
아무튼 데이터에 이름을 붙여주면 편리하다는 장점이 있다! 데이터나 구현하려는 기능에 일일이 이름을 붙이는데 이때 중요한 것은 ‘약속’이다. 같이 작업하는 개발자 간의 약속.
우리 팀은 자주 발생하는 상황인 CRUD(Create, Read, Update, Delete)에 대해서만 이름 짓기 규칙을 정해뒀다. 그 외의 상황을 만나면? 각자 자기만의 방식으로 이름을 짓는다. 그러다 보니 고쳐야 할 기능을 이름 때문에 못 찾아서 헤매는 일도 생긴다.
하루는 아이템 리스트에 변경 사항이 있어 수정을 해야 했다.
‘ChangeRegion’
‘음, 지역(Region)을 바꾸는(Change) 기능인가 보다!’
그래서 그 기능은 들여다보지도 않았는데! 대체 어디서 아이템 리스트를 받아오는 거람? 한참 코드를 빙빙 돌며 헤맸다. ‘설마’하는 심정으로 ‘ChangeRegion’를 자세히 뜯어보았다. 놀랍게도 지역을 바꾸면 변경된 지역에 속하는 아이템 리스트를 가져오는 기능이었다.
‘리스트를 가져오는 게 목적인데 왜 ‘지역 변경’으로 이름이 지어져 있는 거죠? GetItemList 같은 형태가 되어야 하는 거 아닌가요?’
나는 그렇게 생각하지만 저 이름을 지은 사람은 다르게 생각할 수 있지. 이런 상황이 생기면 정말 ‘책상은 책상이다’가 떠오른다. 왜 다들 자기만의 단어로 말하고 있냐고. 우리의 약속은 어디에 있나요?
‘책상이든 의자든 좋으니 뭐라고 할지 정해줘!’라는 생각이 들었다면 가만히 앉아있어선 안 된다.
‘이 이름은 이렇게 바뀌어야 할 것 같아요. 앞으로는 조건이 아니라 목적 기준으로 이름을 지으면 어떨까요?’
그러면 어떤 방식으로든 결정이 될 것이다. 꼭 문서로 기록해 두자. 그리고 어떻게 이름 지어야 할지 고민될 때마다 문서를 보는 것이다. 당신도 될 수 있다! 작명가, 아니 개발자!
개발자가 갖춰야 할 작명의 소질은 대단히 창의적일 필요도 없다. 처음부터 ‘약속’을 잘 정하고, 약속에 따라 이름을 짓고. 어떻게 지어야 할지 모호한 부분에서는 논의해서 기준을 세우는 것. 그것이 전부다. 적어도 내가 생각하기엔 그렇다.
나는 내일도 이름을 짓겠지. 생각난 김에 규칙을 다시 정하자고 말을 꺼내봐야겠다. 문서도 작성해야지. 개발자는 오늘도 내일도 열심히 이름을 짓는다. 이 정도면 작명가 아니냐고.