728x90
상수 (Constant)
상수는 변수와 마찬가지로 '값을 저장할 수 있는 공간'이다. 그러나 변수와는 다르게 한 번 값을 저장하면, 다른 값으로 변경할 수 없다.
상수를 정의할 때는 final 키워드를 이용하여 정의한다.
final int MAX_SPEED = 100;
상수는 선언과 동시에 초기화 할 필요는 없다.
초기화 하는 방법을 알아보자.
인스턴스변수로 사용된 상수 초기화
public class Constant {
final int MAX_SPEED=100;
final int MIN_SPEED;
final int AVERAGE_SPEED;
//초기화 블럭에서 초기화
{
MIN_SPEED = 10;
}
//생성자에서 초기화
public Constant(int AVERAGE_SPEED) {
this.AVERAGE_SPEED = AVERAGE_SPEED;
}
}
위와 같이 선언과 동시에 초기화 하거나, 생성자를 통해서 초기화 할 수 있다. 또한 초기화 블럭(initialization block)에서도 초기화 시켜줄 수 있다.
클래스변수로 사용된 상수 초기화
public class Constant {
static final int MAX_SPEED=100;
static final int MIN_SPEED;
static {
MIN_SPEED = 10;
}
}
위와 같이 선언과 동시에 초기화 하거나, 클래스 초기화 블럭에서도 초기화 시킬 수 있다.
지역변수로 사용된 상수 초기화
public void localVariable(String str){
final String DEFAULT_STRING = "STR";
final String SPECIAL_STRING;
if (str.equals("VIP")){
SPECIAL_STRING = "VIP";
}else {
SPECIAL_STRING = "BASIC";
}
}
위와 같이 조건문을 통해서도 초기화할 수 있다.
fianl 매개변수
final로 선언된 매개변수는 메서드 내에서 변경이 불가능합니다.
public void test(final String name){
String myName = name;
//name = name + "1"; -> 불가능
myName = myName +"1"; //가능
}
final 메서드
상속은 가능하지만 오버라이딩은 불가능합니다. 즉 부모에서 정의한 그 상태 그대로 사용해야 합니다.
final 클래스
상속이 불가능합니다.
리터럴(literal)
원래는 12, 123, 3.14, 'A'와 같은 값을들 저희는 상수라고 했습니다.
그러나 프로그래밍에서는 상수를 '값을 한 번 저장하면 변경할 수 없는 저장공간'으로 정의하였기에 기존에 우리가 알고 있던 상수를 다른 이름으로 불러야 했습니다.
그렇게 해서 사용한 용어가 바로 리터럴입니다.
리터럴은 어렵게 생각할 필요 없이 기존에 우리가 알고 있었던 '그 자체로 값을 의미하는 것'이라고 생각하시면 됩니다.
📔 Reference
728x90
'☕️ Java > 기본' 카테고리의 다른 글
[Java] String Constant Pool (0) | 2022.01.28 |
---|---|
[Java] String = "" 과 new String("")의 차이 (0) | 2022.01.28 |
[Java] static 파헤치기 (feat. Hiding (static Method의 Overriding)) (0) | 2022.01.24 |
자바는 어떻게 작동하는가? (JVM, Class Loader, JVM Memory 등) (0) | 2022.01.24 |
[Java] 자바 JVM 메모리 관리 파헤치기 (스택, 힙, Reference Type, 가비지 컬렉터) (0) | 2022.01.24 |