BackEnd/Java

[Java]배열(Array) for문

Hojung7 2024. 7. 21. 18:31

1. 얕은 복사

 

 - 참조형 변수가 가지고 있는 "주소"만 복사하는 것

 

 - 서로 다른 변수가 같은 배열/객체를 참조하기 때문에

 같은 값을 공유!!!

 

ex)

// 원본 배열

int[] arr = {10,20,30,40,50};

 

// 얕은 복사한 배열 선언

int[] copyArr = arr;

 

#예제

[기능]

package ex;

import java.util.Arrays;

public class ArrayEx2 {
public void method1() {
		
		// 원본 배열
		int[] arr = {10,20,30,40,50};
		
		// 얕은 복사한 배열 선언
		int[] copyArr = arr;
		
		System.out.println("[변경 전]");
		System.out.println("arr : "      + Arrays.toString(arr));
		System.out.println("copyArr : "      + Arrays.toString(copyArr));
		
		// 복사한 배열의 값 변경
		copyArr[3] = 4444;
		copyArr[4] = 5555;
		System.out.println("[변경 후]");
		System.out.println("arr : "      + Arrays.toString(arr));
		System.out.println("copyArr : "      + Arrays.toString(copyArr));
		
		// 복사한 배열을 수정 했지만
		// 원본도 같이 수정됨
		// -> 얕은 복사는 주소만 복사해서
		// 같은 배열을 참조하게 만들어 값을 공유함
	}

 

[실행]

package run;

import ex.ArrayEx2;

public class ArrayRun {
	public static void main(String[] args) {

		ArrayEx2 ex2 = new ArrayEx2();
		ex2.method1();
    }
}

 

#결과

 

 

2. 깊은 복사

- 원본 배열/객체가 가지고 있는 값을 똑같이 복사한 배열/객체를 만드는 것

    (복제의 개념)

 

- 새로운 배열/객체가 만들어 지는 것으로 원본과는 독립되어 있음

 → 값을 공유하지 않는다.

 

ex)

 

// 원본 배열

int[] arr = {10, 20, 30, 40, 50};

 

// 깊은 복사 1 : for문 이용

int[] copyArr = new int[arr.length]; // 원본 크기 새 배열 생성

 

[기능]

public void method2() {
	    // 원본 배열
		int[] arr = {10, 20, 30, 40, 50};
		
		// 깊은 복사 1 : for문 이용
		int[] copyArr = new int[arr.length]; // 원본 크기 새 배열 생성
		
		// 원본 배열 요소의 값을 
		// 같은 인덱스의 복사된 배열 요소에 대입
		for(int i = 0 ; i < arr.length ; i++) {
			copyArr[i] = arr[i];
		}
		
		// 깊은 복사 2 : System.arraycopy() 이용
		
		// System.arraycopy(원본 배열명, 원본 복사 시작 인덱스,
		// 					        복사 배열명, 복사 배열의 삽입 시작 인덱스, 
		//					             복사 길이)
		
		int[] copyArr2 = new int[arr.length];
		
		System.arraycopy(arr, 0, copyArr2, 0, arr.length);
		
		// 원본, 복사1, 복사2의 0번 인덱스 값은 변경
		arr[0] = 11111;
		copyArr[0] = 22222;
		copyArr2[0] = 33333;
		
		System.out.println("arr : " + Arrays.toString(arr));
				
		System.out.println("copyArr : " + Arrays.toString(copyArr));
 		
		System.out.println("copyArr2 : " + Arrays.toString(copyArr2));
		
	     }

 

[실행]

package run;

import ex.ArrayEx2;

public class ArrayRun {
	public static void main(String[] args) {

		ArrayEx2 ex2 = new ArrayEx2();
		ex2.method2();
    }
}

 

#결과

 

3. 향상된 for문 (forEach)

