상수(constant)리터럴(literal)에 대해 들어본적이 있는가?


만약, 프로그래밍을 어느정도 해왔던 사람이면 한번쯤은 들어봤을만한 용어 들 이다.


하지만 두 용어를 같은 의미로 사용하는 사람들이 많다. 


하지만, 엄연히 따지자면 확실한 차이점이 존재한다.


오늘은 두 용어에 대해 정확한 뜻을 포스팅 하고자 한다. 



상수(Constant)란?



  먼저 상수와 리터럴 둘 다, 변하지 않는 값(데이터)를 의미한다. 


코드적으로 말하자면, 상수는 변하지 않는 변수를 뜻한다.


상수는 숫자만 넣어야 한다고 오해하는 사람들이 많은데,


앞서 말했듯이, 상수는 변하지 않는 변수를 뜻하는 것이다.


즉 상수에 넣는 데이터는 숫자가 올 수 도 있지만,


클래스나 구조체 같이 기본형에서 파생된 객체나 유도형같은 데이터를 넣을 수 있다. 


상수는 데이터가 변하지 않아야 한다고 했다. 그래서 


참조변수를 상수로 지정 할 때, 참조변수에 넣은 인스턴스 안의 데이터 까지도 변하지 않는 줄 착각 할 수 있지만,


참조변수가 상수(참조변수 메모리의 주소값이 변하지 않는다라는 의미)지, 


그 주소가 가리키는 데이터들까지 상수라는 의미가 아니다.


프로그래밍에서 상수를 쓸때는 C,C++,C#은 const , Java는 final 제어자를 쓴다.


Java언어로 예를 들어보자.


즉 Test라는 클래스를 만들었다면, 


final Test t1 = new Test();


t1 = new Test();


는 불가 하지만,


t1.num = 10;


이렇게 클래스 안의 데이터를 변경해도 상관이 없다는 의미이다.



리터럴(Literal)이란?



  리터럴은 데이터 그 자체를 뜻 한다. 


변수에 넣는 변하지 않는 데이터를 의미하는 것이다.


아래의 예제를 보자.


int a = 1;


int 앞에 final를 붙일 시 , a는 상수가 된다. 여기서의 리터럴은 1이다.


즉, 1과 같이 변하지 않는 데이터(boolean, char, double, long, int, etc...)를 리터럴(literal)이라고 부른다.


그렇다면 인스턴스(클래스 데이터)가 리터럴이 될 수 있을까?


답은 아니오다. 만약 인스턴스안에 있는 값들을 변경하지 않는다면 모를까,


보통의 인스턴스는 동적으로 사용하기 위해 작성되므로.


리터럴이 될 수가 없다. 왜냐하면 값이 언제 바뀔지 모르는 것이기 때문이다.


하지만 프로그래밍 에서 객체 리터럴이란 표현을 들어본적이 있을 것이다.


데이터가 변하지 않도록 설계를 한 클래스를 불변 클래스라 칭한다.(immutable class)


해당 클래스는 한번 생성하면 객체 안의 데이터가 변하지 않는다. 변할 상황이면 새로운 객체를 만들어준다.


자바의 String, Color 같은 클래스가 이와 같은 예이다. 


따라서 우리는 "abc" 와 같은 문자열을 자바에서는 '객체 리터럴' 짧게는 '리터럴' 이라고 표현 하는것이다.




여기까지가 준비한 상수와 리터럴의 내용이다. 


정리하자면 상수는 변하지 않는 변수를 의미하며(메모리 위치) 메모리 값을 변경할 수 없다.


리터럴은 변수의 값이 변하지 않는 데이터(메모리 위치안의 값)를 의미한다. 


보통은 기본형의 데이터를 의미하지만, 특정 객체(Immutable class , VO class)에 한에서는 리터럴이 될 수 있다.




'용어정리 > 프로그래밍용어' 카테고리의 다른 글

List와 Map의 차이 (2)  (0) 2016.04.27
List와 Map의 차이 (1)  (0) 2016.04.26
XML 이란?  (9) 2016.01.26
Wrapper class(래퍼 클래스) 란?  (0) 2015.12.24
API란?  (0) 2015.12.17

포스팅이 도움 되셨다면, 커피 한잔 후원해주세요!
더 좋은 포스팅 작성에 큰 힘이 됩니다.

Buy me a coffeeBuy me a coffee

+ Recent posts