통합 검색어 입력폼

[NDC 18] "젤다의 전설'은 이상한 이름?" 코드 네이밍 가이드 라인

조회수 2018. 4. 26. 11:59 수정
번역beta Translated by kaka i
번역중 Now in translation
글자크기 설정 파란원을 좌우로 움직이시면 글자크기가 변경 됩니다.

이 글자크기로 변경됩니다.

(예시) 다양한 분야의 재밌고 유익한 콘텐츠를 카카오 플랫폼 곳곳에서 발견하고, 공감하고, 공유해보세요.

작업 효율을 올리는 '좋은 네이밍' 방법론

컴퓨터 프로그래머에게 ‘네이밍’(이름짓기)는 소스 코드와 함수를 짜는 것만큼이나 중요한 문제다. 좋은 네이밍을 하면 프로그래머들이 소스 코드를 읽고 이해하는 데 필요한 노력을 줄일 수 있고, 코드를 검토할 때 이름과 명명 기준을 논쟁하기보다 더 중요한 주제에 집중할 수 있는 덕분이다.

 

그렇다면 작업 효율을 올릴 수 있는 ‘좋은 네이밍’은 어떻게 하는 것일까? 넥슨 데브캣 스튜디오의 <프로젝트DH>팀 전형규 수석 연구원이 게임 개발에서 ‘좋은 네이밍’을 위한 노하우를 구체적인 사례를 들어 설명했다.

넥슨 데브캣 스튜디오 <프로젝트DH>팀, 전형규 수석 연구원


# 네이밍(Naming)의 특징과 중요성

 

네이밍은 어떤 개념이나 기능, 객체 등의 대상에 이름을 붙이는 행위를 의미한다. 게임 개발에서는 파일 이름, 변수, 함수, 클래스, 아이템, 캐릭터 스킬, 신규 콘텐츠 등이 네이밍 대상에 해당된다. 

 

좋은 이름을 짓기 위해서는 네이밍의 특징을 파악해야 한다. 첫 번째, 네이밍은 대상을 이해해야 한다. 이름을 붙일 대상이 무엇인지 모른 상태에서는 잘못된 이름을 붙이기 쉽다. 두 번째, 네이밍은 주어진 대상을 가장 잘 표현하는 단어를 찾는 문제 풀기다. 세 번째, 네이밍은 특정 현상이나 추상적인 개념을 구체적이고 객관적인 무엇으로 나타내는 역할을 하기도 한다. 

 

이러한 것들을 충실하게 참고해 지어진 ‘좋은 이름’은 대화의 맥락을 쉽게 파악할 수 있도록 돕고, 변수/함수/클래스 등 코드를 이해하는 가장 큰 단서가 된다. 때로는 도구와 규칙의 이름에서 만든 이의 철학이나 조직의 문화를 엿볼 수 있는 단서가 되기도 한다. 


# 좋은 이름이란?

 

그렇다면 네이밍의 특징을 제대로 파악해 만들어진 ‘좋은 이름’에는 어떤 것이 있을까? 전형규 연구원은 명확성, 유일성, 일관성, 영속성의 네 가지 특징 중 하나 이상은 가지고 있는 것이 ‘좋은 이름’이라고 설명했다.

 

명확성은 이름이 가리키는 대상이 뚜렷한 속성이다. 인자가 true인지 검사하는 'TestTrue()'처럼, 모호하지 않고 이름 자체만으로도 설명이 충분한 것을 의미한다.  

 

유일성은 대상을 표현하는 가장 적절한 단어를 의미한다. 제한된 시간 내에 상대방을 더 많이 죽이면 승리하는 ‘데스매치’나, 내가 하면 로맨스고 남이 하면 불륜이라는 의미의 ‘내로남불’처럼 독창적이고 기억에 오래 남는 이름이 여기에 해당한다.

일관성은 개별 이름의 속성보다는 이름이 속한 시스템의 특징이다. 비슷한 것에는 비슷한 이름을 붙이고, 이름을 붙이는 규칙이 일목요연하게 정리돼 있는 상태를 의미한다. 여러 사람이 관리할수록, 시스템이 커질수록 일관성이 더욱 중요해진다. 

 

영속성은 유행에 민감하지 않고 그 뜻이 변화하지 않는 것을 의미한다. 영속성을 가진 이름은 ‘게임 엔진’처럼 대상의 속성이 변해도 계속 사용할 수 있다는 것이 특징이다. 


# 그렇다면, 나쁜 이름은 무엇일까?

 

좋은 이름이 잘 떠오르지 않는다면 적어도 ‘나쁜 이름’은 피해야 한다. 나쁜 이름은 난해함, 의존성, 비상식적, 비윤리적인 특징을 가지고 있다. 

 

