JAVA_상수(constant)&리터럴(literal)

호근·2022년 11월 26일
0

java

목록 보기
3/35

상수(constant)

상수는 값을 저장할 수 있는 <공간>이다. 단, 변수와 달리 한 번 값을 저장하면 변경이 불가하다.

상수선언

  • final int MAX_SPEED = 10; // 상수 MAX_SPEED를 선언&초기화
    - 위와 같이 변수 타입 앞에 final을 붙여준다.

  • 상수는 선언과 동시에 초기화해야하며, 그 후부터는 상수값을 변경할 수 없다.

관례

  • 상수의 이름은 모두 대문자로 한다.
  • 여러단어로 이루어진 경우 '_'로 구분한다.

리터럴(literal)

  • 그 자체를 의미한다.
  • 상수의 다른 이름이다.

상수가 필요한 이유

  • 상수는 리터럴에 '의미있는 이름'을 붙여서 코드의 이해와 수정을 돕는다.

리터럴의 타입과 접미사

변수에 타입이 있듯이 리터럴에도 타입이 있다.

논리형 false, true // 없음
정수형 123, 0b0101, 077 // L
실수형 3.14 3.0e8, 0x1.0p-1 // f, d
문자형 'A', '1', '\n' // 없음
문자열 "ABC", "123" // 없음


정수형과 실수형에는 여러 타입이 있으므로,
리터럴(값 자체)에 접미사를 붙여 타입을 구분한다.

정수형 → long타입의 리터럴에 l 또는 L을 붙이고,
접미사가 없으면 int 타입의 리터럴이다.

실수형 → float 타입의 리터럴에 f 또는 F를 붙이고,
double 타입의 리터럴에는 d 또는 D를 붙인다.

또한 double은 실수형 리터럴의 기본형이다.
따라서 d는 생략이 가능하다.
실수형리터럴인데 접미사가 없다면 double type이다.

  • 리터럴이 소수점이나 10의 제곱을 나타내는 기호 E,e 그리고 f,d,F,D를 포함하고 있으면 실수형이다.

타입의 불일치

literal의 type은 저장될 변수의 타입과 일치하는 것이 보통이지만,
저장범위가 넓은 type에 좁은 type의 값을 저장하는 것은 허용된다.(굳이?)

literal의 값이 변수 type의 범위를 넘어가거나,
literal이 변수의 type보다 저장범위가 넓으면
컴파일 에러가 발생한다.

float는 접미사나 정밀도 등 신경쓸 것이 많으니 귀찮다면 double을 사용하자.

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

'A' → 문자 리터럴
"ABC" → 문자열 리터럴

  • 두 문자 이상은 큰 따옴표로 감싸야한다.

  • char type의 변수는 문자 하나만을 저장할 수 있으므로,

  • 여러문자(열)을 저장하기 위해서는 string type을 사용해야한다.

  • 문자 리터럴에는 반드시 하나 이상의 문자가 들어가야만한다.

  • 문자열 리터럴은 아무것도 넣지않는 상태인 empty literal을 허용한다.

char ch = '' // X
char ch = ' ' // O 공백문자(blank)로 변수를 초기화


String은 class이므로, 생성자 new를 사용하여야하지만
다음과 같은 표현은 허용된다.

→ String str = "";


→ String name = new String("Java"); // String 객체 생성

덧셈연산자를 사용한 문자열 결합도 가능하다.

→ String name = "Ja" + "va"; // name은 Java
→ String str = name + 8.0; // str은 Java8.0

+++ 덧셈연산자는 피연산자가 모두 숫자일 경우 두 수를 더하지만,
피연산자 중 어느 한 쪽이 String이면 나머지 한 쪽을 먼저 String으로 변환한 후 두 String을 결합한다.

문자열 + any type → 문자열 + 문자열
any type + 문자열 → 문자열 + 문자열

profile
22.11.28 ~

0개의 댓글