반응형
목표
- 자바의 프리미티브 타입, 변수 그리고 배열을 사용하는 방법을 익힙니다.
학습할 것
- 프리미티브 타입 종류와 값의 범위 그리고 기본 값
- 프리미티브 타입과 레퍼런스 타입
- 리터럴
- 변수 선언 및 초기화하는 방법
- 변수의 스코프와 라이프타임
- 타입 변환, 캐스팅 그리고 타입 프로모션
- 1차 및 2차 배열 선언하기
- 타입 추론, var
참고 자료
- 자바의 정석 => https://coupa.ng/b93eFX
# 타입 변환의 종류
- 캐스팅 => 명시적 형 변환, 강제 형 변환
- 프로모션 => 묵시적 형 변환, 암시적 형 변환, 자동 형 변환
# 형 변환(캐스팅, casting) 이란?
"형 변환이란, 변수 또는 상수의 타입을 다른 타입으로 변환하는 것"
- 같은 타입이 아닌 서로 다른 타입 간의 연산을 수행할 때,
이럴 때는 같은 타입으로 일치시켜야 한다.
=> 이때 변수나 리터럴의 타입을 다른 타입으로 변환하는 것을 '형 변환(casting)'이라고 한다.
# 형 변환 방법
(타입)피연산자
형 변환하고자 하는 변수나 리터럴의 앞에 변환하고자 하는 타입을 괄호와 함께 붙여주기만 하면 된다.
여기에 사용되는 괄호()는 '캐스트 연산자' 또는 '형 변환 연산자'라고 한다.
class CastingEx1 {
public static void main(String[] args) {
double d= 85.4;
int score = (int)d; // double 타입의 변수 d를 int타입으로 형변환
System.out.println("score="+score); // score=85
System.out.println("d="+d); // d=85.4 <--형변환 후에도 피연산자에는 아무런 변화가 없다.
}
}
- 형 변환 연산자는 그저 피연산자의 값을 읽어서 지정된 타입으로 형 변환하고 그 결과를 반환할 뿐이다.
=> 피연산자인 변수 d의 값은 형 변환 후에도 아무런 변화가 없다.
- float타입의 값을 int타입으로 변환할 때 소수점 이하의 값은 반올림이 아닌 버림으로 처리된다.
# 정수형 간의
- int타입(4 byte)의 값을 byte타입(1 byte)으로 변환하는 경우는 크기의 차이만큼 잘려나간다.
=> 경우에 따라 '값 손실(loss of data)'이 발생할 수 있다.
ex) int -> byte로 형 변환 시
# 실수형 간의 형 변환
- 정수형처럼 작은 타입에서 큰 타입으로 변환하는 경우, 빈 공간을 0으로 채운다.
- 반대로 double타입에서 float타입으로 변환하는 경우,
double의 가수 52자리 중 23자리만 저장되고 나머지는 버려진다.
double d = 1.0e100; // float의 최대값보다 큰 값을 d에 저장(1.0x10^100)
float f = (float)d; // d의 값을 float로 형변환해서 f에 저장. f는 무한대가 된다.
double d = 1.0e-50; // float의 최소값보다 작은 값을 d에 저장(1.0x10^-50)
float f = (float)d; // f의 값은 0이 된다.
- float타입의 범위를 넘는 float로 형 변환하는 경우는 '+-무한대' 또는 '+-0'을 결과로 얻는다.
# 정수형과 실수형 간의 형 변환
- 정수형과 실수형은 저장형식이 완전히 다르기 때문에 정수형간의 변환처럼 간단히 값을
채우고 자르는 식으로 할 수 없다 => 좀 더 복잡한 변환 과정을 거쳐야 한다.
정수형을 실수형으로 변환
- 정수는 소수점 이하의 값이 없으므로 비교적 변환이 간단하다.
- 정수를 2진수로 변환한 다음 정규화를 거쳐 실수의 저장 형식으로 저장될 뿐이다.
- 실수형은 정수형보다 훨씬 큰 저장 범위를 갖기 때문에, 정수형을 실수형으로 변환하는 것은 별 무리가 없다.
실수형을 정수형으로 변환
- 실수형을 정수형으로 변환하면, 실수형의 소수점 이하 값은 버려진다.
=> 정수형의 표현 형식으로 소수점 이하의 값은 표현할 수 없기 때문
# 자동 형 변환
- 경우에 따라 편의상의 이유로 형 변환을 생략할 수 있다
그렇다고 해서 이루어지지 않는 것은 아니다.
=> 컴파일러가 생략된 형 변환을 자동적으로 추가한다.
자동 형 변환의 규칙
- 컴파일러는 기존의 값을 최대한 보존할 수 있는 타입으로 자동 형 변환시킨다.
- boolean을 제외한 나머지 7개의 기본형은 서로 형 변환이 가능하다.
- 기본형과 참조형은 서로 형 변환할 수 없다.
- 서로 다른 타입의 변수 간의 연산은 형 변환을 하는 것이 원칙이지만,
값의 범위가 작은 타입에서 큰 타입으로의 형 변환을 생략할 수 있다.
반응형