기본형 vs 참조형
변수의 데이터타입은 크게 기본형과 참조형으로 분류할 수 있다.
기본형 : 사용하는 값을 변수에 저장
int, long, double, doolean
참조형 : 객체가 저장된 메모리의 위치를 가르키는 참조값(위치, 주소)을 변수에 저장.
객체, 배열..
* 참고 : String은 클래스라서 참조형이다. 하지만 문자형은 자주 다루기 때문에 자바에서 특별하게 편의기능을 제공한다. 따라서 기본형처럼 직접 문자값을 바로 대입한다.
기본형, 참조형의 변수대입
대원칙 : 자바는 항상 변수의 값을 복사해서 대입한다.
기본형 대입
int a = 0;
int b = a;
이 코드에서 2번 라인은 a를 b에 넣어주는 것이 아니다. a의 값을 복사해서 b에 넣어주는 것이다.
참조형 대입
Student s1 = new Student();
Student s2 = s1;
참조형도 마찬가지이다. 변수에 들어 있는 참조값을 복사해서 대입한다.
기본형과 변수 대입
아래 코드를 보고 결과값을 예상해보자.
public static void main(String[] args) {
int a = 10;
int b = a;
System.out.println("a= " + a);
System.out.println("b= " + b);
// a 값 변경
a = 20;
System.out.println("a 변경 a= 20");
System.out.println("a= " + a);
System.out.println("b= " + b);
//b 값 변경
b = 30;
System.out.println("b 변경 b= 30");
System.out.println("a= " + a);
System.out.println("b= " + b);
}

참조형과 변수대입
참조형은 어떻게 다를까? 다음의 코드를 보자.
public static void main(String[] args) {
Data dataA = new Data();
dataA.value = 10;
Data dataB = dataA;
System.out.println("dataA 참조값:" + dataA.value); // 10
System.out.println("dataB 참조값:" + dataB.value); // 10
dataA.value = 20;
System.out.println("dataA 값 변경 dataA.value = 20"); //
System.out.println("dataA 참조값:" + dataA.value); // 20
System.out.println("dataB 참조값:" + dataB.value); // 20
dataB.value = 30;
System.out.println("dataB 값 변경 dataB.value = 30"); //
System.out.println("dataA 참조값:" + dataA.value); // 30
System.out.println("dataB 참조값:" + dataB.value); // 30
}

dataA는 Data 클래스를 통해서 만들었기 때문에 참조형이다. 이 변수는 객체의 참조값을 저장한다.
dataB는 dataA의 참조값을 복사해서 대입했으므로 같은 주소값을 가지고 있다. dataA, B 는 같은 인스턴스를 가리키고 있기 때문에 하나의 값을 변경해도 둘 다 적용되는 것이다. 즉, 두 변수는 같은 객체 인스턴스를 참조한다.

* 인프런 '김영한의 실전 자바 - 기본편'을 참고하여 작성하였습니다.
'프로그래밍언어 > Java' 카테고리의 다른 글
[Java 기본] 기본형과 참조형 - 활용 (0) | 2024.07.02 |
---|---|
[Java 기본] 기본형과 참조형 - 메서드 호출 (0) | 2024.07.02 |
[Java 기본] 배열 (0) | 2024.07.01 |
[Java 기본] 클래스, 객체, 인스턴스 (0) | 2024.07.01 |
[Java 기본] 클래스 (0) | 2024.07.01 |