자체임상실험
Inform Restaurant
자체임상실험
전체 방문자
오늘
어제
  • 분류 전체보기 (89)
    • IT정보와 지식 TABLE (1)
      • IT정보 및 꿀팁 (0)
      • Windows (1)
      • Linux (0)
    • Linux TABLE (0)
      • 취약점 점검 스크립트 (0)
    • Developer TABLE (33)
      • Java (33)
      • Java Algorithm (0)
    • DataBase TABLE (1)
      • SQLD-P (1)
    • Cloud TALBE (0)
      • AWS (0)
    • Security TABLE (1)
      • 비박스(bee-box) 취약점 점검 (1)
      • 보안기사 (0)
    • Writer TABLE (42)
      • 기사필사 (42)
      • 서평 (0)
    • Growth TABLE (10)
      • 국민취업지원제도 (4)
      • 국비학원 (6)
    • Life TABLE (0)
      • 자서전 (0)

블로그 메뉴

  • 홈

공지사항

인기 글

태그

  • 초장기 주택담보대출
  • 지하공간
  • Java
  • 국민취업지원제도
  • 방사능
  • 2차원배열
  • 배열복사
  • 한겨레
  • if
  • Arrays
  • 디엠제트
  • 동아일보
  • 조용한 고용
  • @
  • 국비학원
  • 조건문
  • KH정보교육원
  • do while
  • 경향신문
  • while
  • 논설위원
  • Switch
  • 배열
  • 해양오염수
  • 논설위원필사
  • 반복문
  • 천자칼럼
  • 문자열비교
  • array
  • for

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
자체임상실험

Inform Restaurant

Developer TABLE/Java

배열의 복사

2021. 8. 31. 06:20

배열 복사의 종류

  • 얕은 복사
  • 깊은 복사

얕은복사

  • 배열의 주소만을 복사
  • 원본의 참조변수를 다른 배열의 참조변수에 저장
  • 원본과 복사본 모두 같은 참조 주소를 가짐
  • 원본이 변경되거나 복사본이 변경될 경우 참조되는 모든 참조변수의 값 변경

얕은 복사 종류

  • 원본의 참조변수를 다른 배열의 참조변수에 저장
  • 원본과 복사본 모두 같은 참조 주소를 가짐
  • 원본이 변경되거나 복사본이 변경될 경우 참조되는 모든 참조변수의 값 변경

깊은 복사

  • 동일한 새로운 배열을 하나 생성해서 실제 내부 값들을 복사

깊은복사 종류

  • 반복문을 이용한 복사
  • System 클래스에서 제공하는 arraycopy() 메소드를 이용한 복사
  • Arrays 클래스에서 제공하는 메서드를 이용한 복사
    • copyOf()
    • copyOfRange()
  • clone() 메소드를 이용한 복사

얕은 복사 예제

원본 주소 복사 예제

public void method1()	{
	int[] szOrigin = {1, 2, 3, 4, 5, 6};
	int[] szCopy = szOrigin;
	
	System.out.println("szOrigin: " + szOrigin);
	System.out.println("szCopy: " + szCopy);
	System.out.println();
    
	szCopy[2] = 333;
	
	for(int i = 0; i < szOrigin.length; i++) {
		System.out.printf("szOrigin[%d]: %d\n", i, szOrigin[i]);
	}
	System.out.println();
    
	// 향상된 for문
	for(int value : szOrigin) {
		System.out.printf("szOrigin: %d\n", value);
	}
}

출력물

