데이터를 저장하기 위해 생성하는 메모리 공간은 목적에 따라 크기와 특징이 다르다. 이를 자료형이라 한다. C, 자바와 같은 컴파일 언어는 변수를 사용하기 전 반드시 자료형을 선언해야 한다. 변수에 자료형이 선언되면 메모리에는 변숫값을 저장할 수 있는 공간이 만들어진다.
주의사항
- 자료형은 반드시 사용하기 전에 선언
- 반드시 한 번만 선언 => 자료형이 한 번 선언된 변수의 자료형은 바꿀 수 없음.
그렇다면 변수에 한 번 지정된 자료형을 바꿀 수 없는 이유는 뭘까? 바로 메모리에서 한 번 만들어진 공간이 사라질 수는 있어도 데이터를 저장하는 기능은 변경할 수 없기 때문.
변수의 선언과 값의 대입을 분리하는 경우 처음 변수값을 초기화해주지 않으면 컴파일 오류가 발생한다.
이름 짓기 규칙
변수와 상수의 이름을 지을 때는 필수 사항과 권장 사항을 준수해 이름을 지어야 한다. 필수 사항을 지키지 않을 경우 syntax error(문법 오류)가 발생해 컴파일 자체가 안 된다. 권장 사항은 개발자끼리의 약속이고 지키지 않는 경우 코드의 가독성이 떨어지므로 준수해야 한다.
필수 사항
- 영문 대소문자와 한글을 사용할 수 있음
- 특수 문자는 언더바와 달러만 사용할 수 있음
- 아라비아 숫자를 사용할 수 있음
- 예약어는 사용할 수 없다
권장 사항
권장 사항(개발자들 끼리의 약속)의 핵심은 변수, 상수, 메서드를 이름만으로 구분할 수 있게 하는 것이다.
- 변수, 메소드, 인스턴스 : 카멜케이스 (
memberInfo
) - 상수 : 전부 대분자 (
MEMBER_INFO)
- 클래스 : 첫글자 영문대문자, 두 단어 이상의 조합일 경우 각 단어의 첫글자를 대문자로 표기 (
MemberInfo
)
변수의 생존 기간
: 메모리에 변수가 만들어진 이후 사라지기까지의 기간.
변수 생성은 개발자가. 메모리에서 변수를 삭제하는것은 JVM 알아서 한다.
변수는 선언된 시점에 생성되어 자신이 선언된 중괄호의 닫힌 중괄호를 만나면 메모리에서 삭제된다.
**변수의 생성 시점은 값을 대입한 시점이 아닌, 선언한 시점이다.
자료형의 종류
자바에는 8가지의 기본 자료형이 있으며, 이외의 모든 자료형은 참조 자료형이다. 참조 자료형은 가짓수가 무한개이다.
기본 자료형의 이름은 모두 소문자로 시작하고, 참조 자료형의 이름은 모두 대문자로 시작한다. (권장사항)
기본 자료형은 스택메모리에 실제 변숫값을 저장, 참조 자료형은 스택메모리에 힙 메모리의 위칫값을 저장, 실제 변숫값은 힙 메모리에 저장한다.
자료형 | 크기 | 값의 범위 | |
부물대수 | boolean | 1byte | true, false |
정수 | byte | 1byte | -27~27-1(-128~127) |
short | 2byte | -215~215-1(-32768~32767) | |
int(기본) | 4byte | -231~231-1 (약 21억) | |
long | 8byte | -263~263-1 (약 900경) | |
실수 | float | 4byte | ±(1.40*10-45~3.40*1038) |
double(기본) | 8btye | ±(4.94*10-324~1.79*10308) | |
문자(정수) | char | 2byte |
- float의 정밀도는 소수점 7자리, double의 정밀도는 소수점 15자리 정도.
- char은 문자를 작은따옴표 안에 표기한다
- char 자료형 메모리 안은 문자가 아니라 정수가 저장된 형태이므로 문자에 해당하는 정숫값을 직접 입력해도 같은 결과를 얻을 수 있다. 10진수, 16진수 모두 입력할 수 있고 최종 메모리에는 2진수의 값이 저장된다.
다음은 char 자료형 변수에 문자 'A'를 다양한 형태로 저장하는 예시다.
char a = 'A'; // 문자
char b = 65; // 10진수
char c = 0b1000001; // 2진수
char d = 00101; // 8진수
char e = 0x0041; // 16진수
char f = '\u0041'; // 유니코드
기본 자료형 간의 타입 변환 (type casting)
boolean을 제외한 기본 자료형 7개는 자료형을 서로 변환할 수 있다. 자바는 항상 대입 연산자를 중심으로 왼쪽과 오른쪽 자료형을 일치시켜야 하므로 타입 변환을 수행해야 할 때가 있다. 정수나 실수 리터럴은 숫자 뒤에 L(long)이나 F(float)를 붙여 타입 변환을 수행할 수 있다.
타입 변환 수행시에는 저장할 수 있는 값의 범위나 종류가 달라지므로 값이 변할 수 있다.
타입 변환에는 자동 타입 변환과 수동 타입 변환이 있다.
업캐스팅 (up-casting)
작은 자료형을 큰 자료형에 대입 하는 경우 (바이트 크기가 아닌 저장하는 값의 범위)
이 경우에는 어떠한 데이터 손실도 발생하지 않는다.
float n1 = 3; // int > float
long n2 = 5; // int > long
double n3 = 7; // int > double
다운캐스팅(down-casting)
큰 자료형을 작은 자료형에 대입하는 것
이 경우에는 데이터 손실이 발생할 수 있으므로 직접 명시적으로 타입 변환을 수행 해야함
기본 자료형간의 연산
같은 기본 자료형 간의 연산 결과
연산 | 결과 |
byte + byte | int |
short + short | int |
int + int | int |
long + long | long |
float + float | float |
double + double | double |
서로 다른 기본 자료형 간의 연산 결과
연산 | 결과 |
byte + short | int |
byte + int | int |
short + long | long |
int + float | float |
long + float | float |
float + double | double |
참고
Do it 자바 완전 정복
'Backend > JAVA' 카테고리의 다른 글
[Java] #5.2 참조자료형 - 문자열 (0) | 2023.05.21 |
---|---|
[Java] #5.1 참조 자료형 - 배열 (0) | 2023.05.16 |
[Java] #4 제어문과 제어 키워드 (1) | 2023.05.15 |
[JAVA] #3 연산자 (0) | 2023.05.10 |
[JAVA] 프로그래밍 언어와 자바 (0) | 2023.04.18 |