본문 바로가기



프로그래밍/JAVA

[JAVA] 리터럴literal (상수)에 대하여

리터럴 literal은 코드내에서 직접 입력된 값을 일컫는 용어로, 각각 정수형(문자형포함), 실수형, 논리형과 문자열이 있습니다. 

Java데이터 타입의 전체 분류표

정수형은 흔히 말하는 정수로 세부적으로 10진수형, 0으로 시작하는 8진수형(01,-05), 0x이나 A~F로 시작하는 16진수형이 있습니다. 이 정수형은 다시 앞에서 이야기한 데이터 타입중에 정수타입에 해당하는 5개의 타입으로 분류 됩니다.   

자바의 정수형 데이터 타입 도표
자바 정수타입 데이터의 메모리 사용 크기와 데이터 저장 범위

재미있는 점은 char의 경우 보기에는 문자 종류이지만 데이터 형으로는 정수타입 입니다. 실제 처리는 내부의 문자코드로 이루어 집니다. 이 텍스트처리에 관한 특이한 점은 백엔드보다는 프론트엔드에서 더 잘나타나는데, 문자가 깨질경우 유니코드로 지정해서 텍스트가 아닌 텍스트에 할당된 유니코드를 부여해서 저장하면 파일자체의 문자셋(옛날에는 국가마다 컴퓨터에 텍스트를 저장하는 방식이 달라서 변환이 필요했습니다.즉, 텍스트에 부여된 코드가 통일되어 있지않았음)과는 상관없이 코드로 바로처리해서 화면에 나타내주기 때문에, 오래된 레거시 프로젝트에서 내부적인 UTF8처리를 지원하지 않아도 그저 표현하는 정도의 코드에서는 사용할 수 있게 되었습니다.

public class Unicode_Number_sysout {
	public static void main(String [] args) {
		
		char a1 ='A';
		char a2 ='\u0041';
		
		System.out.println(a1);
		System.out.println(a2);
		
	}


}

유니코드와 텍스트가 동일한 처리가 되는 char 리터럴


실수 리터럴(상수)는 소숫점이 있어서 실수 범위를 표현하는데, float과 double의 두종류로 나뉩니다.

자바의 실수형 데이터 타입 도표
자바 실수타입 데이터의 메모리 사용 크기와 데이터 저장 범위
자바 논리형 데이터 타입 도표
자바 논리 타입 데이터 메모리사용 크기와 데이터 저장범위

 

숫자로 이루어진 리터럴 분류이외에 String인 참조타입 class로 이루어진  문자열 리터럴이 존재합니다.  이 String 리터럴은  객체의 특성을 가지고 있어 참조타입(실제데이터는 heap메모리라는 부분에 있으며, 다른 리터럴들은 스택영역에 직접 생성되지만 String 참조 클래스의  리터럴은 객체주소를 호출하게 됩니다.)의 특성을 그대로 가지고 있게 됩니다. 따라서, 객체주소가 같은 변수면 동일한 객체를 사용하는것이므로, 같은 데이터로 취급하게 됩니다. 

String 문자열 리터럴의 특성
String 문자열 객체의 논리적 동작구조

따라서 String을 사용하면 실제로 스택영역내의 변수에 저장되는 것이 아니라 heap영역의 객체로 값이 저장됩니다.

String 객체를 이용한 리터럴 사용의 예시