[java] 기본형 타입과 참조형 타입

여리·2025년 3월 23일
0

자바는 강타입 언어다.
그리고 자바의 타입에는 기본형타입(primitive type)참조형타입(reference type)이 존재한다.

자바에서 변수에 값을 대입하는 것은 변수에 들어 있는 값을 복사해서 대입하는 것이다.
기본형, 참조형 모두 항상 변수에 있는 값을 복사해서 대입한다.
기본형이면 변수에 들어 있는 실제 값을 복사해서 대입하고, 
참조형이면 변수에 들어있는 참조값을 복사해서 대입한다.

기본형 타입은 아래의 표와 같이 총 8개의 타입이 존재한다.

참조형 타입은 아래의 표와 같이 존재한다.
참조형 타입은 기본형을 제외한 모든 타입이라고 생각하면 된다.

자바에서는 메소드의 호출을 하게되는 경우 매개변수를 기본형으로 선언 하면 단순히 값이 복사되어 전달된다. 그러면, 메소드 내부의 매개변수 값을 변경해도 호출자의 변수값에는 영향이 없다.

public class MethodChange1 {

    public static void main(String[] args) {
        int a = 10;
        System.out.println("메소드 호출 전 a = " + a); // a = 10

        changePrimitive(a);
        System.out.println("메소드 호출 후 a = " + a); // a = 10
    }

    static void changePrimitive(int x) {
        x = 20;
    }
}

하지만 참조형으로 선언하면 참조값이 복사되어 전달된다. 그러면, 메소드 내부의 매개변수로 전달된 객체의 변수를 변경하면 호출자의 객체도 변경된다.

public class MethodChange2 {

    public static void main(String[] args) {
        Data dataA = new Data();
        dataA.value = 10;
        System.out.println("메소드 호출 전 dataA.value = " + dataA.value); 
        //dataA.value = 10

        changeReference(dataA);
        System.out.println("메소드 호출 전 dataA.value = " + dataA.value); 
        // dataA.value = 20;

        
    }

    static void changeReference(Data dataX) {
        dataX.value = 20;
    }
}

✅ 대원칙: 자바는 항상 변수의 값을 복사해서 대입한다.

이 내용을 항상 전제로 갖고 생각해야한다.

profile
beckend developer

0개의 댓글