본문 바로가기
프로그래밍 언어/Java

[Java] 배열 개념 (선언 및 초기화)

by 까망 하르방 2021. 3. 4.
반응형

배열 개념 (선언 및 초기화)

여러 개의 데이터를 한 번에 계산하거나, 한 번에 루프를 이용해서 처리하는 경우가 종종 있는데
이럴 때는 여러 개의 변수를 선언하는 대신에 배열을 활용합니다.

 

 

배열 생성 방법

좌항이 레퍼런스 변수를 선언하는 단계이고 / 우항이 배열 공간을 실제 할당하는 생성 단계이다. 
(배열 공간을 할당하지 않으면 null값이 할당된다.)
// 배열을 선언하는 동시에 배열 안의 내용물도 같이 선안하는 방식 - 중괄호{} 사용
int[] arr = ;
int[] arr = int arr[] 모두 가능하다. 
//  배열을 선언해서 공간만 확보하고, 나중에 내용물을 채우는 방식 - 대괄호[] 사용
int arr[] = new int[3];
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
(* 배열의 인덱스는 0부터 시작)
 
배열을 생성할 때 미리 배열의 크기를 결정해주어야합니다.
크기를 입력받아 동적으로 생성도 하지만 그것도 입력받은 크기만큼 배열을 생성하는 것입니다.
import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        
        Scanner sc = new Scanner(System.in);
        
        int n = Integer.parseInt(sc.nextLine());
        int[] arr = new int[n];

        for(int i=0; i < arr.length ;i++) {
            arr[i] = Integer.parseInt(sc.nextLine());
        }
        
        System.out.println(Arrays.toString(arr));
    }
}
 
 

다차원 배열

int[][] arr = new int[5][2]
 
배열에서는 바깥쪽 크기만 먼저입니다.
int [][] arr = new int[3][];
 
arr[0] = new int[3];
arr[1] = new int[4];
arr[2] = new int[2];
배열의 선언, 생성과 함께 각 원소를 초기화할 수도 있다.
public class Main {
    public static void main(String[] args){
        
        int[][] arr = {{0,1,2}, {100, 101}};
        
        for(int i=0; i< arr.length; i++) {
            for(int j=0; j<arr[i].length; j++, System.out.print("\t")) {
                System.out.print(arr[i][j]);
            }
            System.out.println();
        }
    }
}
 
 

배열에 대한 메모리 공간에 대한 이해

int [] arr = ;
int [] arr2 = arr;
int [] arr3 = arr;
만약 배열이 아닌 변수라면 해당 값 자체를 복사해서 할당할 것이다.
배열에는 일반적으로 많은 데이터를 담고 있기에 복사하게 된다면 시간(속도), 메모리 부담도 있을 것이다.
public class Main {
    public static void main(String[] args) {
        
        int [] arr = {100, 82, 73, 64, 55, 46, 37, 28, 19, 10};
        int [] arr2 = arr;
        int [] arr3 = arr;

        System.out.println(arr);
        System.out.println(arr2);
        System.out.println(arr3);
    }
}

 

'@' 이하에 나오는 숫자(16진수)가 실제 메모리 주솟값은 아니다.
Java에서는 이런 데이터를 출력할 때 hashCode()라는 특정한 함수의 결과값 사용
배열은 많은 데이터를 의미하기 때문에 배열을 의미하는 변수에 배열의 모든 데이터를 넣지 않습니다.
대신에 나중에 메모리상에 있는 배열을 사용할 수 있는 참조값(Reference)을 넣어주는 방식입니다.
(C언어에서 사용하는 포인터(Pointer)라는 개념과 비슷)
따라서 arr, arr2, arr3 변수 모두 동일한 데이터를 움직이는 참조값이 됩니다.
 

 

 

반응형

댓글