이번 시간엔 Java의 상수(Constant), 리터럴(Literal), 리터럴의 접미사에 대해 알아보도록 하겠습니다.
1. 상수(Constant), 리터럴(Literal)
1-1. 상수(Constant)의 정의와 특징
- 프로그래밍 언어에서 상수(Constant)의 정의는 프로그램이 실행되는 동안 값(데이터)이 고정되어 변할 수 없는 메모리 공간을 의미하며 아래와 같은 특징을 가지게 됩니다.
- 상수는 선언과 동시에 초기화를 해 주어야 합니다.
- 변수의 자료형 타입 옆에 final이라는 키워드를 붙입니다.
public class Constant_Literal {
public static void main(String[] args) {
// 상수 A 선언
final int A = 100;
System.out.println(A); // 100
}
}
public class Constant_Literal {
public static void main(String[] args) {
// 상수 a 선언
final int A = 100;
// 상수의 값을 바꾸고자 하는 경우 오류 발생
// a = 200;
System.out.println(A); // java: cannot assign a value to final variable a
}
}
- 암묵적인 관례로 변수와 차별성을 두기 위해 상수명은 대문자로 작성하는 것이 일반적입니다.
- 위와 같은 관례적인 특징이며, 여러 단어로 구성된 상수명은 구분을 위해 _(Underscore)로 구분합니다.
1-2. 리터럴(Literal)
- 변수나 상수에 저장되는 데이터 그 자체를 의미하는 용어입니다.
- 프로그래밍 언어에서 리터럴(Literal)의 정확한 정의는, 소스 코드의 고정된 값을 대표하는 용어로 기술되고 있습니다.
- 앞서 배운 듯이, 변수에도 타입이 존재하는 것처럼 리터럴에도 타입(논리형, 정수형, 실수형, 문자형, 문자열)이 존재합니다.
public class Constant_Literal {
public static void main(String[] args) {
// 상수 a 선언
final int A = 100;
System.out.println(A);
// 상수의 값을 바꾸고자 하는 경우 오류 발생
// a = 200;
System.out.println(A); // java: cannot assign a value to final variable a
int number1 = 10; // 10이라는 정수값 자체가 리터럴을 의미
final double PI = 3.14; // 3.14라는 실수값 자체가 리터럴을 의미
char b = 't'; // t 문자 데이터 자체가 리터럴을 의미
System.out.println(number1 + ", " + PI + ", " + b); // 10, 3.14, t
}
}
2. 리터럴의 접미사(Suffix)
- 많은 자료형 타입 중에서도 정수형, 실수형 타입은 여러 종류의 타입이 존재하므로 해당 타입들을 구분하기 위해 리터럴에 접미사(Suffix)를 붙여 구분합니다.
- 논리형(Boolean), 문자형(Character), 문자열(String)에는 접미사가 존재하지 않습니다.
- JDK 1.7 버전부터는 정수형 리터럴에 구분자 _(Underscore)를 넣을 수 있어 사용자가 큰 수를 편하게 읽을 수 있습니다.
타입 | 접미사(Suffix) | |
정수형 | long | L 또는 l (숫자 1과의 구분을 위해 L을 사용하는 것을 권장) |
실수형 | float | F 또는 f |
double | D 또는 d |
// 정수 long 자료형
long l1 = 1_000_000L;
long l2 = 100L;
System.out.println(l1); // 1000000
System.out.println(l2); // 100
// 실수 float, double 자료형
float pi2 = 3.14f;
double d = 3.141592d;
System.out.println(pi2); // 3.14
System.out.println(d); // 3.141592
3. 변수의 타입과 리터럴 타입의 일치, 불일치
- (1) 일치 조건을 만족하는 경우 : 변수의 자료형 타입보다 리터럴 타입의 데이터 표현 범위가 더 적을 때
// 일치하는 경우
// (1)번 조건에 해당됨 int > char
int i2 = 'C';
System.out.println(i2); // 67
// (1)번 조건 성립 : long > int
long l3 = 123;
System.out.println(l3); // 123
// (1)번 조건 성립 : double > float
double d1 = 3.14f;
System.out.println(d1); // 3.140000104904175
- (2) 일치 조건을 만족하는 경우 : byte, short 타입을 가지는 변수에 리터럴 타입 int형 값을 저장할 때
// (2) byte, short의 자료형을 가지는 변수에 int형 리터럴 데이터 저장이 가능하다.
byte b2 = 127;
System.out.println(b2); // 127
- (3) 불일치하는 경우 : 변수의 자료형 타입보다 리터럴 타입의 데이터 표현 범위가 더 클 때
// 불일치하는 경우
// (3)번 조건 성립 : int < long
int i3 = 3_000_000_000; // int의 최대 범위 +- 약 2,000,000,000
System.out.println(i3); // Error : java: integer number too large
float f2 = 3.14; // float < long
System.out.println(f2); // java: incompatible types: possible lossy conversion from double to float
이번 포스팅에선 Java의 상수와 리터럴, 리터럴의 접미사에 대해 알아보았습니다. 다음 포스팅에선 문자형(Character), 문자열(String) 자료형에 대해 자세히 알아보도록 하겠습니다.
======================================================================
해당 포스팅에 대해 내용 추가가 필요하다고 생각되면 기존 포스팅 내용에 다른 내용이 추가될 수 있습니다.
개인적으로 공부하며 정리한 내용이기에 오타나 틀린 부분이 있을 수 있습니다.
이에 대해 지적해 주시면 감사하겠습니다.
'백엔드(Back-End) > Java' 카테고리의 다른 글
[Java] - 여러 가지 기본형 타입의 변환 (0) | 2022.09.03 |
---|---|
[Java] - 문자형, 문자열 자료형의 정의와 여러 가지 특징 (0) | 2022.09.03 |
[Java] - 변수의 기본형 타입(Primitive Type), 참조형 타입(Reference Type) (0) | 2022.08.28 |
[Java] - 변수의 선언과 초기화, 변수의 종류 (0) | 2022.08.27 |
[Java] - Java란 무엇인가? (0) | 2022.08.05 |
댓글