기본형(Primitive Type)
기본형은 실제 값을 변수에 그대로 담을 수 있다. 변수에 담겨있는 값을 그대로 계산에 사용 가능.
(ex int, long, boolean, double)
참조형(Reference Type)
참조형은 실제 값을 참조하고 있는 주소를 변수에 담는다.
(ex 클래스, 배열)
그런데 여기서 새로 깨달은 사실이 있다.
대원칙 : 자바는 항상 변수의 값을 복사해서 대입한다.
즉
int a = 10;
int b = a;
System.out.println(a);
System.out.println(b);
a = 30;
System.out.println(a);
System.out.println(b);
이렇게 코드를 구성하면 결과로
이렇게 나온다.
사실 어떻게 보면 그냥 맞출 수 있는 문제지만, 복사해서 대입한다는 생각을 하지는 않았었다. 그냥 a만 바뀌구나 했었지..
그러면 여기서 문제를 생각해보자. 만약에 클래스를 복사하고 값을 변경하면 어떻게 될까?
public class Main {
public static void main(String[] args) {
Book book1 = new Book("책제목1");
Book book2 = book1;
System.out.println(book1.getTitle());
System.out.println(book2.getTitle());
}
}
이렇게 Book 클래스를 만들어서 호출해보면
같은 제목을 바라보고 같은 참조값을 가지는 걸 확인할 수 있다.
즉 참조값을 변수에 복사하는 것이다.(값 자체를 복사하는 것이 아님)
이제 book1의 값을 바꿔보면 어떻게 될까??
Book book1 = new Book("책제목1");
Book book2 = book1;
book1.setTitle("책제목2");
이렇게 book1의 값을 바꿔보고 출력 결과를 살펴보자.
boo1의 값이 바뀌었는데 book2의 값도 바뀌었다.
왜냐하면, book1의 참조값을 복사했으니 book2도 같은 인스턴스의 값을 바라보고 있다.
그런데 book1이 값을 바꿔버리니 book2가 바라보는 값도 바뀌어버린 것.
자바를 꼼꼼하게 공부하려니 헷갈리는 것들이 아직 많다
반응형
'JAVA 강의(인프런)' 카테고리의 다른 글
Final을 Static과 같이 사용해야 하는 이유 (1) | 2023.12.03 |
---|---|
Java 메모리 구조 (0) | 2023.12.03 |
생성자 (0) | 2023.12.03 |
클래스, 객체, 인스턴스 (0) | 2023.11.29 |