[윤성우의 열혈 Java 프로그래밍] Chapter 03 - 상수와 형 변환
카테고리: Java lang
태그: java
03-1. 상수(Constants)
- 자바의 일반적인 상수
상수는 ‘값이 변하지 않는 수’를 말한다.
자바에서는 ‘한 번 그 값이 정해지면 이후로는 변경이 불가능한 변수’도 상수라 한다.
상수는 두 가지 특징을 지니게된다.
- 값을 딱 한 번만 할당할 수 있다.
- 한 번 할당된 값은 변경이 불가능하다.
public class Constant {
public static void main(String[] args) {
final int MAX_SIZE = 100;
final char CONST_CHAR = '상';
final int CONST_ASSIGNED;
CONST_ASSIGNED = 12;
// CONST_CHAR = '하' // 컴파일 에러: 상수는 중간에 변경 불가
System.out.println("상수1 : " + MAX_SIZE);
System.out.println("상수2 : " + CONST_CHAR);
System.out.println("상수3 : " + CONST_ASSIGNED);
}
}
관례상 상수의 이름은 다음 두 가지 사항을 지켜서 짓는다.
- 상수의 이름은 모두 대문자로 짓는다.
- 이름 둘 이상의 단어로 이뤄질 경우 단어 사이에 언더바를 넣는다.
- 리터럴(Literals)에 대한 이해
int num1 = 157; // 숫자 157은 리터럴 상수
long num2 = 3147483647; // 컴파일 오류 발생: integer number too large
숫자를 접했을 때 이를 ‘무엇으로 인식할지에 대한 일종의 약속’이 필요하고,
이 약속에 근거하여 표현된 숫자를 가리켜 ‘리터럴’ 또는 ‘리터럴 상수’라 한다.
long형 변수는 그 표현범위를 생각해보면 충분히 담을 수 있는데도 변수 num2에서 에러를 뱉는다.
즉, 왼편에 있는 변수의 자료형에 상관없이 정수는 int형으로 표현하기로 약속되어 있다.
- 정수형 상수의 표현 방법
public class IntegerLiterals {
public static void main(String[] args) {
int num1 = 3;
byte num2 = 4; // byte와 short형 정수의 표현 방법을 별도로 제공하지 않기 때문에 다음과 같은 초기화를 허용한다.
short num3 = 5;
long num4 = 3417483647L; // 반면 long형 정수의 표현 방법은 별도로 제공한다. 숫자 끝에 문자 L또는 l을 붙여야한다.
System.out.println(num1);
System.out.println(num2);
System.out.println(num3);
System.out.println(num4);
}
}
- 정수형 상수 관련 추가로 가능한 것들
자바에서는 단위가 큰 수의 표현 및 인식에 도움을 주기 위해 다음과 같이 중간에 언더바를 넣는 것도 허용하고 있다.
int num = 100_000_000;
- 실수형 상수
실수형 상수는 double형으로 인식된다.
명시하고 싶다면 double형의 경우 끝에 D나 d를 붙이고, float형은 F나 f를 붙인다.
System.out.println(3.0004999D + 2.0004999d)
System.out.println(3.0004999F + 2.0004999f)
- 이스케이프 시퀀스(escape sequences)
03-2. 형 변환
- 자료형의 변환이 의미하는 것은?
데이터의 표현 방법에 따라서 연산 방법이 달라진다.
때문에 다음과 같은 문장이 있다면, 컴파일러는 두 변수 num1과 num2의 자료형이 동일할 것을 기대한다.
int num1 = 50;
long num2 = 3123235234L;
System.out.println(num1 + num2); // num1, num2의 자료형이 다름
데이터의 손실 없이 연산하려면 자료형의 크기가 작은 쪽에서 큰 쪽으로 형 변화가 일어나야한다.
- 변수 num1에 저장된 값을 long형으로 변환하여 메모리에 임시 저장한다.
- 이어서 이 변환된 값과 num2에 저장된 값을 대상으로 덧셈을 진행한다.
- 자동 형 변환(Implicit Conversion)
프로그래머가 명시한 형 변환이 아닌 필요한 상황에서 자동으로 형 변환이 일어나는 경우를 자동 형 변환이라고 한다.
규칙 1) 자료형의 크기가 큰 방향으로 형 변환이 일어난다.
규칙 2) 자료형의 크기에 상관없이 정수 자료형보다 실수 자료형이 우선한다.(정수형에 비해 실수형이 값의 표현 범위가 넓기 때문)
- 명시적 형 변환(Explicit Conversion)
자동 형 변환이 진행되지 않는 상황에서도 필요하다면 ‘명시적 형 변환’을 통해 형 변환이 이뤄지도록 문장을 구성할 수 있다.
long num1 = 3000000000007L;
int num2 = (int)num1;
크기가 큰 정수 자료형에서 작은 크기의 정수 자료형으로 형 변환을 진행하는 경우에는 상위 바이트가 잘려 나간다.
즉, num1의 상위 4바이트를 제외한 나머지 4바이트만 num2에 저장된다.
댓글 남기기