szOrigin: [I@4926097b
szCopy: [I@4926097b

szOrigin[0]: 1
szOrigin[1]: 2
szOrigin[2]: 333
szOrigin[3]: 4
szOrigin[4]: 5
szOrigin[5]: 6

szOrigin: 1
szOrigin: 2
szOrigin: 333
szOrigin: 4
szOrigin: 5
szOrigin: 6

깊은 복사 예제

1. 반복문을 이용한 깊은 복사 예제

public void method2() {
	int[] szOrigin = {1, 2, 3, 4, 5, 6};
	int[] szCopy = new int[6];
	
	System.out.println("szOrigin: " + szOrigin);
	System.out.println("szCopy: " + szCopy);
	System.out.println();
	
	for(int i = 0; i < szOrigin.length; i++) {
	szCopy[i] = szOrigin[i];
	}
	
	szCopy[2] = 333;
	
	System.out.println("szOrigin");
	for(int i = 0; i < szOrigin.length; i++) {
		System.out.print(szOrigin[i] + " ");
	}
	System.out.println();
	System.out.println("szCopy");
	for(int i = 0; i < szCopy.length; i++) {
		System.out.print(szCopy[i] + " ");
	}
}

출력물

szOrigin: [I@4926097b
szCopy: [I@39ed3c8d

szOrigin
1 2 3 4 5 6 
szCopy
1 2 333 4 5 6

2. System 클래스에서 제공하는 arraycopy() 메소드 사용 예제

  • System.arraycopy(원본 배열명, 복사 시작 인덱스, 복사본 배열명, 복사본 배열의 복사 시작위치, 복사할 길이);
  • e.g.) System.arraycopy(szOrigin, 0, copy, 2, szOrigin.length);
public void method3() {
	int[] szOrigin = {1, 2, 3, 4, 5, 6};
	int[] szCopy = new int[10];
	
	// 배열 깊은 복사
	System.arraycopy(szOrigin, 0, szCopy, 3, szOrigin.length);
	
	System.out.println("szOrigin");
	for(int value : szOrigin) {
		System.out.print(value + " ");
	}
	
	System.out.println("\nszCopy");
	for(int value : szCopy) {
		System.out.print(value + " ");
	}
	
	System.out.println("\n");
	
	System.out.println("szOrigin Address: " + szOrigin);
	System.out.println("szOrigin Length: " + szOrigin.length);
	System.out.println("szCopy Address: " + szCopy);
	System.out.println("szCopy Length: " + szCopy.length);
}

출력물

szOrigin
1 2 3 4 5 6 
szCopy
0 0 0 1 2 3 4 5 6 0 

szOrigin Address: [I@3830f1c0
szOrigin Length: 6
szCopy Address: [I@39ed3c8d
szCopy Length: 10

3. Arrays 클래스에서 제공하는 copyOf() 메소드 사용 예제

public void method4() {
	int[] szOrigin = {1, 2, 3, 4, 5};
	int[] szCopy = Arrays.copyOf(szOrigin, 10);
    
	System.out.println("szOrigin");
	for(int value : szOrigin) {
		System.out.print(value + " ");
	}
	
	System.out.println("\nszCopy");
	for(int value : szCopy) {
		System.out.print(value + " ");
	}
	
	System.out.println("\n");
	
	System.out.println("szOrigin Address: " + szOrigin);
	System.out.println("szOrigin Length: " + szOrigin.length);
	System.out.println("szCopy Address: " + szCopy);
	System.out.println("szCopy Length: " + szCopy.length);
}

출력물

szOrigin
1 2 3 4 5 
szCopy
1 2 3 4 5 0 0 0 0 0 

szOrigin Address: [I@3830f1c0
szOrigin Length: 5
szCopy Address: [I@39ed3c8d
szCopy Length: 10

4. clone() 메서드를 이용한 복사

  • 원본 배열의 모든 요소를 복사해서 새로운 배열 생성
public void method5() {
	int[] szOrigin = {1, 2, 3, 4, 5};
	int[] szCopy = szOrigin.clone();
	
	System.out.println("szOrigin");
	for(int value : szOrigin) {
		System.out.print(value + " ");
	}
	
	System.out.println("\nszCopy");
	for(int value : szCopy) {
		System.out.print(value + " ");
	}
	
	System.out.println("\n");
	
	System.out.println("szOrigin Address: " + szOrigin);
	System.out.println("szOrigin Length: " + szOrigin.length);
	System.out.println("szCopy Address: " + szCopy);
	System.out.println("szCopy Length: " + szCopy.length);
}

출력물

szOrigin
1 2 3 4 5 
szCopy
1 2 3 4 5 

szOrigin Address: [I@3830f1c0
szOrigin Length: 5
szCopy Address: [I@39ed3c8d
szCopy Length: 5
저작자표시 비영리

'Developer TABLE > Java' 카테고리의 다른 글

2차원 배열  (0) 2021.08.31
String 클래스  (0) 2021.08.31
커맨드 라인을 통해 입력받기  (0) 2021.08.30
    'Developer TABLE/Java' 카테고리의 다른 글
    • 가변 배열
    • 2차원 배열
    • String 클래스
    • 커맨드 라인을 통해 입력받기
    자체임상실험
    자체임상실험
    생활에 유용한 정보와 일상을 담은 휴식처, Sobremesa 입니다.

    티스토리툴바