리터럴과 상수의 차이
상수와 리터럴 둘 다 변하지 않는 값을 의미한다
상수
- 상수는 변하지 않는 변수를 의미한다
- 상수는 숫자, 문자 뿐만 아니라 클래스나 객체를 넣을 수 있다
- 참조변수를 상수로 지정할 때 해당 상수는 참조변수의 주소값을 가지기 때문에 그 주소가 가리키는 데이터 내부는 바뀔 수 있다
- 자바 예시
class Student{
int age;
Student(int age){
super();
this.age = age;
}
}
final Student s1 = new Student(20);
s1 = new Student(15);
s1.age = 21;
리터럴
- 리터럴은 변수 안에 넣는 데이터 그 자체이다
- boolean, char, double, long, int... 등 변하지 않는 데이터를 리터럴(literal)이라 부른다
- 값이 언제 바뀔 지 모르는 인스턴스는 리터럴이 될 수 없다 (class .. 등)
- 예외로 데이터가 변하지 않도록 설계한 클래스를 불변 클래스(immutable class)라고 부른다
- 불변 클래스에서 객체를 생성하면 해당 객체의 데이터는 변하지 않는다 ( String => 객체 리터럴 )
상수와 리터럴 참고