참조_기본형과 참조형

2024. 1. 11. 21:07JAVA

JAVA에서 변수는 크게 기본형(primitive Type)과 참조형(Refference Type) 으로 나뉜다.

기본형 : byte, short, int, long, float, double, boolean 등
참조형 : 기본형 제외하고 전부

 

String이 없네?

String 은 참조형으로, 사실 클래스이다. 그런데 원체 많이 사용되다 보니, 기본형처럼 사용할 수 있도록 편의를 좀 봐준다는 모양이다.

 


변수 대입

'JAVA 에서 값을 대입한다는 것, 변수에 들어있는 값을 복사해서 대입하는 것이다.'

 

다시 한번 써보며 상기 해보자.

기본형

int a = 10;
int b = a;
a = 5;
b = ? // 10;

1. int a 에 10을 대입하고,

2. int b에 10이 대입된 a를 대입한다.

3. 그리고 나선 a 에 다시 5를 대입한다.

 

b에는 a가 담겨 있고, a의 값을 바꿨으니 b = 5 일까?

아니다.

자바는 값을 복사해서 대입한다.

int b 에는 a 변수에 들어있는 10이 복사되어 대입된다. a 자체가 들어가는 것이 아니다.

즉, 2번째 줄까지 입력했을 때

a = 10 , b = a = 10 이나, 서로 다른 10을 가지고 있는 것이다.

따라서 a에 값을 변경했다고 b 에 담긴 값이 변경되지 않는다.

 

한번 더!

public void echoJavaIsCallByValue(){
	System.out.println("자바는 call by value!");
};

 

기본형은 알겠고, 그럼 참조형은?

참조형

CallByValue callByValue = new CallByValue();
CallByValue callByValue2 = callByValue;

위에서 언급했듯, 자바는 Call By Value 이다.

변수 callByValue 에는 new 생성자(); 를 통해 생성된 인스턴스의 참조 주소값을 가지고 있다.

따라서, callByValue 와 callByValue2 는 동일한 참조 주소를 갖는다.

 

그렇기 때문에

callByValue.name = "라따뚜이랄랄랄라";

로 값을 넣을 경우,

callByValue , callByValue2 는 같은 주소값을 갖고 있으므로

System.out.println(callByValue2.name); // 라따뚜이랄랄랄라

 

'JAVA' 카테고리의 다른 글

참조_변수 초기화  (0) 2024.01.13
참조_메소드  (0) 2024.01.11
Class_instance  (0) 2024.01.10
Class_이게 뭔데  (0) 2024.01.10
Method_오버 로딩  (0) 2024.01.10