대원칙: 자바는 항상 변수의 값을 복사해서 대입한다.
기본형 vs 참조형 - 기본
기본형(Primitive Type):
- int, long, double, bollean처럼 변수에 사용할 값을 직접 넣을 수 있는 참조(주소)를 저장하는 데이터 타입을 참조형이라 한다. 참조형은 객체 또는 배열에 사용된다.
- 기본형 변수는 값을 직접 저장
- 산술 연산 가능
- null 할당 불가능
참조형(Reference Type):
- Student student1, int[] students와 같이 데이터에 접근하기 위한 참조(주소)를 저장하는 데이터 타입을 참조형이라 한
다. 참조형은 객체 또는 배열에 사용된다. - 참조형 변수는 참조(주소)를 저장
- 산술 연산 불가능
- null 할당 가능
기본형 vs 참조형 - 대입
//기본형
int a = 10;
int b = a;
//참조형
Student s1 = new Student();
Student s2 = s1;
- 기본형은 변수에 들어있는 값을 그대로 복사해서 대입하고, 참조형은 변수에 들어있는 참조값만 복사해서 대입한다.
- 하나의 인스턴스를 여러곳에서 참조할 수 있다.
기본형 vs 참조형 - 메서드 호출
public class MethodChange1 {
public static void main(String[] args) {
int a = 10;
System.out.println("메서드 호출 전: a = " + a);
changePrimitive(a);
System.out.println("메서드 호출 후: a = " + a);
}
public static void changePrimitive(int x) {
x = 20;
}
}
//메서드 호출 전: a = 10
//메서드 호출 후: a = 10
public class MethodChange2 {
public static void main(String[] args) {
Data dataA = new Data();
dataA.value = 10;
System.out.println("메서드 호출 전: dataA.value = " + dataA.value );
changeReference(dataA);
System.out.println("메서드 호출 후: dataA.value = " + dataA.value );
}
public static void changeReference(Data dataX) {
dataX.value = 20;
}
}
//메서드 호출 전: dataA.value = 10
//메서드 호출 후: dataA.value = 20
자바에서 메서드의 매개변수는 항상 값에 의해 전달된다. 그러나 이 값이 실제 값이냐, 참조(메모리 주소)값이냐에 따라 동작이 달라진다.
- 기본형: 메서드 내부에서 매개변수(파라미터)의 값을 변경해도, 호출자의 변수 값에는 영향이 없다.
- 참조형: 메서드 내부에서 매개변수(파라미터) 로 전달된 객체의 멤버 변수를 변경하면, 호출자의 객체로 변경된다.
출처 - 김영한의 실전 자바 기본편
'Backend > Java' 카테고리의 다른 글
상속 (0) | 2024.08.04 |
---|---|
자바 메모리 구조와 static (0) | 2024.08.03 |
패키지와 캡슐화 (0) | 2024.08.03 |
절차 지향 프로그래밍 vs 객체 지향 프로그래밍 (0) | 2024.08.02 |
클래스와 객체, 인스턴스 (0) | 2024.08.01 |