[Java] 자료형
메모리 공간은 데이터를 저장하기 위해 생성한다. 이러한 메모리 공간은 목적에 따라 크기와 특징이 다른데, 이를 자료형이라고 한다. 즉, 메모리 공간의 자료형에 따라 저장할 수 있는 값의 종류와 특징이 결정된다.
자료형 선언시 주의할 점
1) 자료형은 반드시 사용하기 전에 선언해야함
2) 자료형은 반드시 한 번만 선언해야함
-> 변수의 자료형이 처음 선언되면 메모리에는 선언된 자료형의 데이터만 저장할 수 있는 공간이 만들어지는데,
메모리에서 한 번 만들어진 공간은 사라질 수는 있어도 데이터를 저장하는 기능은 변경할 수 없기 때문이다.
이름규칙
· 변수, 상수, 메서드 공통
1) 영문 대소문자와 한글 사용가능
ex) abc, ABC, aBc, 가나다
2) 특수문자는 밑줄과 달러 표기만 가능
ex) $abc, _abc, ab_c, $abc_
3) 아라비아 숫자를 사용할 수는 있지만, 첫 글자로는 불가능
ex) a3bc, ab3c
4) 자바에서 사용하는 예약어는 사용불가
ex) int(X), break(X), public(X), static(X)
자료형의 종류
구분 | 저장값 | 자료형 |
기본자료형 | 참, 거짓: true, false 정수: ····, -1, 0, 1, ···· 실수: -5, 4, 1, 7, ····· 문자(정수): 'A', 'b', ···· |
boolen byte, short, int, long float, double chaar |
참조자료형 | 객체: Object | 배열, 클래스, 인터페이스 |
-> 똑같은 정수를 저장하는데 자료형이 4개인 이유: 메모리를 효율적으로 사용하기 위해
자바 메모리의 구조
클래스영역 정적영역 상수영역 메서드영역 |
스택영역 | 힙영역 |
· 스택: LIFO 구조로 변수들이 저장되는 공간. 기본자료형이든 참조자료형이든 상관없이 모든 지역변수가 위치하는 영역
· 힙: FIFO 구조로 객체들이 저장되는 공간. 참조 자료형 변수가 가리키는 실제 데이터
실제 데이터값의 저장위치
· 기본 자료형: 스택메모리에 생성된 공간에 실제 변수값을 저장
· 참조 자료형: 실제 데이터값은 힙 메모리에 저장하고, 스택 메모리의 변수공간에는 실제 변수값이 저장된 힙 메모리의 위치값을 저장
기본 자료형의 멤모리 크기와 저장할 수 있는 값의 범위
· 1byte: boolean, byte
· 2byte: short, char
· 4byte: int, float
· 8byte: long, double
-> byte < short / char < int < long < float < double
· 정수 리터럴의 자료형 결정
byte a = 130; (오류 발생)
-> byte에 저장할 수 없는 범위의 정수값이 입력되면 int로 인식( byte = int )
· 실수 리터럴의 자료형 결정
float a = 3.5; (오류 발생)
-> 실수 리터럴은 기본적으로 double로 인식 ( float = double )
기본 자료형간의 타입변환
· 캐스팅 방법 1. 자료형
int value1 = (int)5.3; // 5
long value2 = (long)10; // 10
float value3 = (float)5.8; // 5.8
double value4 = (double)16; // 16.0
· 캐스팅 방법 2. L, F
long value5 = 10L; // 10
long value6 = 10l; // 10
float value7 = 5.8F; // 5.8
float value8 = 5.8F; // 5.8
캐스팅
· 자동형변환: 업캐스팅, 크기가 작은 자료형을 큰 자료형에 대입
-> 어떤 데이터 손실도 발생하지 않기 때문에 타입변환 코드를 넣지 않아도 컴파일러가 자동으로 형변환
· 명시적형변환: 다운캐스팅, 큰 자료형을 작은 자료형에 대입
-> 데이터 손실이 발생할 수 있기 때문에 컴파일러가 자동형변환을 하지 않음
· 업캐스팅이 아님에도 byte 및 short 자료형에 저장할 수 있는 범위 내의 정수리터럴값이 대입될 때는 자동형변환이
각각의 자료형으로 수행
// 자동타입변환
float a = 3; // (int) -> (float) 업캐스팅 3.0
long b = 5; // (int) -> (long) 업캐스팅 5
double c = 7; // (int) -> (double) 업캐스팅 7.0
byte d = 9; // (int) -> (byte) 9
short e - 11; // (int) -> (short) 11
// 수동타입변환
byte a = (byte)128 // (int) -> (byte) 다운캐스팅 -128
int a = (int)3.5 // (double) -> (int) 다운캐스팅 3
float c = (float)7.5 // (double) -> (float) 다운캐스팅 7.5
자료형 연산
· 같은 자료형 간의 연산 결과
ex) byte + byte = int / short + short = int
· 다른 자료형 간의 연산 결과
ex) byte + short = int / int + float = float / long + float = float