난해함은 쉽게 이해하기 어려운 속성을 의미한다. 의존성은 순환 논리에 빠져, 해당 이름을 이해하려면 대상 밖의 개념을 알아야 하는 속성을 의미한다. 전형규 연구원은 게임에서 흔히 쓰이는 ‘논타겟’ 또한 ‘타겟팅’이라는 것을 알고 있어야 이해할 수 있는 ‘나쁜 이름’ 중 하나라고 말하면서도, 어느새 전 세계에서 쓰이는 용어가 됐다며 복잡한 심경을 토로했다.

 

비상식적은 특정 문맥에 맞춰 의미를 재정의해, 처음 들었을 때 오해하기 쉬운 속성을 의미한다. 비윤리적은 비속어와 같은 불쾌한 표현 또는 정치적으로 올바르지 않은 단어가 사용된 것을 의미한다. 대표적으로 ‘발암’이나 ‘프로젝트 매춘부’도 나쁜 이름에 해당한다.


# 이상한 이름이란?

 

좋은 이름도, 그렇다고 나쁜 이름도 아닌 ‘이상한’ 이름이 만들어지는 경우도 있다. 이상한 이름은 복합적, 중독성의 특징을 가지고 있다.

 

복합적은 좋은 이름과 나쁜 이름의 특징을 함께 가지고 있는 경우를 의미한다. 대표적으로 앞서 말했던 ‘논타겟’은 의존성이 있는 이름이지만, 이 개념을 설명할 더 좋은 이름이 없다. 게임의 주인공은 ‘링크’지만, 주인공의 이름을 ‘젤다’로 착각하게 만드는 <젤다의 전설> 시리즈도 여기에 해당한다.

 

중독성은 유머러스하고 재치있는 표현인 덕분에 처음 들었을 때 재미있고, 시스템 전체로 빠르게 전파되는 속성을 의미한다. <배틀그라운드>가 유행하며 ‘존버’라는 단어가 유행한 것이 대표적이며, 유저들이 흔히 사용하는 단어인 ‘잠수함 패치’도 여기에 해당한다. 


# 게임 개발 조직에서의 공통 네이밍 가이드라인

 

게임 개발 조직에서의 좋은 네이밍을 위해 더욱 구체적인 가이드를 주자면, 첫 번째. 이름을 만드는 사람은 이름의 용도를 고려해야 한다. 특정 조직 안에서만 사용되는 단어라면, 해당 조직의 특징을 파악해야 한다. 조직 또는 직군에 따라서 같은 단어가 다른 의미로 사용되는 경우도 발생하므로, 이름이 사용되는 범위가 넓다면 반드시 해당 이름을 사용하는 관련자들과 협의를 통해 네이밍을 진행해야 한다. 

 

두 번째. 재밌고 기억하기 쉬운 단어를 사용하는 것이 좋다. 가능하면 일상 언어에서 발굴해 사용성을 높이는 것이 좋다. 좋은 이름의 특징을 가지고 있다 해도, 기억하기 어려워 잘 사용되지 않는다면 좋은 이름이 아니다. 

 

세 번째. 이름은 가능한 빨리 결정하는 것이 좋다. 콘셉 증명 단계에서는 이름을 대충 붙여도 크게 문제되지 않는다. 고민 끝에 지은 이름은 정작 필요할 때 기억나지 않는 경우가 많으므로, 좋은 이름 찾느라 너무 오래 고민하지는 않는 것이 좋다.

네 번째. 변경을 두려워하지 않는 것이 좋다. 나쁜 이름은 방치할수록 프로젝트 관리 비용이 증가한다. 게임을 론칭하고 라이브 단계로 진입하면 이름 변경이 거의 불가능해진다. 

 

다섯 번째. 도저히 이름이 떠오르지 않는다면, 네이밍 대상에 문제가 있다는 신호다. 아이템, 오브젝트, 엑터 등 포괄적인 개념의 이름밖에 떠오르지 않는다면 대상이 너무 추상적인 것이므로, 대상을 나누어서 단순화시킨 다음 생각하는 것이 좋다. 또는 완전히 새로운 개념이라면 새로운 이름을 발굴해야 한다. 


# 코드 네이밍​, 차라리 '콩글리시'가 좋을 때도·​··​.

 

코드 네이밍에서는 불필요하게 약자를 사용하지 않는 것을 추천한다. 타이밍 비용을 줄이려다가, 이것을 설명하는 대화 비용이 훨씬 더 늘어나게 된다. 이름이 너무 길어지면 대상(코드)를 나눠보는 것도 좋다. 또한 이름을 이해하기 위해 주석을 달아야 한다면 네이밍을 다시 하는 편이 낫다. 주석은 거짓말을 할 수 있기 때문에 주석보다 이름이 중요하다.

 