- 0번 인덱스 부터 마지막 인덱스까지 1씩 증가하여 terable 성격을 띄는 객체의 요소를

  하나씩 순서대로 반환하는 for문

 

 * iterable : 반복 가능한

 

 ex) 배열, List, Set, Map 등

 

[작성법]

 

for(배열 요소 자료형의 변수 : 배열명){

 

 

ex)

 int[] arr = new int[3];

 

 for( int num : arr ){

 

 => num은 for문이 반복 될때마다 arr[0], arr[1], arr[2] 인덱스 값이

 순차적으로 대입됨

 

#예제1

 

[기능]

public void method3() {
	int[] arr = {10, 20, 30, 40};
	
	//향상된 for문
	for(int num : arr) {
		System.out.println(num);
	}
	
	// 일반 for문
	System.out.println("----------------------------------");
	
	for(int i = 0 ;i < arr.length ; i++) {
		System.out.println(arr[i]);
	}
	}

 

[실행]

package run;

import ex.ArrayEx2;

public class ArrayRun {
	public static void main(String[] args) {

		ArrayEx2 ex2 = new ArrayEx2();
		ex2.method3();
    }
}

 

#결과

 

#예제2

향상된 for문을 이용한 배열 요소 순차 접근(== 반복접근)

[기능]

public void method4() {
	
	char[] arr = {'홍', '길', '동'};
		
	for(char ch : arr) { // 향상된 for문
			
		System.out.printf("%c의 유니코드 : %d \n", ch, (int)ch );
			
	}
}

 

[실행]

package run;

import ex.ArrayEx2;

public class ArrayRun {
	public static void main(String[] args) {

		ArrayEx2 ex2 = new ArrayEx2();
		ex2.method4();
    }
}

 

#결과

 

4. 2차원 배열

- 1차원 배열을 묶음으로 다루는 것

 → 1차원 배열을 참조하는 참조형 변수의 묶음

 

 [작성법]

 ( [ ] : 1차원 배열)

 

 자료형[ ][ ] 배열명 = new 자료형[크기][크기];

 

#예제

 

[기능]

public void method5() {
		
		// 2차원 배열 선언/ 할당
		int[][] arr = new int[2][3];
		
		// 2차원 배열 초기화
		arr[0][0] = 10;
		arr[0][1] = 20;
		arr[0][2] = 30;
		
		arr[1][0] = 40;
		arr[1][1] = 50;
		arr[1][2] = 60;
		
		// 출력
		System.out.println(arr[0]); // 1차원 배열의 해시코드(주소)
		
		System.out.println(arr[1]); // 1차원 배열의 해시코드(주소)
		
		// arr[0]가 참조하는 객체/배열이 int[] 자료형인가?
		System.out.println(arr[0] instanceof int[]); //true

 

[기능]  for문으로 모든 요소 출력하기1 (일반 for문)

for(int row = 0 ; row < arr.length ; row++) { // 행 제어
			
			for(int col = 0 ; col < arr[row].length  ; col++) {  // 열 제어
				System.out.print(arr[row][col] + " ");
				
			}
			System.out.println(); //줄바꿈
		
}

 

[기능]  for문으로 모든 요소 출력하기2 (향상된 for문)

for(int[] row : arr) { // 행을 하나씩 순차 접근
			
			for(int col  : row) { // 각 행의 열을 하나씩 순차 접근
				System.out.print(col + " ");
				
			}
				System.out.println(); // 줄바꿈
}

 

[실행]

package run;

import ex.ArrayEx2;

public class ArrayRun {
public static void main(String[] args) {

ArrayEx2 ex2 = new ArrayEx2();
ex2.method5();
    }
}

 

#결과

 

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

[Java]OOP_클래스  (1) 2024.07.23
[Java]객체지향언어(OOP) 정의 및 Account  (0) 2024.07.23
[Java]배열(Array)  (0) 2024.07.21
[Java]Control 조건문(Loop2)  (0) 2024.07.21
[Java]Control 조건문(Loop1)  (0) 2024.07.21