Java Data Type
Java의 자료형은 변수에 저장할 수 있는 데이터의 종류와 크기를 정의하여, 메모리를 효율적으로 사용하고
프로그램의 안정성을 높이는 데 도움을 준다.
Java 자료형은 크게 두 가지로 기본 자료형과 참조 자료형으로 구분된다.
Primitive Data Type (기본 자료형)
기본 자료형은 데이터를 직접 메모리에 저장하는 형태로, Java에서 미리 정의된 자료형이다.
8개의 기본 자료형이 있으며, 각 자료형은 고정된 메모리 크기를 사용한다.
자료형 | 크기 | 설명 | 예시 값 |
byte (정수형) | 1바이트 | -128 ~ 127의 정수를 저장한다. | -128, 0, 127 |
short (정수형) | 2바이트 | -32,768 ~ 32,767의 정수를 저장한다. | 1000, -2000 |
int (정수형) | 4바이트 | -2^31 ~ 2^31-1 범위의 정수를 저장한다. | 123456, -654321 |
long (정수형) | 8바이트 | -2^63 ~ 2^63-1 범위의 정수를 저장한다. | 123456789L |
float (부동소수점형) | 4바이트 | 소수점 이하 6~7자리의 실수를 저장한다. | 3.14f, -2.7f |
double (부동소수점형) | 8바이트 | 소수점 이하 15자리의 실수를 저장한다. | 3.141592, -0.5678 |
char (문자형) | 2바이트 | 단일 문자 하나를 유니코드로 저장한다. | 'A', '한' |
boolean (논리형) | 1바이트 | 참(true) 또는 거짓(false) 값을 가진다. | true, false |
Wrapper Clasee (래퍼 클래스)
Java의 기본 자료형을 객체로 다룰 수 있게 해주는 클래스이다.
Java에서는 기본 자료형을 객체처럼 사용할 수 없기 때문에,
기본 자료형을 객체로 다루어야 할 때는 래퍼 클래스를 사용한다.
각 기본 자료형마다 해당하는 래퍼 클래스가 있으며, 이를 통해 컬렉션 프레임워크나
제네릭 클래스 등 객체가 필요한 곳에서도 기본 자료형을 사용할 수 있다.
기본 자료형 | 래퍼 클래스 |
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
래퍼 클래스는 단순히 기본 자료형을 객체로 변환하는 것 외에도 여러 유용한 기능을 제공한다.
객체 생성
Integer intObject = Integer.valueOf(10); // int -> Integer 객체
문자열 변환
int num = Integer.parseInt("123"); // 문자열 -> int
String str = Integer.toString(123); // int -> 문자열
상수와 메서드 제공
int max = Integer.MAX_VALUE;
int min = Integer.MIN_VALUE;
Java 5부터는 오토박싱(Auto-boxing)과 언박싱(Unboxing)을 지원하여,
기본 자료형과 래퍼 클래스 간의 변환이 자동으로 이루어진다.
오토박싱(Auto-boxing)
Integer intObject = 10; // 기본형 int가 자동으로 Integer 객체로 변환
언박싱(Unboxing)
int num = intObject; // Integer 객체가 자동으로 int로 변환
오토박싱과 언박싱이 편리하지만, 불필요한 오토박싱 및 언박싱이 반복되면 성능에 영향을 줄 수 있다.
예를 들어, 반복문에서 기본 자료형을 래퍼 클래스로 자주 변환하는 경우 비효율이 발생할 수 있으므로 주의가 필요하다.
Reference Data Type (참조 자료형)
참조 자료형은 객체의 주소를 저장하며, 배열, 클래스, 인터페이스, 열거형 등이 포함된다.
참조 자료형은 객체를 생성하고 관리하는 데 사용된다.
참조 자료형 | 설명 | 주요 특징 | 예시 |
String | 문자열을 나타내는 클래스 | 불변 객체(한 번 생성되면 값이 변경되지 않음) | String str = "Hello"; |
Array | 같은 타입의 여러 데이터를 저장하는 배열 객체 | 고정 크기, 같은 타입의 데이터 저장 | int[] numbers = {1, 2, 3}; |
List | 순서가 있는 데이터의 모음(컬렉션 프레임워크의 한 종류) | 요소의 중복 허용, 순서 보장 | List<String> list = new ArrayList<>(); |
Map | 키-값 쌍으로 데이터를 저장하는 컬렉션 | 키의 중복 불가, 값의 중복 허용 | Map<String, Integer> map = new HashMap<>(); |
Set | 중복되지 않는 요소의 모음 | 요소 중복 불가, 순서 보장 안 됨 | Set<String> set = new HashSet<>(); |
Class | 사용자 정의 객체를 정의하는 자료형 | 속성과 메서드를 포함하여 사용자 정의 객체 생성 가능 | class Person { String name; int age; } |
Interface | 객체의 동작을 정의하는 인터페이스 자료형 | 메서드 시그니처만 정의, 다중 상속 가능 | interface Flyable { void fly(); } |
Enum | 상수 집합을 정의하는 자료형 | 한정된 상수 값으로 객체 생성 | enum Day { MONDAY, TUESDAY } |
Deque | 양방향으로 삽입/삭제가 가능한 큐 | FIFO, LIFO 방식 모두 가능 | Deque<Integer> deque = new ArrayDeque<>(); |
Queue | FIFO 방식의 대기열 자료형 | 순서대로 처리하는 큐 형태 | Queue<String> queue = new LinkedList<>(); |
Stack | LIFO 방식의 자료 구조 | 나중에 추가된 요소가 먼저 처리됨 | Stack<Integer> stack = new Stack<>(); |
클래스(Class)
String name = "Alice"; // String은 클래스 자료형으로, name 변수는 "Alice" 객체를 참조
배열(Array)
int[] numbers = {1, 2, 3}; // numbers 변수는 int 배열 객체를 참조
인터페이스(Interface)
List<String> list = new ArrayList<>(); // List는 인터페이스 자료형
참조 자료형 변수에는 객체의 실제 데이터가 아닌, 객체가 위치한 메모리 주소가 저장된다.
이를 통해 변수는 객체를 참조하게 된다.
참조 자료형의 객체는 heap(힙) 메모리 영역에 저장된다.
기본 자료형은 stack(스택) 메모리에 저장되지만, 참조 자료형은 동적으로 힙에 할당된다.
참조 자료형 변수는 초기화하지 않으면 null로 설정된다.
클래스 객체 생성 및 사용
String text = new String("Hello"); // text는 "Hello"라는 객체를 참조
배열 사용
int[] numbers = new int[3]; // numbers는 int 배열 객체를 참조
numbers[0] = 1;
메서드를 통한 참조 전달
public void updateName(Person person) {
person.setName("Updated Name");
}
참조 자료형의 null 주의점
참조 자료형이 null인 상태에서 이를 사용하려고 하면 NullPointerException이 발생한다.
String name = null;
System.out.println(name.length()); // NullPointerException 발생
'Java' 카테고리의 다른 글
Java 조건문 (if, if else, switch case) (0) | 2024.11.14 |
---|---|
Java 문자열 (String) (1) | 2024.11.14 |
Java 배열 (Array) (0) | 2024.11.13 |
Java 형 변환 (Type Casting) (0) | 2024.11.12 |
Java 변수와 상수 (0) | 2024.11.12 |