본문 바로가기
백엔드(Back-End)/Java

[Java] - 상수(Constant)와 리터럴(Literal), 리터럴의 접미사(Suffix)

by TwoJun 2022. 8. 29.

[Programming Language] - Java

 

이번 시간엔 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 또는

 

// 정수 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) 자료형에 대해 자세히 알아보도록 하겠습니다.

 

======================================================================

해당 포스팅에 대해 내용 추가가 필요하다고 생각되면 기존 포스팅 내용에 다른 내용이 추가될 수 있습니다.

개인적으로 공부하며 정리한 내용이기에 오타나 틀린 부분이 있을 수 있습니다.

이에 대해 지적해 주시면 감사하겠습니다.

 

 

댓글