제니노트

리터럴의 접두사와 접미사 [자바] 본문

Java/Java 입문

리터럴의 접두사와 접미사 [자바]

yangjennie 2023. 2. 10. 10:17
반응형

리터럴의 접미사

 

종류 리터럴 접미사
논리형 false,true 없음
정수형 123 , 0b0101, 077, 0xFF, 100L L
실수형 3.14, 3.0e8 , 1.4f, 0x1.0p-1 f,d
문자형 'A' , '1', '\n' 없음
문자열 "ABC", "123", "A", "true" 없음

모든 값에는 타입이다. 따라서 모든 리터럴에는 타입이 있다. 

구분하는 법은 간단하다. 

3.14 처럼 . 소수점을 가지고 있으면 실수형

홑따옴표 '' 로 감싸져 있으면 문자형, 쌍따옴표 "" 로 감싸져 있으면 문자열이다.

정수형과 실수형의 경우 타입이 여러개이다. 그래서 그냥 구별이 안되어 접미사를 붙이다.

정수형 리터럴에 붙이는 접미사는 L 하나 뿐이다. 100L 처럼 L이 붙어있으면 long 타입이다. 안붙으면 모두 int 형이다

byte, short에는 접미사가 없다. byte, short 에 값을 저장할 때는 int 타입과 동일하게 사용한다.

실수형의 접미사는 f,d를 붙힌다. float의 경우는 f, double의 경우는 d를 붙여준다.

근데 실수형에는 float와 double은 두 개뿐이므로 double의 경우 생략을 허용한다. 

따라서 접미사는 정수형의 L, 실수형의 f 만 기억하면된다.

또한 접미사는 대소문자를 구별하지 않는다. 그러나 소문자 L의 경우 숫자 1과 혼동이 있을 수 있으므로 대문자로 쓰는 것이 좋다.

 

아래에서 실제로 쓰이는 예시를 보자.

 

boolean power = true; 

위의 power 변수에는 true(1) 혹은 false(0)만 넣을 수 있다. 그 외의 값을 넣으면 에러가 발생한다.

 

char ch = 'A';

ch 변수에는 문자형이므로 하나의 문자를 저장할 수 있다. 

 

String str = "ABC";

여러 문자를 저장, 즉 문자열을 저장할 때에는 위와 같이 저장한다. 

 

'\n'

문자형 '\n'는 \와 n을 두 개의 문자를 저장하는 것 같지만, 사실상 줄 바꿈이라는 하나의 문자를 저장하는 것이다(개행문자). 이 외에도 탭이나 백스페이스 등과 같은 특수문자들은 앞의 역슬래쉬 \를 붙여서 표현하면 된다.  

 

String a = "A";

문자 하나를 큰따옴표로 묶었다. 하나의 문자도 이렇게 큰따옴표로 묶을 수 있다. 이렇게 큰 따옴표로 묶었다고 문자형이 아니라 이는 문자열이다.

 

byte b = 127;

리터럴 127의 타입은 정수이다. 접미사가 없으니 integer 타입이다. byte와 short는 접미사가 없으므로 byte의 값에 저장할 때에는 이처럼 integer 타입의 리터럴을 사용하면 된다. 

대신, byte 변수가 저장할 수 있는 범위의 값이 여야 한다. byte의 범위는 -128~127이다. 127은 범위 내에 있으므로 이를 b에 저장할 수 있다.

 

byte b = 128; //에러 

이는 byte의 범위를 벗어나므로 에러가 발생된다. 

 

int i=100; //10진수

int oct = 0100;//8진수

int hex = 0x100; //16진수 

접두사가 아무것도 안 붙으면 10진수, 0이 붙으면 8진수, 0x가 붙으면 16진수이다. 0은 숫자 0이다.

JDK1.7부터 접두사 0b 가 추가 되었는데 이는 이진수를 뜻한다. ex) 0 b0101 

 

접두사의 경우 접미사와 같이 대소문자 구별을 하지 않는다. 그래서 0B나 0X와 쓰는 것이 가능하다.

 

long l = 10_000_000_000L;

integer의 표현 가능범위가 대략 20억 정도이므로, 20억이 넘는 값은 Long 타입 변수에 넣어준다. 이때, 끝에 L 접미사를 붙여주는 것을 잊지 말아야 한다. 숫자 사이의 밑줄을은 JDK 1.7부터 사용된 것으로 100억같이 큰 수를 표현할 때 알아보기 쉬우라고 넣는 것이다. 보통 세 자리마다 넣지만 원하는 곳에 아무 데나 넣어도 된다. 

 

long l = 100; 

long 타입 변수에 integer 리터럴을 사용하여도 되지만, 위의 100억의 경우 integer 최댓값인 20억을 넘는 값이기 때문에 반드시 접미사 L을 붙여야 한다.(L을 안 붙이면 에러가 발생한다)

 

float f = 3.14f;

float 혹은 double을 넣을 때는 접미사를 각 타입에 맞게 넣어주어야 한다. float 접미사 f는 생략이 불가하다.

만약 생략 시 이는 double 타입이 되므로 float 타입의 변수에 double형 리터럴을 넣지 못해서 에러가 발생한다. 

double d = 3.14d;

double 타입의 접미사 d는 생략 가능 

 

이렇듯 변수에 값을 넣을 때, 기본적으로 변수의 타입과 리터럴의 타입이 일치해야 한다. 하지만 별도로 일치하지 않지만 허용되는 경우가 있다. 이는 해당 글을 참고하면 된다 

 

10. -----> 10.0과 같은 의미

. 10 -----> 0.10과 같은 의미 

이 두 소수 모두 소수점이 있으니 실수형이고 접미사가 없으므로 double형의 리터럴이다.

10f -----> 10.0과 같은 의미

정수형처럼 보이지만 f , 실수형 접미사가 붙었으므로 실수형이다.  

1e3 -----> 1000.0과 같은 의미

e는 10의 n제곱을 의미한다. 그래서 e의 3승이라 1000이라고 생각할 수 있지만 e는 실수형에서 쓰이는 기호이다. 따라서 이도 실수형이다. 접미사가 없으므로 double형이다.

 

이처럼 실수형 리터럴에는 f와 d 외에도 소수점(.)이나 10의 n제곱을 의미하는 e가 있으면 실수형 리터럴이란 것을 유의하자

 

출처 : 자바의 정석 3판 강의 

https://www.youtube.com/watch?v=_fz8XCW3NJg&list=PLW2UjW795-f7XMJRP0c90MIPlDgsbbGQz&index=10

 

반응형

'Java > Java 입문' 카테고리의 다른 글

printf()에 대하여 [자바]  (0) 2023.02.26
classpath 설정하기 [자바]  (0) 2023.02.23
문자와 문자열 [자바]  (0) 2023.02.10
변수와 리터럴의 타입 불일치 [자바]  (0) 2023.02.10
변수,상수,리터럴 [자바]  (0) 2023.02.08
Comments