또한 코드 네이밍 시 문법을 지키는 것이 좋다. 문법/맞춤법이 틀리면 가독성이 떨어지고 코드의 신뢰성을 의심받게 된다. 많이 쓰는 표현을 사용해야 코드를 검색하기 쉽다. 한글 이름을 고려하는 것도 추천한다. 번역하기 힘들거나 잘 쓰이지 않는 영문 단어보다는 한글(콩글리시)을 쓰는 것이 혼동을 줄일 수 있다. 

 

이름으로 불변성을 강조하는 것도 좋다. 불변 객체는 언제나 예측 가능하고 부작용이 없는 덕분에 최적화하기 쉽다. 그리고 'Play/Stop', 'Begin/End' 등 처럼 반의어가 있는 경우에는 짝을 맞춰서 사용하는 것을 추천한다. 그렇지 않으면 읽는 이에게 혼란을 줄 수 있다. 

실행을 의미하는 동사는 신중하게 사용을 결정해야 한다. 특히, Do는 코드 명칭으로 웬만하면 사용하지 않는 것이 좋다. Perform은 Task나 Action 클래스의 메서드 이름으로만 사용하고, Excute는 전달된 인자를 실행하거나 할 때만 사용하는 것이 좋다. 그 외의 경우에는 Run을 사용하자.

 

상태 변경을 의미하는 동사는 구별해서 사용해야 한다. ​Advance는 내부 로직을 한 프레임 증가시키거나 할 때 사용하고, Update는 변경점을 내부에 반영해서 상태를 갱신할 때 사용해야 한다. Process는 일련의 동작을 순차적으로 실행할 때 사용하고, Handle은 발생한 이벤트를 처리할 때 사용해야 한다. 

 

이처럼 코드 네이밍에서는 조직 내부에서의 혼동을 줄이기 위해, 흔히 사용되는 규칙을 따르는 것이 좋다.


# 디자인 부문은 디자이너가 직접

 

디자인 부문에서의 네이밍은 디자이너가 직접 결정하는 것이 좋다. 디자이너 본인이 제작 중인 게임에 대해 가장 잘 알고 있는 사람일 뿐만 아니라, 여러 파트가 협업하는 작업은 대부분 디자이너의 발주로 시작되기 때문. 참고로 이름을 투표로 결정하면 무조건 망한다. 책 많이 읽고 대화와 타협에 능한 사람을 팀의 작명가로 정하는 것을 추천한다.

 

디자인 부문에서는 한 가지 구성 요소를 변경해도 다른 구성 요소에는 변경이 생기지 않는 ‘직교성’을 신경써야 한다. 소환/파괴/공격 등을 ‘액션’으로, 생물/요정/기계 등을 ‘대상’으로 네이밍하는 방식을 의미한다. 헬멧, 갑옷, 무기, 방패 등의 장비 부위를 총괄하는 명칭도 여기에 해당한다.

 

이름만으로 설명하기 어려운 대상은 숫자나 기호 등을 활용해 코드 네임을 사용하는 것도 좋다. 친숙한 단어를 붙인다면 기억하기 쉬워 전달력이 높아진다.

개발 용어와 게임 내 용어를 구분하는 것도 중요하다. 디자이너는 모든 개발 용어를 게이머에게 그대로 전달할 필요가 없다. 그리고 ‘세션’과 같은 전문 용어나 게임 설정과 맞지 않는 용어는 게임에 그대로 노출하지 않는 것이 좋다. 

 

디자인 네이밍에서 커뮤니티 용어는 지양하는 것이 좋다. 커뮤니티 용어 자체가 나쁜 것은 아니나, 거칠고 자극적인 표현들이 많다. 전형규 연구원은 “범람하는 커뮤니티 신조어를 정제하는 역할이 업계에 있다고 생각한다”며 소신을 밝혔다.


# 어셋 네이밍​은 플랫폼 특성을 고려

 

어셋 부문에서는 엔진 및 플랫폼 특성을 고려한 네이밍을 해야 한다. 아무리 좋은 이름이라도 사용할 수 없다면 쓸모가 없다. 네이밍할 수 있는 이름의 최대 길이와 대소문자 구별 여부 등을 미리 숙지하고, 알파벳과 숫자, 언더스코어( _ )만 사용하는 것이 안전하다.

 

네이밍 시 가능하면 공백을 사용하지 않는 것이 좋다. 이름 앞 또는 뒤에 공백이 있다면 파일을 매우 찾기 어려워진다. 중간에 있어도 상황은 비슷하다. 

 

전형규 연구원은 어셋 네이밍 가이드라인을 마지막으로, 좋은 네이밍의 중요성을 다시 한 번 강조하며 강연을 마무리했다.

이 콘텐츠에 대해 어떻게 생각하시나요?