JAVA

[JAVA] 기본형vs참조형

준몽쓰 2025. 2. 1. 01:19

■ 기본형(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을 갖게 됨