JAVA/기초

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

edoyyoy 2023. 3. 3. 01:15

 

1. 상수 (constant)

   값을 저장할 수 있는 공간으로, 변수와 달리 값을 저장하면 다른 값으로 변경할 수 없다.

   상수를 선언하는 방법은 변수와 동일하나 변수의 타입 앞에 키워드 'final'을 붙여주면 된다.

final int MAX_SPEED = 10;

   

상수는 변수와 달리 선언과 동시에 초기화해야하며, 값을 변경할 수 없다.

   상수의 이름은 모두 대문자로 하는 것이 관례이며, 여러 단어로 구성된 경우 '_'를 사용한다.

final int MAX_SPEED; 		// 에러 -> 초기화를 하지 않았기 때문
final int MAX_SPEED = 10;	
MAX_SPEED = 20;			// 에러 -> 상수는 값을 변경할 수 없음

 

   * 상수가 필요한 이유

     상수를 사용하면 코드의 의미가 명확해지며,

     다른 값을 계산할 때도 여러 곳을 수정할 필요 없이 상수의 초기화만 다른 값으로 해주면 된다.

     ► 코드의 이해와 수정을 쉽게한다.

 

 

2. 리터럴 (literal)

   값을 의미한다.

 

   * 리터럴의 타입과 접미사

      리터럴 타입에 의해 변수 값의 타입이 결정된다.

      특히, 변수의 타입이 많은 정수형과 실수형에는 리터럴에 접미사가 존재한다.

 

      1) 정수형 

           - long 타입의 리터럴 : 'L' 또는 'l' 접미사를 사용한다. (숫자 1과 헷갈릴 수 있기 때문에 'L'을 더 많이 사용한다.)

           - 2진수 리터럴 : '0b' 또는 '0B' (JDK1.7 이상)

           - 8진수 리터럴 :  '0'

           - 16진수 리터럴 : '0x' 또는 '0X'

           - int, byte, short 타입은 접미사가 존재하지 않는다.

           - 정수형 리터럴의 중간에 구분자 '_'를 넣을 수 있다. (JDK1.7이상)

int binNum = 0b10;		// 2진수 10, 10진수로는 2
int octNum = 010;		// 8진수 10, 10진수로는 8
int hexNum = 0x10;		// 16진수 10, 10진수로는 16

long big1 = 100_000_000_000L; 
long big2 = 100000000000L;
long hex = 0xFFFF_FFFF_FFFF_FFFFL;

 

      2) 실수형 

           - float 타입의 리터럴 : 'f' 또는 'F'

           - double 타입의 리터럴 : 'd' 또는 'D' (생략 가능)

float pi = 3.14f;
double rate1 = 1.618d;
double rate2 = 1.618;

 

   * 타입의 불일치

      리터럴의 타입과 변수의 타입이 일치하는 것이 보통이나,

     타입이 달라도 저장범위가 넓은 타입에 좁은 타입의 값을 저장하는 것은 허용된다.

int 	i = 'A';		// 가능 : 'A'의 유니코드인 65가 변수 i에 저장
int 	l = 123;		// 가능 : int 범위 < long 범위
double 	d = 3.14f;		// 가능 : float 범위 < double 범위
byte 	b = 65;			// 가능 : byte 타입에 저장 가능한 범위
short 	s = 0x1234;		// 가능 : short 타입에 저장 가능한 범위 

int 	iE = 0x123456789;	// 에러 : int 타입 범위 초과
float 	fE = 3.14;		// 에러 : float 범위 < double 범위, 범위 초과

 

   * 문자 리터럴과 문자열 리터럴

     문자 리터럴 [Char] : 작은 따옴표로 문자 하나를 감싼 것          > 'A'

     문자열 리터럴 [String] : 큰 따옴표로 두 문자 이상을 감싼 것      > "ABC"

   

      * 문자 리터럴의 공백

        문자 리터럴의 경우 '' 안에 반드시 하나의 문자를 포함해야 하지만    (공백 불가)

        문자열 리터럴의 경우 "" 안에 문자를 넣지 않아도 된다.                      (공백 가능)

String str = "";	// 가능 : 내용이 없는 빈 문자열
char ch = '';		// 에러 : ''안에 반드시 하나의 문자 필요
char ch = ' ';		// 가능 : 공백문자로 변수 초기화(값 입력)

 

      * 문자 리터럴의 덧셈

        피연산자 중 어느 한 쪽이 String이면 나머지 한 쪽을 먼저 String으로 변환한 다음 두 String을 결합한다.

        즉, 어떤 타입의 변수도 문자열과 덧셈연산을 수행하면 그 결과가 문자열이 된다.

        따라서 기본형 타입의 값을 문자열로 변환할 때는 아무런 내용도 없는 빈 문자열("")을 더해주면 된다.

 

 

 

 


(ver. 230302)

사실 문자열 리터럴엔,, 예제가 있다는 슬픈 사실이 있다.

추가해서 올릴까 하다가 일단 올려놓고 수정해야지.. 좀 더 빨리 예제를 하겠지.. 싶어서 먼저 올린다.

요새 실무 교육에다 기존에 하던 알바에다 이래저래 바쁘다.

새삼 천천히 돌아왔군 ㅜㅜ 실무교육이 끝나는 5월까지는 진도가 좀 나갔으면 좋겠는데, 더 노력해야지.

그치만 당분간은 코테해야한다...! 허허 할 수 있으니 열심히만 해보자

 

(ver. 230308)

드디어 ㅜㅜ 올린다

요새 이것저것 배우느라 정신이 없었는데 그래도 성장하는 과정 같아서 좋다.

교육에서 배운것도 틈틈히 적어서 올려볼까 하다가도 일단 너무 욕심부리면 안될 것 같아서 허허

하던 거 병행하면서 틈틈히 정리해야지.

올빼미였던 내가 새벽에 일어나서 공부하는 사람이 되다니 이것이 어른인가 라기엔 내 나이가 있긴 하군,,,ㅎㅎ