4강. 변수와 자료형(3)
- Do it! 자바 프로그래밍 입문 온라인 강의를 수강하며 작성하였습니다.
- Section 0. 자바 기본 익히기
- 4강 "변수와 자료형(3)"
- 상수 -> 리터럴 -> 형 변환
상수 : 변하지 않는 값
- final 키워드를 사용하여 상수를 선언하며, final로 선언된 상수는 다른 값을 대입할 수 없다.
프로그램 내에서 변경되지 말아야 하는 값을 상수로 선언해두고, 혹시 변경되는 경우에는 선언된 값만 수정한다.
- 상수는 관용적으로 대문자로 표현한다.
public class Constant {
public static void main(String[] args) {
final float PI = 3.14F;
PI = 3.15F; //error! final로 선언된 값은 변경 불가
}
}
프로그램 내에서 변경되지 말아야 하는 값을 상수로 선언해두고, 혹시 변경되는 경우에는 선언된 값만 수정한다.
public class Constant {
public static void main(String[] args) {
final float PI = 3.14F;
PI = 3.15F; //error! final로 선언된 값은 변경 불가
}
}
Eclipse에서 실행하면 에러가 나는 것을 확인할 수 있다.
리터럴(literal)
- 리터럴 : 프로그램에서 사용하는 모든 숫자, 값, 논리 값
(변수 또는 상수에 리터럴이 대입되는 방식)
- 리터럴에 해당되는 값은 특정 메모리 공간인 상수 풀(constant pool)에 저장되어 있고,
필요한 경우 상수 풀에서 가져와서 사용한다.
- 상수 풀에 저장할 때 정수는 int로, 실수는 double로 저장하기 때문에 long이나 float 값으로 저장해야 하는 경우에는 식별자 (L, F)를 명시해야 한다.
형 변환(type conversion)
- 자료형은 각각 사용하는 메모리의 크기와 방식이 다르기 때문에 서로 다른 자료형의 값이 대입되는 경우 형 변환이 일어난다.
- 묵시적 형변환 : 작은 수에서 큰 수로, 덜 정밀한 수에서 더 정밀한 수로 대입되는 경우 자동으로
형 변환이 발생한다.
- 명시적 형 변환 : 묵시적 형 변환의 반대의 경우로, 변환되는 자료형을 명시해야한다.
(자료의 손실이 발생할 수 있다.)
묵시적 형 변환 예시
public class ImplicitConversion {
public static void main(String[] args) {
byte bNum = 10;
int num = bNum; //byte보다 int가 더 크기 때문에 묵시적 형 변환
System.out.println(num);
long lNum = 10; //10은 int값인데 long이 더 크기 때문에 L을 붙이지 않아도 묵시적 형 변환
float fNum = lNum; //long보다 float이 더 정밀한 수이기 때문에 묵시적 형 변환
System.out.println(fNum);
double dNum = fNum + num;
// fNum(float)과 num(int)를 더할 때 int가 float으로 묵시적 형 변환
// 더한 결과(float)이 더 정밀한 double로 묵시적 형 변환
System.out.println(dNum);
}
}
(변수 또는 상수에 리터럴이 대입되는 방식)
필요한 경우 상수 풀에서 가져와서 사용한다.
- 자료형은 각각 사용하는 메모리의 크기와 방식이 다르기 때문에 서로 다른 자료형의 값이 대입되는 경우 형 변환이 일어난다.
- 묵시적 형변환 : 작은 수에서 큰 수로, 덜 정밀한 수에서 더 정밀한 수로 대입되는 경우 자동으로
형 변환이 발생한다.
- 명시적 형 변환 : 묵시적 형 변환의 반대의 경우로, 변환되는 자료형을 명시해야한다.
(자료의 손실이 발생할 수 있다.)
묵시적 형 변환 예시
public class ImplicitConversion {
public static void main(String[] args) {
byte bNum = 10;
int num = bNum; //byte보다 int가 더 크기 때문에 묵시적 형 변환
System.out.println(num);
long lNum = 10; //10은 int값인데 long이 더 크기 때문에 L을 붙이지 않아도 묵시적 형 변환
float fNum = lNum; //long보다 float이 더 정밀한 수이기 때문에 묵시적 형 변환
System.out.println(fNum);
double dNum = fNum + num;
// fNum(float)과 num(int)를 더할 때 int가 float으로 묵시적 형 변환
// 더한 결과(float)이 더 정밀한 double로 묵시적 형 변환
System.out.println(dNum);
}
}
형 변환을 명시적으로 작성하지 않아도 자동으로 형 변환이 발생하여 정상 출력되는 것을 확인할 수 있다.
명시적 형 변환 예시
public class ExplicitConversion {
public static void main(String[] args) {
int iNum = 1000;
byte bNum = (byte)iNum;
// 1000은 2진수로 0011 1110 1000
// byte는 1바이트(8비트)이므로 뒤쪽의 1110 1000 값만 대입됨
System.out.println(iNum);
System.out.println(bNum); // 1110 1000 은 10진수로 -24
double dNum = 3.14;
iNum = (int)dNum;
System.out.println(iNum);
float fNum = 0.9F;
int num1 = (int)dNum + (int)fNum; //각각을 형변환 후 덧셈 3+0=3
int num2 = (int)(dNum + fNum); //덧셈 후 형변환 3.14+0.9=4.04 -> 4
System.out.println(num1);
System.out.println(num2);
}
}
명시적 형 변환을 할 경우 데이터가 원하지 않는 값으로 바뀔 수 있다는 것을 예시를 통해 확인 할 수 있다.
Author And Source
이 문제에 관하여(4강. 변수와 자료형(3)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@migratory_bird/Do-it-Java-Programming-4저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)