Development/Java

상수와 final 키워드

BongChun 2022. 9. 10. 01:32

상수

  • 상수는 변수와 달리 변하지 않는 수이다.
  • 자바의 상수에는 리터럴과 심볼릭 상수가 있다.

리터럴 상수

  • 값 또는 리터럴 값을 의미
  • 정수, 실수, 문자, 문자열, 불리언이 리터럴에 해당된다.
  • 리터럴은 값 그 자체이므로 리터럴에 리터럴을 대입할 수 없다.
10 = 100; // 10이라는 정수에 100을 대입할 수 없음
"words" = "abcd"; // "words"라는 문자열에 "abcd"라는 문자열을 대입할 수 없음
true = 100; // true라는 불리언값에 정수 100을 대입할 수 없음
  • 리터럴 상수도 기본 타입이 존재한다.
    • 예를들어 정수는 기본적으로 int 타입, 실수는 double 타입이 적용된다.

리터럴 Workflow

  • 변수를 선언하면, 수는 operand stack 공간에 일시적으로 저장되었다가 변수라는 메모리 공간에 저장된다.(문자열 리터럴 제외)
  • 자바는 기본적으로 4byte 크기로 스택 메모리를 처리하기 때문에 4byte이상의 크기를 가진 변수에 대해선 리터럴에 명시를 해두어야 한다.
  • 8byte의 크기에 저장이 되어야 한다면, 숫자의 맨 끝에 L 을 적어 명시한다.
  • 실수에 대해서는 8byte를 스택메모리를 할당하기 때문에, 4byte의 크기를 할당받길 원한다면 F 를 적어 명시한다.
long a = 3234345345L;
float b = 2.2325234F;

 

심볼릭 상수

  • 변수에 final 키워드를 사용해 상수처럼 값을 변하지 않도록 설정할 수 있다. (심볼릭 상수)
final int a = 10;

a = 20; // 컴파일 에러

 

final 키워드

  • 클래스, 필드, 메소드, 변수, 파라미터에서 사용되며 어디에서 사용이 되는지에 따라 다르게 적용된다.
    • class : 상속을 허용하지 않는다.
    • method : 오버라이딩을 허용하지 않는다.
    • field, variable, parameter : 초기화 이후 값 변경을 허용하지 않는다.
      • parameter에 final을 사용할 경우 전달받은 parameter가 method 내에서 변경되는 것을 허용하지 않는다.