728x90
리터럴(literal)
Literal은 program에서 사용하는 모든 숫자(정수, 실수), 문자, 문자열, 논리 값 등을 의미한다. (ex. 10, 3.141592, 'A', "String", true, false 등...)
- Literal에 해당되는 값은 특정 메모리 공간인 상수 풀(constant pool)에 위치한다.
- 필요한 경우 constant pool에서 가져와 사용한다.
- constant pool에 저장할 때에 정수는 int type, 실수는 double type으로 저장
- 따라서 별도로 long type이나 float type으로 저장하고 싶은 경우 식별자(L, l, F, f)를 명시해줘야 한다.
프로그램의 로딩 과정에서 사용된 literal들이 constant pool에 저장되고, 이후에 사용되는 경우 constant pool에서 가져와 변수에 대입/복사하는 방식으로 literal을 사용하는 구조이다.
따라서 literal이라고 하는 건 프로그램이 컴파일되는 시점에서 정해져서 바뀌지 않기 때문에, 상수라고 생각할 수 있다. 또한 그동안 생각해온 변수에 다른 값이 담기는 과정을 이제는 다음과 같이 생각할 수 있을 것 같다.
int x = 3; // 3이라는 int type literal이 변수 x에 복사되어있다.
x = 5; // 5라는 int type literal을 constant pool에서 찾아 변수 x에 할당한다.
Literal type 정리
- 정수 리터럴
- 실수 리터럴
- 문자 리터럴
- 문자열 리터럴
- 논리값 리터럴
정수 리터럴
2진수, 8진수, 10진수, 16진수 리터럴에 해당
int a = 0b10; // 2진수
int a = 010; // 8진수
int a = 10; // 10진수
int a = 0xA; // 16진수
long a = 10000000L; // long type literal은 숫자 뒤에 L or l을 표기해줘야 한다.
0b10 : 0b로 시작하면 2진수 리터럴
010 : 0으로 시작하면 8진수 리터럴
10 : 그냥 표기 시 10진수 리터럴
0xA : 0x로 시작하면 16진수 리터럴
실수 리터럴
소수점 형태로 저장되는 리터럴을 의미한다. float or double type으로 컴파일된다.
double d = 0.11111;
double d = 11111E-5; // E-5는 10의 -5승을 의미
float f = 0.1111f; // float type literal은 숫자 뒤에 f를 붙여야 한다.
문자 리터럴
문자 리터럴은 (', single quote)을 붙여서 표현하며 char type으로 컴파일된다.
char c = 'A';
char c = 'a';
// 2바이트의 유니코드에 대응되는 값이 저장된다.
// 인코딩및 디코딩 방식은 유니코드를 따른다.
문자열 리터럴
문자열 리터럴은 (", double quote)을 붙여서 표현하며, String type으로 컴파일된다.
String str = "Hello Java";
논리 값 리터럴과 null 리터럴
논리값 리터럴은 boolean type 변수로 컴파일되거나 조건문에서 사용된다.
boolean isTrue = true;
boolean statement = 10 > a; // a의 값에 따라 true or false가 할당될 것
boolean notSameCpp = 0; // c, cpp와 다르게 0, 1로 false, true 사용이 불가능하다고 한다.
int num = null; // error occur
String str = null; // okay
또한 null 리터럴 같은 경우 기본 변수 타입에는 할당이 불가능하고, String type의 경우 가능하다고 한다.
Reference
https://mine-it-record.tistory.com/100
Do it! 자바 프로그래밍 강좌
728x90
'BackEnd > java spring' 카테고리의 다른 글
좋은 객체 지향 설계의 5가지 원칙 (SOLID) (4) | 2022.12.24 |
---|---|
Spring 이란? (0) | 2022.12.23 |
[Java] 자바 공부 - 2 (static vs non-static) (0) | 2022.11.28 |
[Java] 자바 공부 시작 - 1 (자바가 동작하는 방식) (0) | 2022.11.23 |
Spring boot를 이용한 게시판 프로젝트 구현 일지 (1) (1) | 2022.10.03 |
댓글