💡 Data type이란 해당 데이터가 메모리에 어떻게 저장되고, 프로그램에서 어떻게 처리되어야 하는지를 명시적으로 알려주는 것이다.
➡️ 자바에서 타입은 크게 기본형 타입(Primitive Type)과 참조형 타입(Reference Type)이 있다.
실제 데이터의 값을 저장하는 타입으로, 스택(Stack) 영역에 저장된다.
총 8가지의 기본형 타입을 미리 정의하여 제공한다.
입력값으로 null을 받을 수 없다.
제네릭 타입(Generic Type)에서 사용할 수 없다.
값의 범위를 벗어나면 컴파일 에러가 발생한다.
| 타입 | 크기 | 기본값 | 데이터 표현 범위 |
|---|---|---|---|
| boolean | 1 byte | false | true / false |
| byte | 1 byte | 0 | -128 ~ 127 |
| short | 2 byte | 0 | -32,768 ~ 32,767 |
| int | 4 byte | 0 | -2,147,483,648 ~ 2,147,483,647 |
| long | 8 byte | 0L | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 |
| float | 4 byte | 0.0F | (3.4 X 10-38) ~ (3.4 X 1038) 의 근사값 |
| double | 8 byte | 0.0 | (1.7 X 10-308) ~ (1.7 X 10308) 의 근사값 |
| char | 2 byte | \u0000' | 0 ~ 65,535 |
메모리의 번지 값을 통해 객체를 참조하는 타입으로, 힙(Heap) 메모리에 저장된다.
입력값으로 null을 받을 수 있다.
제네릭 타입(Generic Type)에서 사용할 수 있다.
문법상으로는 에러가 없지만 실행을 시켰을 때 런타임 에러가 발생할 수 있다.
| 타입 | 크기 | 기본값 |
|---|---|---|
| Array | 4 byte | null |
| Enumeration | 4 byte | null |
| Class | 4 byte | null |
| Interface | 4 byte | null |
💡 데이터 그 자체, 변하지 않는 데이터를 의미한다.
➡️ 정수, 실수, 문자, 논리, 문자열 리터럴이 있다.
(1) 정수 리터럴
int a = 10;
int a = 010;
int a = 0xA;
(2) 실수 리터럴
double d = 2.52;
float f = 0.1111f;
(3) 문자 리터럴
char c = 'A';
char c = 'a';
이스케이프 문자
| 문자 | 용도 | 유니코드 |
|---|---|---|
| '\t' | 수평탭 | 0x0009 |
| '\n' | 줄바꿈 | 0x000a |
| '\r' | 리턴 | 0x000d |
| '\"' | " 표시 | 0x0022 |
| '\' | ' 표시 | 0x0027 |
| '\' | \ 표시 | 0x005c |
| '\u16진수' | 16진수에 해당하는 유니코드 | 0x0000~0xfff |
(4) 논리 리터럴
boolean isTrue = true;
💡 스코프란 변수에 접근할 수 있는 유효 범위이다.
변수는 선언된 블록 내에서만 접근 가능하며, 블록은 중괄호 { } 로 구분된다.
💡 라이프타임이란 변수가 메모리에서 살아 있는 기간이다.
public class test {
int a; // 인스턴스 변수 static int
b; // 클래스 변수
void method() {
int c; // 지역 변수
}
}
지역 변수 (Local Variable) : 인스턴스 및 클래스 변수가 아닌 모든 변수
💡 타입 변환은 하나의 타입을 다른 타입으로 바꾸는 것이다. 자바에서는 boolean형을 제외한 나머지 기본 타입 간의 타입 변환을 자유롭게 수행할 수 있다.
➡️ 데이터 손실 문제 때문에 작은 타입에서 큰 타입으로의 변환은 가능하나 큰 타입에서 작은 타입으로의 변환은 불가능하다.
(1) 묵시적 타입 변환
💡 묵시적 타입 변환은 연산 시에 컴파일러가 자동으로 수행해주는 타입 변환이다.
➡️ 자바에서는 데이터 손실이 발생하는 대입 연산을 허용하지 않기 때문에 묵시적 타입 변환은 데이터의 손실이 발생하지 않거나 최소화 되는 방향으로 진행된다.
int a = 10;
double b = 5.5;
double c = a + b;
위의 예시에서 자바는 변수 a를 묵시적으로 double로 변경하기 때문에 오류없이 잘 작동한다.
(2) 명시적 타입 변환
💡 명시적 타입 변환은 연산 시에 사용자가 강제적으로 타입을 변경하는 것을 말한다.
➡️ 변환 시키고자 하는 데이터 앞에 (타입)을 작성하는데, 이것을 타입캐스트 연산자라고 한다.
int a = 10;
double = 5.5;
double c = (int)a + (int)b; // c = 15
double d = (int)a + (double)b; // d = 15.5
double e = (double)a + (double)b; // e = 15.5
💡 타입추론이란 타입이 정해지지 않은 변수에 대해서 컴파일러가 알아서 이 변수의 타입을 대입된 리터럴로 추론하는 것이다. 개발자가 타입을 명시하지 않아도 되어 코드량을 줄일 수 있으며 코드의 가독성을 높일 수 있다.
대표적인 타입추론 언어는 Javascript , kotlin , swift 등이 있다.
var