자료형은 어느 언어에서나 알아야 하는 부분인데 매번 잊어버리기 십상이다. 파이썬의 경우 자료형에 크게 신경쓰지 않아도 됐던것 같은데 자바의 경우는 직접 선언해줘야 한다. 코틀린의 경우에도 변수 선언시에 굳이 입력하지 않아도 알아서 형 변환을 해줬다. 자료형 선언해주는게 좋다고는 들었다. 반성합니다.
1. 개요
자바의 자료형은 기본 자료형(Primitive Data Type), 참조 자료형(Reference Data Type)으로 나눌 수 있다. 래퍼 클래스(Wrapper Class)도 있는데 이는 기본 자료형을 객체화 시키는 클래스이다. 박싱(Boxing)과 언박싱(Unboxing)의 개념이 나오는데 이건 따로 정리하 겠다.
일단 기본 자료형(Primitive Data Type)과 참조 자료형(Reference Data Type) 먼저!
1 - 1 ) 기본 자료형(Primitive Data Type)
변수에 "실제 값"을 저장하는 것.
실제 값을 저장하기 때문에 계산에 용이하다.
진위(boolean), 문자(char), 정수(byte, short, int, long), 실수(float, double)로 총 8가지가 있다.
숫자형에 경우 아래에서 다시 설명할 것이기 때문에 문자형과 논리형에 대한 내용만 보자
자료형 | 메모리 사이즈 | 기본값 |
문자(char) | 2byte | \u0000 |
진위(boolean) | 1bit | false |
1-2 ) 참조 자료형(Reference Data Type)
변수에 실제 값이 아닌 데이터가 저장된 메모리의 "주소값"을 저장하는 것.
참조 자료형의 경우 기본 자료형과 다르게 값이 아니라 "주소값"을 저장한다.
즉, 메모리 상에서 동적으로 생성된 Object의 참조값을 저장하는 것이다. -> 자바의 모든 클래스는 java.lang.Object를 상속받기 때문!
메모리 사이즈로 JVM에서 8byte를 할당한다고 한다. 또한 Object를 상속받기 때문에 object 클래스에 있는 메소드인 equals()를 사용할 수 있다.
종류
- String
- ArrayList
- HashMap
- HashSet
- LinkedList
- Queue
- Stack
- class
- annotation
- interface
- enum
종류가 저렇게 있는데 하나하나 추후에 글로 정리할 계획이다!
2. 기본 자료형 - 숫자
일단 숫자 자료형의 종류와 메모리 크기는 다음과 같다.
종류 | 메모리 사이즈 | 범위 |
byte | 1byte | -128 ~ 127 |
short | 2byte | -32768 ~ 32767 |
int | 4byte | -2147483648~ 2147483647 |
long | 8byte | -9223372036854775808 ~ 9223372036854775807 |
float | 4byte | -3.4*10^38 ~ 3.4*10^38 |
double | 8byte | -1.7*10^308 ~ 1.7*10^308 |
여기서 long과 float의 경우 뒤에 L과 F를 붙여줘야 한다. double의 경우는 생략이 가능하다!
byte by = 10;
short sr = 10;
int num = 10;
long ln = 10L;
float fl = 10F;
double dl = 10;
2 - 1 ) 형 변환
프로그램에서는 값의 연산을 위해서는 같은 타입끼리만 가능하다! 그렇기 때문에 형 변환 = 타입 변환 작업이 필요하다.
숫자 자료형 사이에서 형 변환이 발생할 수 있는데 byte를 int로 int를 byte로 변환할 수 있다.
하지만 중요한 점이 byte가 int보다 담을 수 있는 범위가 작다. 그렇기에 다음과 같은 코드가 있을 때
byte bi = 10;
int num = 130;
bi = num; // Type mismatch: cannot convert from int to byte
in = bi;
위에 주석처럼 오류가 발생한다!
즉, 아래와 같이 해줘야 한다.
! 큰 자료형 -> 작은 자료형 : 낮은 자료형으로 강제 형변환
! 작은 자료형 -> 큰 자료형 : 높은 자료형으로 자동 형변환
자동 형변환
컴파일러가 자동으로 타입 변환이 발생.
위에 말했다 시피 작은 자료형이 큰 자료형의 타입을 가진 변수에 넣을 때 이뤄진다.
int num = 10;
double dl = 20.5;
System.out.println(num+dl); // 30.5
추가적으로 연산시에도 int + double = double 형태로 자동 형변환되어 나온다.
강제 형변환
타입 캐스트 = (자료형) 값 을 사용하여 명시적으로 형 변환을 함.
위의 그림에 화살표를 반대로 꺾어주면 된다.
double dl = 100.0;
int int = (int) double;
System.out.println(int) // 100;
'Language > java' 카테고리의 다른 글
[Java] HashMap이란 (0) | 2024.12.16 |
---|---|
[Java] ArrayList란 (0) | 2024.12.13 |
[Java] String이란 (0) | 2024.12.12 |
[Java] 자바 시작하기 (2) | 2024.01.11 |