BioPlayground

🧬
목록으로

변수 이름 짓기가 코딩의 절반이다

camelCase, PascalCase, snake_case 차이와 좋은 변수명 짓기. 바이오 데이터 변수 실례와 NCBI/ENSEMBL 명명 규칙 연결.

입문
|
15
|
검증 완료 (2026-06)
네이밍 컨벤션camelCase코드 가독성변수명협업바이오 데이터 변수
트랙 진행률0/8 (0%)

변수 이름 짓기가 코딩의 절반이다

코딩에서 가장 어려운 일이 뭘까요? 알고리즘? 디버깅? 실은 프로그래머들 사이에서 유명한 농담이 있습니다: "컴퓨터 과학에서 어려운 것은 딱 두 가지 — 캐시 무효화와 이름 짓기."

농담이지만 진짜입니다. 변수, 함수, 파일의 이름은 코드의 설명서 역할을 합니다. 이름만 잘 지으면 주석이 필요 없고, 6개월 후에 코드를 다시 열어도 바로 이해할 수 있습니다.

나쁜 이름 vs 좋은 이름

javascript
// 나쁜 예
const d = [1.85, 0.42, 2.10, 0.15];
const t = 0.5;
let c = 0;
for (let i = 0; i < d.length; i++) {
  if (d[i] >= t) c++;
}

// 좋은 예
const odValues = [1.85, 0.42, 2.10, 0.15];
const odThreshold = 0.5;
let passedCount = 0;
for (let i = 0; i < odValues.length; i++) {
  if (odValues[i] >= odThreshold) passedCount++;
}

두 코드는 완전히 같은 동작을 합니다. 하지만 아래 코드는 읽는 순간 "OD 값들 중에서 기준치 이상인 것을 세는 코드구나"라고 바로 이해됩니다. d, t, c로는 절대 알 수 없는 정보입니다.

표기법 4가지: 언제 뭘 쓰나

코딩에서 이름을 짓는 규칙을 **네이밍 컨벤션(Naming Convention)**이라고 합니다. 4가지 주요 표기법이 있습니다:

표기법형태사용 대상예시
camelCase첫 단어 소문자, 이후 대문자변수, 함수sampleCount, getGeneInfo()
PascalCase모든 단어 대문자 시작클래스, React 컴포넌트GeneCard, SampleList
snake_case소문자 + 밑줄Python 변수/함수, 파일명sample_count, gene_info.py
SCREAMING_SNAKE대문자 + 밑줄상수MAX_RETRY, OD_THRESHOLD

JavaScript에서는 camelCase가 기본입니다. Python에서는 snake_case가 기본입니다. 이것은 각 언어 커뮤니티의 약속이므로, 규칙을 따르면 다른 개발자들이 코드를 읽기 쉬워집니다.

javascript
// JavaScript (camelCase)
const sampleCount = 96;
function calculatePassRate(samples) { /* ... */ }

// React 컴포넌트 (PascalCase)
function GeneCard(props) { /* ... */ }

// 상수 (SCREAMING_SNAKE)
const MAX_OD_VALUE = 4.0;
const MIN_SAMPLE_VOLUME = 0.5;

바이오 데이터와 네이밍: 실전 문제

생명공학 데이터를 코딩할 때 특유의 고민이 있습니다. 유전자 이름, 데이터베이스 식별자, 분석 파라미터를 변수명으로 어떻게 정제할까요?

유전체 기관별 명명 규칙이 다르다

기관/DB유전자 표기예시
NCBI (Gene)대문자 이탤릭 (인간)TP53, BRCA1
ENSEMBLENSG + 숫자 IDENSG00000141510
UniProt단백질명_종 약자P53_HUMAN
HGNC공식 심볼 (대문자)TP53, EGFR

코드에서는 이탤릭을 쓸 수 없으므로, 변수명으로 옮길 때 규칙이 필요합니다:

javascript
// 유전자 이름은 그대로 문자열로
const geneName = "TP53";
const ensemblId = "ENSG00000141510";

// 여러 유전자를 다룰 때
const targetGenes = ["TP53", "BRCA1", "EGFR"];

// 분석 결과 객체
const geneExpression = {
  TP53: 12.4,
  BRCA1: 8.7,
  EGFR: 15.2
};

유전자 이름 자체(TP53)는 데이터이므로 문자열로 넣고, 그것을 담는 변수(geneName, targetGenes)는 camelCase로 짓습니다.

좋은 바이오 변수명 예시

나쁜 이름좋은 이름이유
dataqcResults무슨 데이터인지 알 수 있음
valodValue어떤 값인지 명확
listfailedSamples무엇의 목록인지 명확
flagisPassedboolean은 is/has로 시작
nsampleCount무엇의 개수인지 명확
temprawSequence임시라는 이유로 이름을 포기하지 말 것
resapiResponse약어보다 완전한 단어

이름 짓기 5원칙

1. 의도를 드러내라

변수명만 보고 "이것이 무엇인지" 알 수 있어야 합니다. d보다 elapsedDays, x보다 currentIndex.

2. 축약하지 마라

cnt보다 count, btn보다 button, msg보다 message. 자동완성이 있으니 타이핑 시간은 동일합니다. 단, 관례가 굳어진 축약어는 예외: id, url, api, db.

3. Boolean은 is/has/can으로 시작

javascript
const isPassed = od >= 1.0;
const hasPermission = user.role === "admin";
const canDelete = hasPermission && !isLocked;

passed만 쓰면 "통과된 것"인지 "통과 여부"인지 모호합니다. isPassed는 명확히 true/false를 의미합니다.

4. 함수는 동사로 시작

javascript
function calculatePassRate(samples) { /* ... */ }
function fetchGeneData(geneId) { /* ... */ }
function formatDate(timestamp) { /* ... */ }

함수는 동작이므로 동사가 자연스럽습니다. passRate()보다 calculatePassRate()가 "이 함수가 통과율을 계산한다"는 것을 바로 알려줍니다.

5. 일관성을 유지하라

한 프로젝트에서 "가져오기"를 get, fetch, retrieve, load 네 가지로 섞어 쓰면 혼란스럽습니다. 하나를 정해서 일관되게 쓰세요. 팀 프로젝트라면 이 규칙을 문서화합니다.

파일명과 폴더명

변수만 규칙이 있는 게 아닙니다. 파일과 폴더도 마찬가지입니다:

대상규칙예시
JavaScript 파일camelCase 또는 kebab-casegeneUtils.js, gene-utils.js
React 컴포넌트 파일PascalCaseGeneCard.tsx, SampleList.tsx
Python 파일snake_casegene_analysis.py, qc_report.py
CSS 클래스kebab-casegene-card, sample-list
환경 변수SCREAMING_SNAKEDATABASE_URL, API_KEY

kebab-case는 단어를 하이픈(-)으로 연결하는 방식입니다. URL이나 CSS에서 주로 쓰입니다.

결론: 이름은 코드의 첫인상이다

좋은 이름을 짓는 데 시간을 쓰는 것은 낭비가 아닙니다. 코드는 한 번 쓰고 수십 번 읽힙니다. 쓰는 데 30초 더 걸려도, 읽을 때마다 10초씩 절약된다면 — 그것은 투자입니다.

논문에서 Figure의 축 라벨을 "value1", "value2"로 적으면 리뷰어가 리젝트하듯, 코드에서 d, t, c로 이름을 짓으면 미래의 자신이 고통받습니다.