🚩 1. 자바의 데이터 타입이란?
- 자바의 데이터 타입은 변수에 저장되는 값의 종류와 크기를 정의하는 역할을 한다.
- 데이터 타입은 변수 또는 표현식이 메모리에 할당될 때, 어떤 종류의 데이터를 저장할 수 있는지를 결정한다.
- 자바는 기본형 데이터 타입과 참조형 데이터 타입으로 나뉜다.
- 기본형 데이터 타입은 실제 값을 저장하고, 참조형 데이터 타입은 객체의 주소를 저장한다.
📌 1-1. 기본 데이터 타입(Primitive)
- 기본 데이터 타입(원시 데이터 타입)은 변수에 직접 값을 저장하는 데이터 타입이다. 변수가 실제 값을 가지고 있으며, 해당 값을 직접 조작할 수 있다.
- 특징
- 변수에는 실제 값이 저장되고, 메모리 상에서 해당 값을 직접 보관한다.
- 고정된 크기를 가지며, 메모리 사용이 효율적이다.
- 연산이 빠르고 메모리를 적게 사용하여 성능이 좋다.
- 예시: 정수형(byte, short, int, long), 실수형(float, double), 논리형(boolean), 문자형(char)
- 주의점
- 값의 범위와 크기를 고려하여 적절한 데이터 타입을 선택해야 한다.
- 정수형과 실수형의 정밀도 차이에 주의하여 실수 연산 시 정확도 문제를 고려해야 한다.
- 기본 데이터 타입은 객체가 아니기 때문 null 값을 가질 수 없으므로 초기화에 유의해야 한다.
종류 | 데이터 타입 | 크기 byte / bit | 기본값 | 설명 |
논리형 | boolean | 1 / 8 | false | true 또는 false 값 저장 |
문자형 | char | 2 / 16 | '₩u0000' | '₩u0000' ~ '₩uffff' 범위의 단일 유니코드 문자 저장 |
정수 | byte | 1 / 8 | 0 | -128 ~ 127 까지의 정수 저장 |
short | 2 / 16 | 0 | -32,768 ~ 32,767 까지의 정수 저장 | |
int | 4 / 32 | 0 | -2,147,483,648 ~ 2,147,483,647 까지의 정수 저장 | |
long | 8 / 64 | 0L | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 까지의 정수 저장 |
|
실수 | float | 4 / 32 | 0.0f | 1.40239846E-45 ~ 3.40282347E38 까지의 실수 저장 |
double | 8 / 64 | 0.0d | 4.9406564584124654E-324~ 1.7976931348623157E308 까지의 실수 저장 |
❗표에 나오는 기본값은 멤버 변수에만 적용된다. 객체 생성 중에 필드(인스턴스 변수)의 값이 명시적으로 할당되지 않은 경우 Java는 데이터 유형에 따라 멤버 변수에 기본값을 자동으로 할당된다. 그러나 로컬 변수는 수명이 일시적이고, 값을 쉽게 변경할 수 있어 기본값의 개념이 없기 때문에 로컬 변수를 사용하기 전에 반드시 값을 할당하여 초기화 해야한다. 값을 할당하지 않고 로컬 변수를 사용하려고 하면 Java 컴파일러에서 오류가 발생한다.
📌 1-2. 참조 데이터 타입(Primitive)
- 참조 데이터 타입은 객체를 참조하고, 변수에는 객체의 주소가 저장되는 데이터 타입이다. 변수를 통해 객체의 속성에 접근하거나 메서드를 호출할 수 있다.
- 특징
- 변수에는 객체의 주소가 저장되며, 실제 데이터는 힙 메모리에 저장된다.
- 객체의 크기가 가변적이므로, 메모리 사용이 상대적으로 더 많을 수 있다.
- 객체의 속성과 메서드를 활용하여 다양한 기능을 구현할 수 있다.
- 예시: 클래스, 배열, 인터페이스
- 주의점
- 객체의 생성과 소멸에 대한 관리가 필요하며, 적절한 객체 생명 주기를 유지해야 한다.
- null 값 체크와 객체의 유효성을 확인하는 안전한 프로그래밍 습관이 필요하다.
- 메모리 누수와 같은 문제에 주의하여 적절한 객체 관리를 해야 한다.
- close() 또는 release()와 같은 메서드 호출로 적절한 자원 해제
데이터 타입 | 크기 | 기본값 | 설명 |
String | 다양하다 | null | 일련의 문자열 저장 |
Array | 다양하다 | null | 동일한 타입의 요소들을 고정된 길이만큼 순서대로 저장 |
Class | 다양하다 | null | 특정 속성, 메서드를 가진 객체를 생성하기 위한 설계도를 정의 |
Interface | 다양하다 | null | 구현 클래스가 따라야하는 기능을 명세 |
Enum | 다양하다 | null | 상수들의 집합(변경 불가능한 변수들)을 표현하는 특수 타입 클래스 |
📌1-2-1. 불변 객체와 가변 객체
객체 | 불변 객체(Immutable Objects) | 가변 객체(Mutable Objects) |
정의 | 한번 생성되면 상태가 변하지 않는 객체. | 생성된 후에도 상태가 변할 수 있는 객체. |
장점 | 1. 스레드에 안전(Thread-safe) 2. 해시 기반 컨테이너에 사용하기 좋음 3. 시간이 지나도 상태가 변하지 않아 예측 가능 |
1. 상태 변경이 필요한 경우 유용 2. 메모리 효율적인 경우가 있음 3. 인스턴스를 계속 만들지 않아도 됨 |
단점 | 1. 객체의 상태를 변경하기 위해선 새로운 객체를 만들어야 함 2. 메모리와 성능에 부담이 될 수 있음 |
1. 스레드에 불안전(Thread-unsafe) 2. 상태 변화로 인해 예측이 어려울 수 있음 |
객체명 | String, WrapperClass(Integer, Double ...) Boolean, BigDecimal, LocalDateTime 등 |
Collections(ArrayList, HashMap,HashSet ...), StringBuilder, StringBuffer, 등 |
✔️마치며...
자바의 데이터 타입을 정의하고 사용함으로써 변수의 유형을 명확하게 지정할 수 있으며, 이는 추후 해당 코드에 대한 버그 수정, 활용, 재사용에 용이하다. 또한 타입 정보를 확인함으로써 변수의 용도와 의도를 전달할 수 있고 프로그램의 안정성과 효율성을 높일 수 있다.