본문 바로가기
카테고리 없음

변수명과 함수명을 더 잘 만드는 방법

by xylavo 2025. 3. 28.

프로그래밍에서 변수명과 함수명을 지정하는 방식은 단순한 형식적 문제가 아닌 코드의 가독성, 유지보수성, 그리고 협업 효율성에 직접적인 영향을 미치는 중요한 요소입니다. 적절한 네이밍 컨벤션을 따르는 것은 코드가 자체 문서화되는 효과를 가져오며, 다른 개발자들이 코드를 이해하는 데 드는 시간과 노력을 크게 줄여줍니다. 이번 글에서는 다양한 도메인에 특화된 네이밍 패턴, 함수 네이밍의 효과적인 접근법, 그리고 레거시 코드의 리팩토링을 통한 네이밍 개선에 대해 살펴보겠습니다.

도메인 특화 네이밍: 산업별 권장되는 변수/함수명 패턴

모든 산업과 도메인에는 고유한 용어와 개념이 존재합니다. 도메인 특화 네이밍은 이러한 특성을 코드에 반영하여, 해당 분야의 전문가와 개발자 사이의 소통을 원활하게 만드는 방식입니다.

금융 분야의 경우, calculateInterestRate(), amortizePayment(), validateTransaction() 같은 함수명은 업계 표준 용어를 직접적으로 반영합니다. 변수명에서도 principalAmount, annualPercentageRate, maturityDate와 같이 금융 전문가가 즉시 이해할 수 있는 용어를 사용합니다.

의료 시스템에서는 getPatientVitals(), recordMedication(), calculateBMI() 같은 함수명과 diastolicPressure, hemoglobinCount, allergyHistory와 같은 변수명이 널리 사용됩니다. 이런 네이밍은 의료 전문용어를 정확히 반영하여 의사나 간호사와 같은 도메인 전문가와 개발자 간의 의사소통을 돕습니다.

e-커머스 시스템에서는 addToCart(), processOrder(), calculateShippingCost()와 같은 함수명과 productInventory, shippingAddress, discountCode와 같은 변수명을 자주 볼 수 있습니다.

도메인 특화 네이밍을 효과적으로 사용하려면, 해당 분야의 용어집을 개발팀 내에서 공유하고, 비즈니스 요구사항 문서에서 사용된 용어를 일관되게 코드에 반영하는 것이 중요합니다. 이는 요구사항과 코드 사이의 간극을 줄이고, 도메인 주도 설계(Domain-Driven Design)의 핵심 원칙과도 일맥상통합니다.

함수 네이밍의 행동 중심 접근법: 동사로 시작하기의 중요성

함수는 본질적으로 특정 작업을 수행하는 코드 블록이기 때문에, 함수명은 그 행동이나 목적을 명확하게 표현해야 합니다. 이를 위한 가장 효과적인 방법이 바로 '동사로 시작하는 함수명'입니다. 이러한 행동 중심 접근법은 코드의 가독성을 크게 향상하고 함수의 의도를 즉각적으로 전달합니다.

예를 들어, getUserData()는 사용자 데이터를 가져오는 행동을, calculateTotal()은 합계를 계산하는 행동을, validateInput()은 입력값을 검증하는 행동을 명확히 나타냅니다. 이처럼 동사로 시작하는 함수명은 해당 함수가 무엇을 '하는지'에 초점을 맞추게 됩니다.

특히 주목할 점은 함수 유형에 따라 적절한 동사를 선택하는 것의 중요성입니다:

  • Getter 함수: get, fetch, retrieve
  • Setter 함수: set, update, modify
  • 계산 함수: calculate, compute, determine
  • 검증 함수: validate, verify, check
  • 변환 함수: convert, transform, translate

불리언 값을 반환하는 함수는 종종 is, has, can, should와 같은 조동사나 상태 동사로 시작합니다. 예를 들어, isValid(), hasPermission(), canProceed()는 모두 예/아니오 질문에 대답하는 형태의 함수명입니다.

행동 중심 접근법을 일관되게 유지하는 것은 API 설계에서도 중요합니다. 예를 들어, RESTful API에서는 GET, POST, PUT, DELETE와 같은 HTTP 메서드가 이미 동사 역할을 하므로, 엔드포인트 자체는 명사(리소스)로 표현하는 것이 관례입니다.

함수명에 동사를 사용함으로써 코드는 마치 이야기를 읽는 것처럼 자연스럽게 흐르며, 새로운 팀원이나 미래의 개발자가 코드의 의도를 직관적으로 이해할 수 있게 됩니다. 이는, "코드는 작성될 때보다 읽힐 때가 더 많다"라는 프로그래밍의 기본 원칙에도 부합합니다.

레거시 코드 리팩토링: 일관된 네이밍 컨벤션으로 코드 품질 개선하기

오래된 코드베이스를 관리하다 보면 다양한 시기에 여러 개발자가 작성한 코드가 뒤섞여 있는 경우가 많습니다. 이로 인해 네이밍 컨벤션이 일관되지 않고, 변수나 함수의 목적이 명확하지 않은 상황이 발생합니다. 레거시 코드를 효과적으로 리팩토링하면 코드의 품질을 크게 개선할 수 있으며, 그 시작점은 바로 일관된 네이밍 컨벤션의 적용입니다.

리팩토링 시 가장 먼저 고려해야 할 것은 팀 내에서 합의된 네이밍 스타일 가이드를 정립하는 것입니다. 이 가이드는 변수, 함수, 클래스, 상수 등 각 요소별로 어떤 네이밍 패턴을 사용할지 명확히 정의해야 합니다. 예를 들어, 자바스크립트 프로젝트에서는 변수와 함수에 카멜케이스, 클래스에 파스칼케이스, 상수에 대문자 스네이크케이스를 사용하기로 합의할 수 있습니다.

리팩토링의 실질적인 접근 방식으로는 점진적 개선이 효과적입니다. 모든 코드를 한 번에 변경하려 시도하면 예기치 않은 버그와 회귀 문제가 발생할 가능성이 높아집니다. 대신, 다음과 같은 전략을 고려해 보세요:

  1. 새로 수정하는 파일부터 네이밍 컨벤션을 적용하고, 이를 점차 확장해 나가기
  2. 자동화 도구(linter, formatter)를 활용하여 일관성 있는 네이밍 강제하기
  3. 코드 리뷰 프로세스에서 네이밍 컨벤션 준수 여부 확인하기
  4. 명확하지 않은 약어(예: calc, proc, tmp)를 완전한 단어로 대체하기
  5. 많은 사이드 이펙트가 있는 함수를 작은 단위로 분리하고 각각 명확한 이름 부여하기

특히 tmp, data, info와 같은 모호한 변수명이나 process(), handle(), manage()와 같은 추상적인 함수명은 더 구체적이고 명확한 이름으로 변경하는 것이 중요합니다. 예를 들어, tmp는 temporaryUserProfile로, process()는 processPaymentTransaction()으로 변경하여 구체성을 높일 수 있습니다.

 

변수명과 함수명은 코드의 의도와 목적을 전달하는 중요한 요소로, 효과적인 네이밍은 코드의 품질과 유지보수성을 크게 향상시킵니다. 도메인 특화 네이밍, 행동 중심 접근법, 일관된 리팩토링을 통해 더 읽기 쉽고 이해하기 쉬운 코드를 작성할 수 있으며, 이는 궁극적으로 개발 생산성과 팀 협업의 효율성으로 이어집니다.