Deeb
디비의 DB
Deeb
전체 방문자
오늘
어제
  • 분류 전체보기 (243)
    • Frontend (63)
      • HTML & CSS (27)
      • JavaScript (17)
      • jQuery (8)
      • React (6)
    • Backend (98)
      • Java (19)
      • JDBC (2)
      • Servlet & JSP (13)
      • Spring (17)
      • Project (0)
      • 개발 공부 (11)
      • 문제 풀이 (8)
      • Algorithm (1)
      • DataBase (0)
      • Oracle (18)
      • Error (8)
    • Knou (1)
    • Review (14)
    • TIL (33)
    • 삽질기록 (8)
    • deebtionary (5)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 리액트
  • 삭제
  • 서평단
  • CLASS
  • 다형성
  • For
  • 책
  • DB
  • 배열
  • Java
  • js
  • alter
  • 방송대
  • DBMS
  • 정의
  • 공부
  • 에러
  • HTML
  • 함수
  • 기초
  • 추천
  • 2학기
  • GIT
  • 자바
  • 정처기
  • css
  • 클래스
  • 방통대
  • 후기
  • 한빛미디어

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Deeb

디비의 DB

[Java] Array(배열)_3 (배열 복사)
Backend/Java

[Java] Array(배열)_3 (배열 복사)

2021. 9. 3. 11:15

✍hallow copy(얕은 복사)

- 참조하는 배열의 시작 주소만을 복사하는 것이다. 

ex) 바로가기

두 변수가 하나의 배열을 공유한다.

-> 객체의 매개변수, 반환형 전달 시 사용

int[] arr = {1, 2, 3, 4, 5};
int[] copyArr = arr;
// 얕은 복사 진행 

 

✍Deep copy(깊은복사) 

: 완전 다른 파일이기 때문에 원본에 영향을 주지 않는다. 

- 같은 값을 가진 서로다른 배열이 생긴다.

- 원본 배열과 동일한 자료형, 동일하거나 더 큰 크기, 동일한 데이터를 가지는 새로운 배열을 만드는 것이다.

- 원본 데이터 유지, 원본과 똑같은 배열이 필요할 때 

 

 

ex) ctrl c-> ctrl v

 

종류   예시
얕은 복사   윈도우 바로가기
깊은 복사   원본의 복사본

 

📝얕은 복사 예제

ArrayService2 // public void example1() 

int[] arr = {1, 2, 3, 4, 5};
// 얕은 복사 진행
int[] copyArr = arr;
//arr, copyArr은 동일한 주소에 있는 int[]을 참조
System.out.println("변경 전"); System.out.println(Arrays.toString(arr)); System.out.println(Arrays.toString(copyArr));
//복사가 되었는지 확인

//복사한 배열의 0번째 요소를 변경
copyArr[0] = 999;
System.out.println("변경 전");
System.out.println(Arrays.toString(arr));
System.out.println(Arrays.toString(copyArr));
//얕은 복사 -> arr, copyArr은 같은 배열을 참조
// -> arr,copyArr 둘 다 0번 인덱스 값이 변경됨

 

📝깊은복사 예제

ArrayService2 // public void example2() 

int[] arr = {1, 2, 3, 4, 5};
// 깊은 복사 진행
// 1) 복사를 위한 새로운 배열 선언 및 할당
int[] copyArr = new int[arr.length];
//원본 배열크기만큼을 만들기 위해 arr배열의 크기인 arr.length
//원본 배열과 같은 크기의 새로운 배열 할당

// 2) 원본 배열의 내용을 복사용 배열에 초기화 하기
// 2-1) for문을 이용한 깊은 복사
for(int i = 0; i<arr.length; i++) {
//i가 0일때 대입연산 오른쪽의 값이 왼쪽에 들어가니 c
opyArr[i] = arr[i]; // arr0번의 값이 copyArr0번으로 들어간다.
}
System.out.println("변경 전");
System.out.println(Arrays.toString(arr));
System.out.println(Arrays.toString(copyArr));
//복사가 되었는지 확인

//복사한 배열의 0번째 요소를 변경
copyArr[0] = 999;
System.out.println("변경 전");
System.out.println(Arrays.toString(arr));
System.out.println(Arrays.toString(copyArr));

2-2)

int[] arr = {1, 2, 3, 4, 5};
int[] copyArr = new int[arr.length];


2-2)//System.arraycopy(원본배열, 원본 복사 시작 인덱스, 복사배열, 복사 배열의 삽입 시작 인덱스, 복사길이);
// 값이 5개가 들어간다

System.arraycopy(arr, 0, copyArr, 0, arr.length);
// 원본 배열 arr에서 0번째 인덱스부터 5개의 데이터 (arr.length)를
// 복사배열 copyArr의 0번 인덱스부터 차례대로 삽입하겠다.

System.out.println("변경 전");
System.out.println(Arrays.toString(arr));
System.out.println(Arrays.toString(copyArr));
//복사가 되었는지 확인

//복사한 배열의 0번째 요소를 변경
copyArr[0] = 999;
System.out.println("변경 전");
System.out.println(Arrays.toString(arr));
System.out.println(Arrays.toString(copyArr));

결과 화면)

 

1,2 번을 자주쓰고

3번은 잘 안쓰고

4번은 데인져러스

 

clone : 복제

잘못 쓰게 되면 무한히 복제되어서 컴퓨터에 문제가되기때문에 권장하지 않다. 

effective java에서 나오는 말이다. 

 

반응형

'Backend > Java' 카테고리의 다른 글

[Java] OOP 2 _Class, Field (접근제한자, 예약어, 멤버·클래스 변수)  (0) 2021.09.07
[Java] OOP 1_Object Oriented Programming(객체지향)  (1) 2021.09.06
[Java] 2차원 Array(배열) + 가변 배열/ 선언,할당,초기화  (0) 2021.09.02
[Java] Array(배열)_String[] (null)  (0) 2021.09.02
[Java] Array(배열)_2 (초기화, Arrays 클래스, Arrays.toString)  (0) 2021.09.01
    'Backend/Java' 카테고리의 다른 글
    • [Java] OOP 2 _Class, Field (접근제한자, 예약어, 멤버·클래스 변수)
    • [Java] OOP 1_Object Oriented Programming(객체지향)
    • [Java] 2차원 Array(배열) + 가변 배열/ 선언,할당,초기화
    • [Java] Array(배열)_String[] (null)
    Deeb
    Deeb

    티스토리툴바