일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- ㅇㅇㅇㄴㅇ
- securityconfig
- WebSecurity
- ㅂ
- Session1이 그 모든 클라이언트의 저올
- Spring Security
- 스프링 #스프링 시큐리티 #spring security
- HttpSecurity
- WebConfigurerAdapter
- 스프링시큐리티
Archives
- Today
- Total
다오의 개발일지
TIL-11 얕은 복사, 깊은 복사 본문
얕은 복사
배열은 참조형 변수이며 실제값이 아닌 실제값의 '주소값'을 가진다.
따라서 대입 연산자 =를 사용하게 되면 주소값만 복사가 된다.
이렇게 주소값만 복사되고 실제값은 1개로 유지되는 것을 얕은 복사라고 한다.
주소값만 복사된다는 것이 무슨 의미일까?
대입된 스택 영역의 참조형 변수(주소값)가 힙 영역의 실제값을 가리킨다.
힙영역의 실제값은 복사가 되지 않는다.
얕은 복사를 실습해보자
Int[] a = {1,2,3,4};
Int[] b = a;
b[0] = 3;
System.out.println(a\[0\]) // 출력 3
신기하다. b 배열을 수정했는데 a배열의 값까지 수정이 되었다.
이는 가리키고 있는 a배열과 b배열 둘 다 같은 주소값을 가리키고 있기 떄문에 실제값을 수정하면 두 배열 모두 같은 결과를 출력하게 된다
깊은 복사
얕은 복사처럼 가짜 복사가 아닌 진짜 새로운 배열을 만들고 싶을때는 깊은 복사를 이용한다.
방법에는 반복문이나 다양하게 제공하는 메서드들을 이용해서 복사하는 방법이 있다.
Int []a = {1,2,3,4};
Int []b = new int(a.length);
For (int i=0; i<4; i++){
b[i] = a[i]; //깊은 복사
}
b[0] =3
System.out.println(a[0]) // 출력 1 , 깊은 복사를 하였기 때문에 a 배열은 그대로다.
깊은 복사 메서드
// 1. clone() 메서드
Int[] a = {1,2,3,4}
Int[] b = a.clone(); //가장 간단한 방법
//하지만, clone()메서드는 2차원 이상 배열에서는 얕은 복사로 작동한다..
//2. Arrays.copyOf() 메서드
Int[]a = {1,2,3,4};
Int[]b = Arrays.copyOf(a, a.length) //배열과 함께 length값도 같이 넣어준다.
'JAVA' 카테고리의 다른 글
Java.lang 패키지, java,util 패키지에서 자주 사용하는 클래스 (1) | 2023.05.30 |
---|---|
String / StringBuilder / StringBuffer 차이점 & 성능 비교 (0) | 2023.05.29 |
TIL-13 자료구조 활용해 레시피 메모장 만들기 (0) | 2023.05.23 |
TIL-12 컬렉션 Set, Map, List, ArrayList, Queue, Stack (0) | 2023.05.23 |
TIL-9 자바 기초 변수, 문자열, 형변환 (0) | 2023.05.22 |