안녕하세요. 인포그랩 프로덕트 팀에서 백엔드 엔지니어로 일하는 Andy입니다. 오늘은 제가 평소 코드를 작성할 때 중요하게 생각하는 주제인 네이밍(naming: 이름짓기)을 이야기해 보려고 합니다.

개발자는 일반적으로 클래스, 변수, 함수 등을 네이밍하는데요. 네이밍은 코드의 가독성, 유지보수성, 협업 효율성에 큰 영향을 미칩니다. 예를 들어, 변수나 함수 이름을 실제 의미와 일치하도록 짓고, 이름만 봐도 내용을 즉시 이해하도록 지으면 개발팀이 빠르고 정확하게 소통할 수 있고요. 이는 개발 생산성을 높여줍니다.
이에 많은 개발자가 항상 고민하면서 클래스, 변수, 함수 등을 네이밍하죠. 저도 코드 작성 과정에서 네이밍할 때, ‘이 이름이 정말 직관적인가?’라고 자주 생각합니다. 특히 ‘다른 팀원들이 이름을 보고도 코드 역할을 바로 알도록 네이밍하는 방법이 늘 고민인데요. 이러한 이유로 평소 네이밍을 잘하는 방법을 조사하고 연구하죠. 이 글에서는 제가 학습한 내용을 토대로 “개발 생산성을 높이는 가독성 좋은 코드 네이밍 비법 5가지”를 소개하겠습니다.
네이밍 잘해야 하는 이유
개발자는 코드를 작성할 때 로직을 잘 짜야 하죠. 그러나 다른 팀원들이 코드를 직관적으로 정확히 이해하도록 네이밍을 잘하는 것도 중요합니다. 아래 예제와 함께 그 이유를 살펴보겠습니다.
function doStuff(data: any) {
const result = [];
for (const item of data) {
if (item.isActive) {
result.push(item);
}
}
return result;
}
위 예제에서 doStuff
라는 이름만 보면, 이 함수 역할을 바로 이해하기 어렵습니다. Stuff
라는 단어가 추상적이라 구체적인 의미가 바로 전달되지 않고요. 이에 함수 내부 로직까지 샅샅이 살펴보게 되죠. 함수 역할을 정확히 파악하는 데 시간이 걸립니다.
또 이 예제에서는 함수 입력 인자와 내부 변수가 data
, item
, result
라는 단어로 쓰였는데요. 이 또한 의미를 즉시 인지하기에는 일반적이고 모호한 단어입니다. 누군가는 생각 회로를 여러 번 돌려야 내용을 이해할 수도 있습니다.
다른 팀원들이 위 예제를 보고 doStuff
함수를 빠르게 사용하고 수정할 수 있을까요? 함수 역할을 정확히 파악하지 못해 부작용이 생기지는 않을까요? 그렇다면 이 문제를 어떻게 예방해야 할까요? 저는 다음 5가지 네이밍 방법을 제안합니다.
- 클래스/변수/함수 대상과 행위 나타내기
- 명사와 동사 활용하기
- 시제와 동사 형태 구체화하기
- 필수 접두사/접미사만 사용하기
- 불명확한 약어 대신 명확한 본딧말 쓰기
비법 1. 클래스/변수/함수 대상과 행위 표현
이름에 ‘클래스/변수/함수 등의 대상과 행위’를 담으면 가독성이 좋아집니다. 이로써 대상의 책임 범위, 대상을 사용하는 코드 역할을 정확히 드러낼 수 있죠.
반면에 ‘클래스/변수/함수 등이 언제, 어디서, 어떻게 사용되는지’를 이름에 넣으면, ‘클래스/변수/함수 등의 역할’이 드러나지 않아 내용을 바로 이해하기 어렵습니다.
함수 이름과 변수 이름의 잘못된 예와 올바른 예를 살펴보겠습니다.
잘못된 예
-
handleButtonClickInProfileScreen
: 프로필 화면에서 버튼을 클릭할 때 호출되는 함수이름에 ‘함수가 어디서(프로필 화면), 언제(버튼 클릭 시) 사용되는지’만 나오는데요. 함수가 호출될 때 수행하는 역할을 알 수 없습니다.
-
isNavigatedFromHomeScreen
: 홈 화면에서 이동할 때 true가 되는 변숫값이 이름도 ‘변숫값이 어디서(홈 화면에서 이 동) 사용되는지’만 나와 값의 의미를 정확히 파악하기 어렵습니다.
올바른 예
-
ProductListProvider
: 상품 리스트를 제공하는 클래스이름에 ‘상품을 대상으로 제공되는 클래스’라고 클래스의 대상과 역할을 분명히 표현했습니다.
-
showErrorModal
: 에러 모달 창을 보여주는 함수‘’에러’라는 대상에 모달을 보여주는 함수’라고 함수의 대상과 역할을 이름에 구체적으로 나타냈습니다.
비법 2. 명사와 동사 활용
명사/명사구, 동사를 이름에 사용해도 가독성 향상에 도움이 됩니다. 유형별 사용 사례는 다음과 같습니다.
명사/명사구
명사/명사구는 클래스, 인터페이스, 변수, 인수, 객체를 반환하는 함수 이름에 활용합니다. 네이밍 대상을 이름 마지막에 두면 함수 의미를 효과적으로 전달할 수 있죠.
예를 들어, ‘버튼의 넓이’를 나타내는 변수를 네이밍해 봅시다. 이 변수에서 가장 중요한 단어는 넓이입니다. 따라서 변수 이름은 buttonWidth
가 적합합니다. 만약 widthButton
이라고 네이밍하면, 다음 문제가 생길 수 있는데요.
- 어순에 따라 “넓이 버튼”으로 직역돼 변수 속성이 모호해집니다.
- “넓이 버튼”은 ‘넓이를 조절하는 버튼’으로 오해될 수 있습니다.
또 다른 예로, ‘모바일 모드일 때 사용하는 버튼의 넓이’를 나타내는 변수를 네이밍해 보죠. 이 변수 이름에는 ‘모바일 모드’라는 정보가 들어가야 합니다.
전치사를 넣어 buttonWidthInMobileMode
라고 네이밍해 봅시다. 이름이 길지만 전치사가 buttonWidth
와 MobileMode
라는 단어를 효과적으로 구분해 줍니다. 이로써 변수가 잘 이해되고, ‘이 변수가 어디에 쓰이는지’ 명확히 알 수 있죠.
전치사를 활용한 네이밍은 indexOf(value)
, maxValueIn(array)
같은 함수에도 사용되는데요. 전치사를 넣으니까 ‘함수/변수가 어디에 쓰이고, 어떤 맥락에 사용되는지’ 바로 이해할 수 있습니다.
동사
동사는 메서드, 함수 이름에 사용합니다. 이는 동작 내용을 직관적으로 표현해 함수가 수행할 작업을 분명하게 보여줍니다. 특히 동사 원형을 함수 이름 맨 앞에 두면 함수 의미를 정확하게 바로 이해할 수 있죠.
예를 들어, “상품을 구매하는” 함수를 네이밍해 봅시다. productPurchase
라고 이름을 지으면, 어순을 고려할 때 이를 ‘상품을 구매’한 게 아닌 ‘구매된 상품’으로 오해할 수 있습니다. 그러나 purchaseProduct
라고 네이밍하면, 어순에 따라 “상품을 구매하다”라는 의미가 올바로 전달됩니다.
비법 3. 시제와 동사 형태 구체화
이름에 시제와 동사 형태를 구체적으로 나타내도 가독성이 한층 더 높아집니다.
예를 들어, ‘사용자 상품 구매 여부의 boolean
값’을 저장하는 변수를 네이밍해 봅시다. 이때 purchaseFlag
라고 네이밍하면, 개발자 동료가 이렇게 오해할 수 있습니다.
true
면 ‘사용자가 구매 가능하다’는 의미인가? 아니면 ‘이미 구매했다’는 의미인가?
이 변수 이름을 isPurchased
로 변경하면, 이러한 문제를 막을 수 있는데요. Purchase
앞에 is
, 뒤에 ed
가 붙어 시제(현재)와 동사 형태(수동태)를 구체화해 의미를 더 명료하게 드러내죠. 그 결과, 이름만 봐도 ‘이 변수는 true
일 때, ‘이미 구매했다’는 의미구나’라고 정확하게 해석할 수 있습니다.
또 다른 예로, ‘사용자의 프로필 업데이트 여부의 boolean
값’을 저장하는 변수를 네이밍해봅시다. 이를 updateProfileFlag
로 네이밍하면, 다음 혼란이 생길 수 있는데요.
- ‘업데이트가 가능하다’는 의미인가?
- ‘이미 업데이트했다’는 건가?
- ‘업데이트 중’이라는 의미인가?
이 변수 이름을 isProfileUpdated
로 변경하면, 이러한 문제를 방지할 수 있습니다. Profile
앞에 is