Java - 기본자료형/참조자료형/매개변수

m0ng·2025년 4월 9일

📘 1. 기본자료형과 참조자료형의 차이점

int a = 10;              // 기본자료형
int b = a;               // 값 자체가 복사됨
b = 20;

System.out.println(a);   // 10 (영향 없음)

class MyData {
    int value;
}

MyData d1 = new MyData();
d1.value = 10;
MyData d2 = d1;          // 참조자료형: 주소값 복사
d2.value = 20;

System.out.println(d1.value); // 20 (같은 객체를 가리킴)

✅ 요약

기본자료형: 값을 직접 저장하고 복사 → 값만 전달

참조자료형: 객체의 주소를 저장 → 주소를 공유, 같은 객체를 가리킴

참조자료형은 값이 아닌 주소를 공유하기 때문에 하나를 수정하면 다른 변수에도 영향

📘 2. 기본형 매개변수는 값이 전달된다 (값에 의한 호출)

public class Test {
    public static void change(int x) {
        x = 100;
    }

    public static void main(String[] args) {
        int num = 50;
        change(num);
        System.out.println(num);  // 50 (변하지 않음)
    }
}

✅ 요약

매개변수가 **기본자료형(int, double, char 등)**이면 값만 전달

메서드 안에서 값을 변경해도 원본에는 영향 없음

이를 값에 의한 호출 (Call by Value) 이라고 부름

📘 3. 참조변수를 선언만 하고 객체를 생성하지 않으면 에러 발생

class Person {
    String name;
}

public class Test {
    public static void main(String[] args) {
        Person p;              // 참조변수만 선언
        // p.name = "홍길동";   // ❌ 컴파일 에러 (NullPointerException 발생 가능)
    }
}

✅ 요약

참조변수만 선언하고 객체 생성 없이 접근하면 컴파일 에러 또는 런타임 에러

객체 주소가 없기 때문에 내부 멤버나 메서드에 접근할 수 없음

반드시 new 키워드로 객체 생성 후 사용해야 함
p = new Person();
p.name = "홍길동";  // ✅ 정상 접근 가능

📘 4. 배열은 참조형 매개변수 → 주소값 공유

public class Test {
    public static void change(int[] arr) {
        arr[0] = 999;
    }

    public static void main(String[] args) {
        int[] nums = {1, 2, 3};
        change(nums);
        System.out.println(nums[0]);  // 999 (변경됨)
    }
}

✅ 요약

배열은 참조형 자료형이므로, 배열을 매개변수로 전달하면 주소값이 전달

메서드 내부에서 배열을 수정하면 원본 배열도 함께 수정

참조형 매개변수이므로 배열 원소값 공유 가능

0개의 댓글