숫자 리터럴 중간에 들어간 언더바(_)는 C# 7.0부터 도입된 '디지트 구분 기호(Digit Separator)'라는 문법입니다.
MFC(C++)나 레거시 WinForm 환경에서 오랫동안 개발하시던 분들에게는 다소 낯설 수 있지만, 현대 C# 프로그래밍에서는 가독성을 높이기 위해 공식적으로 지원하고 권장하는 기능입니다. 이 기능의 작동 원리와 유용한 활용 팁을 정리해 드릴게요.
## 1. 작동 원리: 컴파일러는 _를 무시합니다
컴파일러는 코드를 빌드할 때 숫자 사이에 있는 언더바(_)를 단순한 공백처럼 취급하여 완전히 무시합니다.
즉, 개발자가 소스코드를 읽을 때는 60_000으로 보이지만, 빌드가 완료되어 실행 파일(IL 코드)이 될 때는 컴파일러가 알아서 60000이라는 순수한 int 값으로 바꾸어 처리합니다.
따라서 성능 저하나 메모리 낭비가 전혀 없는 0ms짜리 문법 설탕(Syntactic Sugar)입니다.
## 2. 왜 사용할까요? (가독성 향상)
우리가 일상생활에서 큰 숫자를 쓸 때 세 자리마다 콤마(예: 60,000)를 찍어 가독성을 높이는 것과 같은 이치입니다. 소스코드 안에서는 콤마(,)가 문법적인 구분자로 사용되기 때문에, 대신 언더바(_)를 사용하도록 약속한 것입니다.
특히 질문해주신 전력/배전 제어 시스템이나 타이머 연산 프로그래밍을 할 때 밀리초(ms) 단위를 많이 다루게 되는데, 이때 언더바가 있고 없고의 가독성 차이가 매우 큽니다.
// 언더바가 없는 경우 (0의 개수를 눈으로 하나하나 세어야 함)
public int CheckIntervalMs { get; set; } = 3600000;
// 디지트 구분 기호를 사용한 경우 (한눈에 360만 ms = 1시간임을 알 수 있음)
public int CheckIntervalMs { get; set; } = 3_600_000;
## 3. 활용 팁: 꼭 세 자리가 아니어도 됩니다
이 구분 기호는 콤마와 달라서 원하는 위치에, 원하는 개수만큼 자유롭게 넣을 수 있습니다.
전력 제어 시스템에서 자주 쓰이는 16진수 레지스터 주소나 2진수 비트 마스크(Bit Mask) 값을 세팅할 때 4자리 혹은 8자리 단위로 쪼개어 쓰면 가독성이 극대화됩니다.
// 16진수(Hex) 바이트 단위 분할 (C# 7.2부터 앞자리 변환부 바로 뒤에도 가능)
int address = 0xAF_BF_34_D2;
// 2진수(Binary) 비트 마스크 4비트(1니블) 단위 분할
int faultStatusMask = 0b0001_1100_0101_0000;
// 그냥 내 마음대로 분할 (전화번호나 사번 형식 등)
int entecId = 1996_11_25;
## 💡 결론
"int 타입 초기화 시 언더바(_)를 사용하는 것은 C# 공식 문법이며, 빌드 시 컴파일러가 완전히 제거하므로 성능 하락 없이 코드의 가독성만 높여주는 매우 유용한 기능이다!"
'.NET' 카테고리의 다른 글
| C#의 public sealed record 이해하기 (0) | 2026.06.17 |
|---|---|
| ResiliencePipeline 클래스란 무엇인지? (0) | 2026.06.16 |
| IServiceCollection를 확장하는 메서드 (0) | 2026.06.16 |
| MFC 개발자 대상 .NET 8 기반 IPC 샘플 코드 기반 교육 (0) | 2026.06.16 |
| .NET 8 개발 전환을 위한 핵심 개발자 패러다임 시프트 교육 로드맵 (0) | 2026.06.16 |