Java & Spring/Java

생활코딩 - Java(참조)

DJ.Kang 2024. 4. 18. 00:39

 복제

복제

 참조

참조(reference)

 

ex)

메모장으로 예를 들었을 때

'복사본'의 경우 서로 복제된 상태로 더이상 연관이 없지만

'바로가기'의 경우 원본 '메모장'을 참조한 상태이므로 상호작용이 발생함

또한 복사의 경우 용량이 2배가 되는 것 이지만 바로가기는 훨씬 작은용량을 차지하게 됨

원본 / 복사본 / 바로가기 순

 

ex2)

아래 코드로 다시한번 참조에 대해 정리해보면

 

1)

runValue 메소드부터 확인해보면

기본변수 a에 1이라는 값이 들어있다.

그다음 _value라는 메소드를 호출 하는데 해당 메소드의 매개변수 ba를 넣는 상황이다(int b = a;).

그 후 변수 b의 값을 2로 바꾸더라도 a에 영향을 주지 않는다.

→ runValue, 1

 

2)

  1. A a = new A(1); : id 값이 1인 새로운 A 객체를 생성하고, a 변수가 이 객체를 참조합니다.
  2. _reference1(a); : a 변수가 참조하는 A 객체를 _reference1 메서드의 파라미터 b에 전달합니다.
  3. _reference1 메서드 내에서 b = new A(2);를 실행하면, b는 새로운 A 객체를 참조하게 됩니다.
    이것은 a 변수가 참조하는 객체와는 별개의 객체입니다.
  4. 따라서 _reference1 메서드 내에서 b의 변경은 a 변수가 참조하는 객체에는 영향을 주지 않습니다.
  5. System.out.println("runReference1, "+a.id);: a.id를 출력하면 여전히 1이 출력됩니다.

 

3)

  1. A a = new A(1); : id 값이 1인 새로운 A 객체를 생성하고, a 변수가 이 객체를 참조합니다.
  2. _reference2(a); : a 변수가 참조하는 A 객체를 _reference2 메서드의 파라미터 b에 전달합니다.
  3. _reference2 메서드 내에서 b.id = 2;를 실행하면, b가 참조하는 객체의 id 필드 값이 2로 변경됩니다.
  4. _reference2 메서드가 종료된 후에도 a 변수는 동일한 객체를 계속 참조하고 있습니다.
    따라서 a.id의 값도 변경된 값인 2가 출력됩니다.
  5. System.out.println("runReference2, "+a.id);: a.id를 출력하면 2가 출력됩니다.

 

 

출처 : 생활코딩 유튜브 : 

https://www.youtube.com/watch?v=Us8ZsdbQ9M8&list=PLuHgQVnccGMCeAy-2-llhw3nWoQKUvQck&index=142