본문 바로가기
JAVA

JAVA 5일차(1)

by teg0 2025. 8. 11.

배열의 얕은 복사와 깊은 복사

import java.util.Scanner;

public class ArrayCopy {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int[] origin = {1, 2, 3, 4, 5};
		System.out.println("-----원본출력-----");
		
		for (int n : origin) {
			System.out.print(n + " ");
		}
		
		//origin을 copy에 단순대입해서 copy배열 생성
		int[] copy = origin; //얕은 복사
		
		copy[2] = 99;
		System.out.println("\n복사본 값 변경");
		
		System.out.println("-----원본출력-----");
		for (int n : origin) {
			System.out.print(n + " ");
		}
		System.out.println();
		
	}
}

copy배열의 값을 수정해도 원본의 값이 변경됨.
origin과 copy는 참조변수이고, 같은 메모리를 참조하고 있기 때문
얕은 복사 : 주소값 복사

 

import java.util.Scanner;

public class ArrayCopy {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		//깊은 복사 방법
		/*
		 * 1. for문을 활용
		 * 새로운 배열을 만들어서 반복문을 통해 원본 배열의 각 요소를 복사함.
		 * 완벽한 깊은 복사 : 서로 독립적인 배열 생성
		 * */
		
		int[] origin2 = {1, 2, 3, 4, 5};
		int[] copy2 = new int [origin2.length];
		
		for (int i=0; i<copy2.length; i++) {
			copy2[i] = origin2[i];
		}
		
		System.out.println();
		
		System.out.println("-----원본2출력-----");
		copy2[2] = 99;
		for (int n : origin2) {
			System.out.print(n + " ");
		}
		
		System.out.println();
		
		System.out.println("-----복사본2출력-----");
		for (int n : copy2) {
			System.out.print(n + " ");
		}
		System.out.println();
		
		/*
		 * 2. clone()
		 * 자바에서 제공하는 메서드
		 * 배열의 모든 요소를 새로운 배열로 복사
		 * 기본적으로 얕은 복사를 진행. 단, 기본형 배열은 깊은 복사로 동작(int, double...).
		 * */
		
		int[] origin3 = {1, 2, 3, 4, 5};
		int[] copy3 = origin3.clone();
		
		copy3[2] = 99;
		
		System.out.println();
		
		System.out.println("-----원본3출력-----");
		for (int n : origin3) {
			System.out.print(n + " ");
		}
		
		System.out.println();
		
		System.out.println("-----복사본3출력-----");
		for (int n : copy3) {
			System.out.print(n + " ");
		}
	}
}

 

 

2차원 배열

자료형이 같은 1차원 배열의 묶음.

ex) int[행][열] arr -> ~열의 1차원 배열이 행만큼 존재.

2차원 배열은 할당된 공간마다 index를 2개 부여

(앞은 행 : 몇번째 1차원배열인지, 뒤는 열 : 1차원배열의 개수)

 

선언된 공간마다 같은 길이의 1차원 배열을 사용할 수 있고

각각 다른길이의 1차원 배열을 할당 가능

 

2차원배열의 메모리 할당

자료형[][] 배열명;

배열명 = new 자료형[n][m];

또는

자료형[][] 배열명 = new 자료형[n][m]; 

for (int j=0; j<arr.length; j++) {
	for (int i=0; i<arr[j].length; i++) {
		System.out.print(arr[j][i] + " ");
	}
	System.out.println();
}

2차원 배열 탐색 방법

'JAVA' 카테고리의 다른 글

JAVA 6일차  (3) 2025.08.12
JAVA 5일차(2)  (0) 2025.08.11
JAVA 4일차(3)  (2) 2025.08.08
JAVA 4일차(2)  (2) 2025.08.08
JAVA 4일차(1)  (4) 2025.08.08