728x90
반응형
Java에서 데이터 타입은 크게 기본형 (Primitive Type)과 참조형 (Reference Type)으로 나눌 수 있다.
각각의 타입은 메모리 저장 방식과 특성에서 차이가 있으며, 프로그램에서 사용하는 방식도 다르다.
1. 기본형 (Primitive Type)
기본형은 Java에서 가장 기본적인 데이터 타입으로, 변수에 직접 값이 저장된다. 기본형 타입은 모두 값 자체를 메모리에 저장하므로 참조를 사용하지 않고, 고정된 크기의 메모리를 차지한다. 기본형은 변경 불가능(immutable)하며, 값이 변하면 새로 할당된다.
기본형 데이터 타입 종류
Java는 8가지 기본형 타입을 제공한다.
- 정수형
- byte: 1바이트 크기, -128 ~ 127 범위의 정수.
- short: 2바이트 크기, -32,768 ~ 32,767 범위의 정수.
- int: 4바이트 크기, -2^31 ~ 2^31-1 범위의 정수. 가장 일반적인 정수형 타입.
- long: 8바이트 크기, -2^63 ~ 2^63-1 범위의 정수. 큰 수를 표현할 때 사용하며, 리터럴 뒤에 L을 붙여 표현합니다.
- 실수형
- float: 4바이트 크기의 단정밀도 실수형. 소수점 이하 약 7자리까지 표현 가능하며, 리터럴 뒤에 F를 붙인다.
- double: 8바이트 크기의 배정밀도 실수형. 소수점 이하 약 15자리까지 표현 가능하다. 실수 표현에 주로 사용한다.
- 문자형
- char: 2바이트 크기의 유니코드 문자. 문자 하나를 표현하며, 작은 따옴표('A')로 감싸서 표현한다.
- 논리형
- boolean: 1비트 크기의 논리형으로, true 또는 false의 두 값만 가질 수 있다.
int age = 25; // 정수형
double price = 19.99; // 실수형
char grade = 'A'; // 문자형
boolean isStudent = true; // 논리형
기본형은 값을 직접 저장하고 스택 메모리에 저장되기 때문에 접근 속도가 빠르다.
2. 참조형 (Reference Type)
참조형은 객체의 주소값(참조값)을 저장하는 타입으로, 실제 데이터가 저장된 위치를 참조한다.
참조형 변수는 기본형과 달리 힙 메모리에 저장된 객체를 가리키며, 변수가 저장된 객체의 주소를 참조한다.
참조형에는 클래스, 배열, 인터페이스 등이 포함된다.
참조형 데이터 타입 종류
- 클래스 (Class): Java에서 대부분의 데이터는 클래스의 인스턴스로 사용된다. 클래스는 사용자 정의 객체를 생성할 수 있게 하며, 메서드와 속성을 포함한다.
String name = "Alice"; // String 클래스는 Java의 참조형
- 배열 (Array): 배열은 같은 타입의 여러 값을 하나로 묶어 저장하는 자료 구조이다. Java에서 배열도 참조형에 해당한다.
int[] numbers = {1, 2, 3, 4}; // 정수형 배열
- 인터페이스 (Interface): 인터페이스는 특정 메서드의 집합으로, 이를 구현한 클래스가 해당 메서드를 정의하도록 강제한다. 인터페이스는 참조형 변수로 사용된다.
List<String> list = new ArrayList<>(); // List 인터페이스를 참조하는 ArrayList 객체
참조형 변수가 할당되지 않은 상태에서는 null
값을 가질 수 있다.
이 경우 해당 변수는 어느 객체도 참조하지 않는 상태이다.
String greeting = "Hello"; // String 클래스는 참조형
int[] scores = {90, 85, 100}; // 배열도 참조형
기본형과 참조형의 차이점
비교 항목 | 기본형 (Primitive Type) | 참조형 (Reference Type) |
---|---|---|
저장 방식 | 값 자체를 메모리에 저장 | 객체의 주소(참조값)를 저장 |
메모리 할당 위치 | 스택 메모리 | 힙 메모리 |
초기 값 | 각 타입별 기본 값 (int는 0, boolean은 false 등) | null (어느 객체도 참조하지 않는 상태) |
불변성 | 값 자체를 저장하며 불변 (값을 바꾸면 새로 할당) | 객체 내의 값은 변경 가능 (가리키는 객체의 속성 값을 변경 가능) |
사용 목적 | 간단한 데이터 저장에 적합 | 객체, 데이터 구조 저장에 적합 |
예시 | int age = 25; | String name = "Alice"; |
기본형과 참조형의 예시 코드
기본형 변수와 참조형 변수의 차이를 보여주는 예시
public class Main {
public static void main(String[] args) {
int x = 10; // 기본형 변수
int y = x; // 값 복사
y = 20;
System.out.println("x: " + x); // x는 10 (기본형은 값 자체를 복사하므로 영향 없음)
int[] arr1 = {1, 2, 3}; // 참조형 변수 (배열)
int[] arr2 = arr1; // 참조값을 복사
arr2[0] = 10;
System.out.println("arr1[0]: " + arr1[0]); // arr1[0]은 10 (참조형은 같은 객체를 가리키므로 영향 있음)
}
}
이 예제에서 x
와 y
는 값 자체를 복사하여 y
의 값을 변경해도 x
에는 영향을 주지 않는다.
반면 arr1
과 arr2
는 같은 배열 객체를 참조하므로, arr2
의 요소 값을 변경하면 arr1
에도 영향을 준다.
728x90
반응형
'Java' 카테고리의 다른 글
[Java] 클래스와 데이터 (0) | 2024.11.28 |
---|---|
[Java] 객체 지향 설계 원칙 (1) | 2024.11.03 |
[Java] Executor 프레임워크 (0) | 2024.11.02 |
[Java] Java21 가상 쓰레드 (Virtual Thread) (0) | 2024.10.17 |
[Java] SHA-256을 통한 단방향 암호화 구현하기 (0) | 2024.10.07 |