키보드워리어

[자바] 참조 자료형 스텝 2 본문

JAVA/입문

[자바] 참조 자료형 스텝 2

꽉 쥔 주먹속에 안경닦이 2023. 1. 22. 15:37
728x90

안녕하세요! 지난번에 참고한 참조 자료형에 대해서 조금 더 딥하게 들어가 볼게요.

Null

프로그래머에 의해 초기화 되지 않은 참조변수는 컴파일러에 의해 null로 설정됩니다.
null이란 empty location을 의미합니다. 저장된 경로가 없다는 뜻이에요.

참조 클래스


글 시작

만약 cat이라는 참조 클래스를 어떤 변수도 없는 nothing클래스에 저장하면 어떤 일이 일어날까요?

null 예시

nothing과 cat이 같은 로케이션을 가리킵니다.
지정되는Heap이 같아지겠죠?

null과 참조클래스 저장경로
null과 참조클래스 저장경로

여기서 nothing의 id변수값을 10으로 지정해 준다면 어떻게 될까요?

참조변수 값 지정할시
참조변수 값 지정할시

cat.id의 값도 10으로 바뀝니다.
그 이유는 같은 Heap에 저장되었기 때문이에요.

Heap에 메모리 저장
Heap에 메모리 저장

nothing = cat을 할 때 복사된 것은 객체가 저장된 경로입니다. 그 경로가 nothing으로 복사된거에요.

nothing = dog을 하면 nothing의 경로가 dog으로 복사되어 nothing 참조변수가 1A를 가리키게 되는 거죠.

참조변수 경로 값 변화
참조변수 경로 값 변화
메모리 값 변화
메모리 값 변화

기본 변수


그렇다면 기본변수에는 무슨 일이 벌어질까요?

Int j를 발생시켜 i = j라고 하면 j는 5라는 값을 가지게 돼요.

여기선 j의 값을 변경한다고 해도 변경되는 건 오직 기본변수 j의 값입니다. i의 값을 출력해도 i의 값은 여전히 5입니다.

참조클래스의 경우 저장하는 것이 값이 아닌 경로이기 때문에 참조변수를 복사할 때에는 실제 객체가 저장된 경로가 복사됩니다.

기본형에 저장할때
기본형에 저장할때

1) 기본변수 i와 j의 값 비교

i와 j가 값만 같으면 true, 틀리면 false를 리턴, 값이 변경되지 않는다.

ref는 cat과 같은 경로를 복사했으니 같은 값을 가지고 있습니다.

2) dog2를 생성해서 기존 dog와 id값을 동일하게 가져볼게요. 이때 같은 Heap으로 메모리 경로가 생성될까요?

참조 클래스의 경우 같은 Heap을 갖지
않는다.

dog와 dog2는 같은 메모리경로를 같지 않는다.
dog와 dog2는 같은 메모리경로를 같지 않는다.

cat과 ref은 같은 값을 가지고 true를 가지지만, dog와 dog2는 같은 값을 가져도 true를 뱉지 않아요.

기본변수처럼 같은 true를 반환하지 않습니다.

우리가 만드는 모든 클래스, 이미 선언된 클래스, 스트링 유형타입이 모두 뭐라고 했죠?
참조변수라고 했습니다.

이건 모두 같은 값을 가진다 할지라도 false를 뱉는다는 걸 의미합니다.
->그래서 스트링의 경우에도. equalString이라는 메서드가 필요한 거예요.

‘==’ 연산자로 계산하는 건 value가 아니라 object가 같은 경로를 같은지 확인하는 거예요.
-> 나타내는 경로가 다르다면 값이 같아도 같은 것으로 인식하지 않습니다.

728x90