숫자 리터럴에 구분자로 밑줄(_) 사용 가능

Java 프로젝트를 보면서 어떤 기능구현을 할때 다른분들은 어떻게 구현을 했을지 궁금해서 github나 구글에 항상 비슷한 기능 또는 서비스를 하는 프로젝트를 찾아보고는 하는데요.

이번에 다른분들의 프로젝트를 찾아보다가 처음보는 사용법이 있어서 저건 뭔가 한번 찾아보았고 오늘은 그걸한번 소개해볼까 합니다. (저만 처음보는거 일수도…)
자세한 내용은 Oracle의 문서에도 나와있습니다. 링크

우리가 숫자를 쓸때 구분기호로 ,를 많이 씁니다.
예를들어 백만원을 적는다고 하면 1000000 이렇게 적는것 보다는 1,000,000 이렇게 적는게
눈에 확 들어오고 빠르게 얼마인지 확인 할수 있죠.

Java에서도 숫자를 사용할때 쉽게 알아볼수 있도록 Java 7 이후 버젼부터 밑줄(_)을 이용한 구분자 사용이 가능합니다.

아래 예제코드를 보면 구분자를 사용하지 않을땐 변수명에 숫자의 크기가 적혀있지 않는 경우 한눈에 확인하기가 어려운데요.

1
2
3
4
5
// 구분자 사용하지 않음
int millionInt = 1000000;
long billionLong = 1000000000L;
float fiFloat = 3.141592F;
double fiDouble = 3.1415926535;

아래 코드처럼 구분자를 넣어주면 좀더 보기 쉽게 사용할 수 있습니다.
(물론 결과값은 위 코드와 동일합니다.)

다만 구분자의 위치는 개발자가 임의로 적을수 있어서 int에는 숫자 3개 간격으로, long에는 2개 간격으로 해도 전혀 문제되지는 않습니다만. 기본적으로 평소에 콤마를 구분자로 사용할때 처럼 3개 간격으로 구분자를 넣는게 제일 좋을거 같습니다.

1
2
3
4
5
int millionInt = 1_000_000;
// 아래처럼 해도 문제는 없지만 보기가 불편합니다.
long billionLong = 10_00_00_00_00L;
float fiFloat = 3.14_15_92F;
double fiDouble = 3.1_41_59_26_53_5;

아래는 밑줄 구분자가 사용되면 안되는 위치를 작성한건데요, 아래코드 처럼 작성하면 에러가 발생하게 됩니다.

1
2
3
4
5
6
int millionInt1 = 1_000_000_;        // 숫자의 맨 끝에 구분자가 오면 안됩니다.
int millionInt2 = _1000_000; // 숫자의 맨 앞에 구분자가 오면 안됩니다.
long billionLong = 10_00_00_00_00_L; // 접미사 L앞에 구분자가 오면 안됩니다.
float fiFloat1 = 3.14_15_92_F; // 접미사 F앞에 구분자가 오면 안됩니다.
float fiFloat2 = 3._141592F; // 소수점의 뒤에 구분자가 오면 안됩니다.
double fiDouble = 3_.141592; // 소수점의 앞에 구분자가 오면 안됩니다.

위와 같은 케이스는 사용이 불가능하고 문서에서는 In positions where a string of digits is expected
이 케이스에서도 사용하면 안된다 라고 하는데
이 케이스는 정확하게 뭔지를 잘 모르겠지만 예상으로는 숫자가 적을때(한눈에 알아볼 수 있을때) 사용하지 말아라 라고 하는거 같습니다.

예를들어 int ten = 1_0; 이렇게 한눈에 알아볼수 있는 숫자에 구분자를 넣지 말아라 라고 하는거 같습니다. (이렇게 사용할때는 에러가 발생은 하지 않는데 권장사항 같습니다.)

아직까지 제가 Java에서 제공해주는 기능중에 모르는게 너무 많은거 같아서 반성을 해봅니다.
Java 버젼별로 제공해주는 기능에 대해서도 한번 공부 해야겠습니다.

공유하기