| Java 기본형 | Java 래퍼클래스 | MySQL | Oracle | 크기 | 표현가능 숫자범위 |
|---|---|---|---|---|---|
| byte | Byte | TINYINT | NUMBER(3) | 1byte | -128 ~ 127 |
| short | Short | SMALLINT | NUMBER(5) | 2byte | -32,768 ~ 32,767 |
| int | Integer | INT | NUMBER(10) | 4byte | -2,147,483,648 ~ 2,147,483,647 |
| long | Long | BIGINT | NUMBER(19) | 8byte | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 |
ex1) Long l = 105L;
- Long: 래퍼 클래스 타입
- l: 변수명
- 105: 값
- L: long 타입 리터럴 표시 (필수)
큰 숫자를 저장할 수 있는 상자(변수)를 만들어서 105를 담는 것
L을 붙이는 이유: "이건 큰 숫자 전용 상자에 넣을 거야!" 라고 표시
실생활 비유: "큰 상자(Long)에 105라는 숫자를 담았어요"
다른 예시들
long l1 = 105L; // 기본형 (소문자)
Long l2 = 105L; // 래퍼클래스 (대문자)
long l3 = 105; // L 생략 가능 (int 범위 내)
ex2) int arr = new int[3];
- int[]: 정수형 배열
- arr: 배열 변수명
- new: 메모리 할당
- [3]: 배열 크기 (3칸)
생성 결과
arr[0] = 0 // 기본값 0으로 초기화
arr[1] = 0
arr[2] = 0
다른 선언 방법들
int[] arr1 = new int[3]; // 권장되는 방식
int[] arr2 = {1, 2, 3}; // 초기값 지정
int[] arr3 = new int[]{1,2,3}; // 명시적 초기화
숫자 3개를 순서대로 저장할 수 있는 칸막이 상자를 만드는 것
실생활 비유: "3칸짜리 서랍장을 새로 만들었어요"
[0][0] [0] // 처음에는 각 칸이 0으로 채워짐
값을 넣으면:
arr[0] = 10; // 첫 번째 칸에 10을 넣기
-> [10][0] [0]
ex3) boolean b[];
- boolean: 논리형 타입
- b: 배열 변수명
- []: 배열 표시
실제 사용시에는 크기 지정 필요
boolean b[] = new boolean[3];
결과
b[0] = false // 기본값 false로 초기화
b[1] = false
b[2] = false
다른 선언 방법들
boolean[] b1; // 권장되는 방식
boolean[] b2 = {true, false}; // 초기값 지정
boolean b3[] = new boolean[3]; // 크기만 지정
참/거짓만 저장할 수 있는 칸막이 상자를 만들겠다는 선언(아직 서랍장(칸 수)은 실제로 안 만든 상태)
실제 사용하려면:
boolean b[] = new boolean[2]; // 2칸짜리로 만들기
-> [false][false] // 처음에는 false로 채워짐
값을 넣으면:
b[0] = true; // 첫 번째 칸에 true 넣기
-> [true][false]
⚠주의사항 ⚠
1. Long 타입에서 L 생략 주의
Long l = 105; // 경고! 암시적 박싱
Long l = 105L; // 권장되는 방식
2. 배열 선언 위치 차이
int[] arr; // 권장 (타입의 일부로 표현)
int arr[]; // 비권장 (C언어 스타일)
3. 배열 초기화 필수
boolean b[]; // 선언만 한 상태
b = new boolean[3]; // 반드시 초기화 필요
| Java 기본형 | Java 래퍼클래스 | MySQL | Oracle | 크기 | 정밀도(표현가능 소수점) |
|---|---|---|---|---|---|
| float | Float | FLOAT | NUMBER(38,7) | 4byte | 소수점 7자리 |
| double | Double | DOUBLE | NUMBER(38,15) | 8byte | 소수점 15자리 |
| - | BigDecimal | DECIMAL | NUMBER | 가변 | 지정가능 |
| Java 기본형 | Java 래퍼클래스 | MySQL | Oracle | 크기 | 특징 |
|---|---|---|---|---|---|
| char | Character | CHAR | CHAR | 2byte(Java), 1~255byte(DB) | 고정 길이(한글자만 가능) |
| Java 타입 | MySQL | Oracle | 크기 | 특징 |
|---|---|---|---|---|
| String | VARCHAR | VARCHAR2 | ~65,535byte(MySQL), ~4000byte(Oracle) | 가변 길이 |
| String | TEXT | CLOB | ~65,535byte | 대용량 텍스트 |
| String | MEDIUMTEXT | CLOB | ~16,777,215byte | 더 큰 텍스트 |
| String | LONGTEXT | CLOB | ~4GB | 초대용량 텍스트 |
Ex1) String name = "qknwfwibg"
Ex2) String name = "qkaaaaaaaanwfwibg"
-> 위 두개에서 레퍼런스변수(name) 은 무조건 8바이트
| Java 타입 | MySQL | Oracle | 형식 | 용도 |
|---|---|---|---|---|
| java.util.Date | DATETIME | DATE | YYYY-MM-DD HH:MM:SS | 날짜+시간 |
| java.sql.Date | DATE | DATE | YYYY-MM-DD | 날짜만 |
| java.sql.Time | TIME | DATE | HH:MM:SS | 시간만 |
| java.sql.Timestamp | TIMESTAMP | TIMESTAMP | YYYY-MM-DD HH:MM:SS.SSS | 날짜+시간+밀리초 |
| java.time.LocalDate | DATE | DATE | YYYY-MM-DD | Java8 이후 날짜 |
| java.time.LocalTime | TIME | DATE | HH:MM:SS | Java8 이후 시간 |
| java.time.LocalDateTime | DATETIME | DATE | YYYY-MM-DD HH:MM:SS | Java8 이후 날짜+시간 |
| Java 기본형 | Java 래퍼클래스 | MySQL | Oracle | 저장값 | 특징 |
|---|---|---|---|---|---|
| boolean | Boolean | TINYINT(1) | NUMBER(1) | 0/1 | true/false |
| Java 타입 | MySQL | Oracle | 크기 | 용도 |
|---|---|---|---|---|
| byte[] | TINYBLOB | BLOB | ~255byte | 작은 바이너리 |
| byte[] | BLOB | BLOB | ~65,535byte | 일반 바이너리 |
| byte[] | MEDIUMBLOB | BLOB | ~16MB | 중간 바이너리 |
| byte[] | LONGBLOB | BLOB | ~4GB | 대용량 바이너리 |
| Java 타입 | MySQL | Oracle | 특징 |
|---|---|---|---|
| String | JSON | CLOB | JSON 형식 데이터 |
| Object | JSON | CLOB | 객체 매핑 가능 |
참조형 변수를 TV와 리모컨으로 비유해서 설명해드리겠습니다! 📺
// 1. 기본형 변수 (값을 직접 저장)
int age = 25; // 나이라는 값이 직접 들어있음
// 2. 참조형 변수 (주소를 저장)
String name = "Kim"; // "Kim"이 있는 위치를 가리키는 화살표만 저장
기본형 변수 = TV 버튼
- TV에 있는 실제 버튼
- 버튼 자체가 기능을 가짐
참조형 변수 = TV 리모컨
- TV를 가리키는 리모컨
- 실제 TV는 다른 곳에 있음
- 리모컨은 TV의 위치 정보만 가짐
// 1. 기본형 (Stack 영역에 직접 저장)
int number = 100;
[Stack 영역]
number = 100 // 값이 직접 저장
// 2. 참조형 (Heap 영역의 주소를 저장)
String text = "Hello";
[Stack 영역] [Heap 영역]
text = @ABC123 → "Hello" // 주소만 저장
// 모든 참조형 변수는 주소값만 저장
// 32bit 시스템 = 4바이트
// 64bit 시스템 = 8바이트
String str = "긴 문자열"; // 8바이트 (주소 저장)
int[] arr = new int[1000]; // 8바이트 (주소 저장)
Object obj = new Object(); // 8바이트 (주소 저장)
String name = "Kim";
String name2 = name; // 같은 "Kim"을 가리킴
// 메모리 구조
[Stack] [Heap]
name = @ABC123 → "Kim"
name2 = @ABC123 ↗
기본형 (8가지)
참조형 (나머지 전부/모든 래퍼변수는 참조형변수이다)
참조형 변수
├── 래퍼 클래스 (Integer, Long, Double 등)
├── String
├── Array
├── Class
└── 기타 객체들
쉽게 말해서, 참조형 변수는 "실제 물건이 있는 위치를 알려주는 리모컨" 같은 것입니다!
// 기본형: null 불가
int num = null; // 컴파일 에러
boolean flag = null; // 컴파일 에러
// 래퍼클래스: null 가능
Integer number = null; // OK
Boolean flag = null; // OK
기본형 < 래퍼클래스 (메모리 사용량)
- int: 4byte
- Integer: 16byte (객체 오버헤드 포함)
// 1. 단순 연산시 기본형 사용 권장
int sum = 0;
for(int i = 0; i < 1000000; i++) {
sum += i;
}
// 2. 컬렉션, null 필요시 래퍼클래스 사용
List<Integer> numbers = new ArrayList<>();
숫자 데이터
문자 데이터
날짜 데이터
이러한 데이터 타입들을 상황에 맞게 적절히 선택하여 사용하면 됩니다.