본문 바로가기

Java

[Java] 기본형과 참조형

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 (참조형은 같은 객체를 가리키므로 영향 있음)
    }
}

이 예제에서 xy는 값 자체를 복사하여 y의 값을 변경해도 x에는 영향을 주지 않는다.

반면 arr1arr2는 같은 배열 객체를 참조하므로, arr2의 요소 값을 변경하면 arr1에도 영향을 준다.

728x90
반응형