[JAVA] 기본형vs참조형
■ 기본형(Primitive Type) : int, long , double 처럼 변수에 사용할 값을 직접 넣을 수 있는 데이터 타입
■ 참조형(Reference Type): Student sutdent1, int[] studentes 와 같이 데이터에 접근하기 위한 참조(주소)값을 저장하는 데이터 타입
기본형 vs 참조형
- 기본형 : 실제 사용할 수 있는 변수 값 ex) 10,30
- 참조형 : 실제 사용할 수 있는 변수를 담는 게 아니라 객체의 주소 값을 저장.
1) 객체는 .(dot)을 통해서 메모리 상에 생성된 객체를 찾아가야 사용가능. ex) student1.name = "제니"
2) 배열은 [ ]를 통해서 찾아가야 사용가능
기본형은 연산이 가능한데 참조형은 연산이 불가능
■ 기본형 대입
변수에 값을 대입하더라도 실제 사용하는 값이 변수에 바로 들어와서 해당 값만 복사해서 대입함
변수의 대입은 변수에 들어있는 값을 복사해서 대입한다. a 자체를 b에 대입하는게 아님.
b = 30 으로 인해 b만 값이 변경되고 a는 아무런 영향을 주지 않는다.
■ 참조형 대입
참조형의 경우 실제 사용하는 객체가 아니라 객체의 위치를 가리키는 참조값만 복사된다.
- dataA 변수는 Data 클래스를 통해서 만들어져서 참조형이다.
- Data 객체를 생성하고, 참조값을 dataA에 저장
- dataB는 dataA의 참조값을 복사함 그래서 dataA 변수 값이랑 같음
요약
- 기본형 : 변수에 들어 있는 실제 사용하는 값을 복사해서 대입
- 참조형 : 변수에 들어 있는 참조값을 복사해서 대입
기본형 참조형 - 메서드 호출
자바에서 메서드의 매개변수는 항상 값에 의해 전달된다. 그러나 이 값이 실제 값이냐, 참조 값이냐에 따라 동작이 달라진다.
■ 기본형
- 메서드로 기본형 데이터를 전달하면 ,해당 값이 복사되어 전달됨
- 메서드 내부에서 매개변수의 값을 변경해도 호출자의 변수 값에는 영향이 없다
-> changePrimitive(int x)에 changePrimitive(a)의해서 int x = a로 해석된다. 그러므로 값 복사해서 a,x 각각 10을 가지고 있다.
-> x = 20이라 하니 x의 값만 20이라 바뀌고 a는 10 유지
■ 참조형
- 메서드로 참조형 데이터를 전달하면, 참조 값이 복사되어 전달됨
- 메서드 내부에서 매개변수로 전달 된 객체의 멤버 변수를 변경하면, 호출자의 객체도 변경
-> dataX에 dataA의 값 전달 결국 둘 다 같은 참조 값을 가지게 됨
-> 메서드를 호출하는 부분인 changeReference(dataA)와 changeReference(dataX) 모두 같은 참조 값을 가지게 되므로 20을 갖게 됨