□ 복제
□ 참조
ex)
메모장으로 예를 들었을 때
'복사본'의 경우 서로 복제된 상태로 더이상 연관이 없지만
'바로가기'의 경우 원본 '메모장'을 참조한 상태이므로 상호작용이 발생함
또한 복사의 경우 용량이 2배가 되는 것 이지만 바로가기는 훨씬 작은용량을 차지하게 됨
ex2)
아래 코드로 다시한번 참조에 대해 정리해보면
1)
runValue 메소드부터 확인해보면
기본변수 a에 1이라는 값이 들어있다.
그다음 _value라는 메소드를 호출 하는데 해당 메소드의 매개변수 b에 a를 넣는 상황이다(int b = a;).
그 후 변수 b의 값을 2로 바꾸더라도 a에 영향을 주지 않는다.
→ runValue, 1
2)
- A a = new A(1); : id 값이 1인 새로운 A 객체를 생성하고, a 변수가 이 객체를 참조합니다.
- _reference1(a); : a 변수가 참조하는 A 객체를 _reference1 메서드의 파라미터 b에 전달합니다.
- _reference1 메서드 내에서 b = new A(2);를 실행하면, b는 새로운 A 객체를 참조하게 됩니다.
이것은 a 변수가 참조하는 객체와는 별개의 객체입니다. - 따라서 _reference1 메서드 내에서 b의 변경은 a 변수가 참조하는 객체에는 영향을 주지 않습니다.
- System.out.println("runReference1, "+a.id);: a.id를 출력하면 여전히 1이 출력됩니다.
3)
- A a = new A(1); : id 값이 1인 새로운 A 객체를 생성하고, a 변수가 이 객체를 참조합니다.
- _reference2(a); : a 변수가 참조하는 A 객체를 _reference2 메서드의 파라미터 b에 전달합니다.
- _reference2 메서드 내에서 b.id = 2;를 실행하면, b가 참조하는 객체의 id 필드 값이 2로 변경됩니다.
- _reference2 메서드가 종료된 후에도 a 변수는 동일한 객체를 계속 참조하고 있습니다.
따라서 a.id의 값도 변경된 값인 2가 출력됩니다. - System.out.println("runReference2, "+a.id);: a.id를 출력하면 2가 출력됩니다.
출처 : 생활코딩 유튜브 :
https://www.youtube.com/watch?v=Us8ZsdbQ9M8&list=PLuHgQVnccGMCeAy-2-llhw3nWoQKUvQck&index=142
'Java & Spring > Java' 카테고리의 다른 글
문자열 값 비교 'str.compareTo()' (0) | 2024.07.19 |
---|---|
생활코딩 - Java(Collection framework) (0) | 2024.04.19 |
생활코딩 - Java(상수와 enum) (0) | 2024.04.17 |
생활코딩 - Java(Object 클래스) (0) | 2024.04.16 |
생활코딩 - Java(예외 Exception) (0) | 2024.04.15 |