Programming/Java

상수와 리터럴 (constant & literal) 정리

Jan92 2021. 10. 27. 00:51

해당하는 내용은 'Java의 정석 - 남궁 성' 도서의 내용을 참고하여 정리한 것입니다.

 

상수 (constant)

 

final int MAX_VALUE = 100;     // 상수 선언과 동시에 초기화

 

상수(constant)는 변수와 마찬가지로 '값을 저장할 수 있는 공간' 이지만 변수와 달리 한 번 값을 저장하면 다른 값으로 변경할 수 없다는 특징이 있습니다.

사용 방법은 변수의 타입 앞에 'final' 키워드를 붙여서 사용합니다.

 

 

* JDK 1.6 이전에는 상수 선언과 동시에 초기화가 필수였으나, 1.6 이후부터는 선언과 동시에 초기화하지 않아도 됩니다. 하지만 상수는 선언과 동시에 초기화하는 것이 좋습니다.

 

 


 

 

리터럴 (literal)

 

 

int year = 2021;                  // year : 변수,        2021 : 리터럴 
final int MAX_VALUE = 100;        // MAX_VALUE : 상수,   100 : 리터럴

 

원래 12, 123, 3.14, 'A' 와 같은 값들을 상수라고 하지만 프로그래밍에서는 상수를 '값을 한 번 저장하면 변경할 수 없는 저장공간'으로 정의하였기 때문에 이것과 구분하기 위해서 상수(12, 123, 3.14 'A')를 다른 이름으로 불러야 했습니다. 그래서 대신 사용하는 용어가 바로 리터럴(literal) 입니다.

상수는 리터럴에 '의미 있는 이름'을 붙여서 코드의 이해와 수정을 쉽게 만드는 용도로 많이 사용됩니다.

 

 

* 위 값에서 year는 변수, 2021은 리터럴이 되고, MAX_VALUE는 상수, 100은 리터럴이 됩니다.

 

 


 

 

리터럴의 타입과 접미사

 

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

 

변수의 타입은 저장될 '값의 타입'에 의해 결정되므로 리터럴에도 타입이 존재합니다.

 

 

 

 

 


  • int octNum = 010;
    int hexNum = 0x10;
    int binNum = 0b10;
  • 정수형
    long 타입 리터럴의 접미사는 'l' 또는 'L'을 사용합니다. 다만 'l'의 경우 숫자 1과 헷갈릴 수 있기 때문에 'L'을 많이 사용하는 편입니다.
    접미사가 없는 경우는 int 타입이 되고, byte와 short 타입의 리터럴은 별도로 존재하지 않습니다. 해당 타입의 변수에 값을 저장할 때는 int 타입의 리터럴을 사용합니다.

    + 추가로 8진수와 16진수
    16진수는 16진수라는 것을 표시하기 위해 리터럴 앞에 접두사 '0x' 또는 '0X'를 사용합니다. 8진수의 경우는 '0'를 사용합니다.
    ('0x', '0X', '0'는 알파벳이 O가 아니라 숫자 0 입니다.)



    float pi = 3.14f;
    double rate = 1.618d;​
     
  • 실수형
    float 타입은 접미사 'f' 또는 'F'를 사용하고 double 타입은 'd' 또는 'D'를 사용합니다. 하지만 실수형은 double 타입이 기본 자료형이므로 'd'는 생략 가능합니다.



    char ch = 'J';
    String str = "Java";
    
    String str = "";
    char ch = '';     // 에러 
    char ch = ' ';    // 허용, 공백 문자(blank)로 변수 ch를 초기화​

  • 문자형과 문자열
    'A' 처럼 작은 따옴표로 문자 하나를 감 싼 것을 '문자 리터럴' 이라고 말합니다. 두 문자 이상은 다음처럼 "Java" 큰 따옴표로 감싸고 '문자열 리터럴' 이라고 합니다.
    문자열 리터럴은 ""안에 아무것도 넣지 않은 것을 허용하고, 이를 빈 문자열 (empty String)이라고 합니다. 하지만 문자 리터럴은 반드시 '' 안에 하나의 문자가 있어야 합니다.