먼저, 자바의 자료형은 크게 두 종류로 나눌 수 있다.
기본형과 참조형이다.
기본형은 C언어를 공부했던 사람이라면 짐작이 가겠지만 자바에는 C언어에 없는 자료형도 있다.
일단 크기가 작은 순서대로 나열하면 boolean, byte, char, short, int, long, float, double이다.
반대로 참조형은 단순히 생각하면 기본형이 아닌 모든 변수는 참조형에 해당한다고 볼 수 있다.
가장 유명한 String을 대표적인 예로 꼽을 수 있다.
이번 글에서는 가장 기본적인 기본 자료형만 다뤄볼 생각이다.
내가 실제로 강의를 들으면서 실습했던 예제의 코드를 가져와봤다.
public class Ex01 {
public static void main(String[] args) {
byte age;
short point;
int price;
long totalSales;
age = 23;
point = 32000;
price = 3500000;
totalSales = 2147483648L;
System.out.println(age);
System.out.println(point);
System.out.println(price);
System.out.println(totalSales);
}
}
C언어를 공부했던 사람이라면 위의 main함수 안에 있는 코드를 이해할 수 있을 것이라 생각한다.
그런데 살짝 특이한 점이 보인다. 내가 long으로 선언한 저 totalSales라는 변수값이 이상하다.
분명히 long은 정수형인데 영문자가 껴있다.
그 이유는 생각보다 간단하다. 자바에서는 데이터의 기본 값(?)이 정해져 있다.
예를 들어, 내가 아래처럼 데이터를 쓴다면
3.14
7
3.14는 알다시피 실수형이다. 그런데 기본 실수형(?)은 뭘까?
바로 double이다. 내가 3.14를 쓰면 자바 컴파일러는 3.14를 double형으로 생각한다.
7은 int형으로 생각한다.
그럼 다시 위의 예제로 돌아와서 나는 왜 long형 변수에 L을 붙여놨을까?
자바와 C에서는 int형이 같은 4byte이다.
그럼 int형이 가질 수 있는 범위는 대략 -21억에서 +21억이다.
이쯤되면 얼추 느낌이 올 것 같다. 사실 내가 쓴 숫자는 int형이 가질 수 있는 범위에 정확히 1을 더한 숫자이다.
여기서 내가 L을 빼버린다면 자바 컴파일러는 이렇게 해석한다고 볼 수 있다.
'저 숫자를 totalSales 변수에 대입해야하는데 2147483648은 int형으로는 못 가지는 숫자다.' 라며 에러 메세지를 보여줄 것이다.
해당 메세지를 그대로 쓰면 "The literal 2147483648 of type int is out of range"라는 메세지를 띄운다.
그렇게, 에러 메세지를 해결하고 위 예제를 실행하면 Console 창에서는 마지막 줄의 totalSales가 2147483648L로 출력되지 않고,
당연하게 L을 떼고 출력된다.
'Language > Java' 카테고리의 다른 글
Java에서의 String 소개 - 1 (0) | 2022.02.09 |
---|---|
Java의 print와 scan (0) | 2022.02.03 |
짧은 객체지향 프로그래밍 소개 (0) | 2022.02.01 |
Java 참조 자료형과 출력 예제 (0) | 2022.01.29 |
Java 기본 자료형 - 2 (0) | 2022.01.28 |