[JAVA] 배열과 메모리

msung99·2022년 2월 11일
0

배열의 메모리 크기

배열을 구성하는 데이터의 자료형에 따라서 배열의 메모리 크기가 결정된다.

int[] arr = new int[3]; // 12바이트 할당

배열이 저장하는 레퍼런스

  • 변수 : 기본 자료형 데이터 값을 메모리에 저장
  • 배열 변수 : 배열 객체의 주소(레퍼런스)를 저장
int a = 10; // 메모리 안에 10을 저장
int[] b = {10,20,30} // 메모리에 배열 객체 {10,20,30} 의 레퍼런스를 저장.
// 즉, 배열 변수 b는 메모리 안에 배열 객체 {10,20,30} 의 주소를 저장하고 있어서,
// b는 객체 {10,20,30} 을 가리킨다.

배열의 기본 속성

1. 배열 기본속성

int[] arrAtt1 = {10,20,30,40,50,60};
int[] arrAtt2 = null;
int[] arrAtt3 = null;

2. 배열 길이 : length()

선언 형태 : 배열.length( );

System.out.println("arrAtt1.length:" + arrAtt1.length);

3. 배열 요소 출력 : Arrays.toString()

  • Arrays 라는 객체의 toString( ) 메소드를 사용하면 배열의 요소를 출력할 수 있다.

    Arrays.toString(출력할 배열);

System.out.println("arrAtt1:" + Arrays.toString(arrAtt1));

4. 배열 요소 복사 : Arrays.copyOf()

  • Arrays 객체의 copyOf( ) 메소드로 원하는 만큼 복사를 할 수 있다.

  • 기존 배열과 복사하는 배열은 서로 같은 객체를 가리키는 것이 아니다.
    (서로 다른 메모리 주소를 저장한다)

  • 배열의 복사본 객체를 만들어서 메모리 어딘가에 그 복사본 객체를 저장하고,
    변수는 그 객체를 가리킨다.

Arrays.copyof(복사할 배열, 복사하는 배열의 크기);

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

arrAtt3 = Arrays.copyOf(arrAtt1, arrAtt1.length); // 새로운 배열 객체 
// {10,20,30,40,50,60} 를 만들고 그 새로운 객체를 arrAtt3 가 가리키게 한다. 
// arrAtt1 와 arrAtt3 는 서로 다른 배열 객체 {10,20,30,40,50,60} 을 가리킨다.

System.out.println("arrAtt3:"+Arrays.toString(arrAtt3));

5. 배열 레퍼런스

  • 레퍼런스 할당 시키기

array2 = array1;
// array1 가 가리키는 배열 객체의 레퍼런스를 array2 에게도 할당시킴. 즉, 서로 같은 배열 객체를 가리키게 된다.

arrAtt2 = arrAtt1; // 두 배열은 같은 배열 객체 {10,20,30,40,50,60} 을 가리키게 됨 (같은 레퍼런스 값을 가진다.)
System.out.println("arrAtt1:" + arrAtt1); // 01234 
System.out.println("arrAtt2:" + arrAtt2); // 01234
System.out.println("arrAtt3:" + arrAtt3); // 12512 => 레퍼런스가 아닌 
// 값을 할당(복사) 시켰기 때문에 서로 다른 레러펀스를 가지고 있다. 

다차원 배열

  • 2차원 배열

    int[][] array1 = new int[3][2]; // 3행 2열인 2차원 배열

  • 3차원 배열

    int[][][] array2 = new int[3][2][2];

int [][] array1 = new int[3][2];

array1[0][0] = 10;
array1[0][1] = 100;

array1[1][0] = 20;
array1[1][1] = 200;

array1[2][0] = 30;
array1[2][1] = 300;

System.out.println("array1[0]:"+Arrays.toString(array1[0])); // [10,100]
System.out.println("array1[1]:"+Arrays.toString(array1[1])); // [20,200]
System.out.println("array1[2]:"+Arrays.toString(array1[2])); // [30,300]
profile
블로그 이전했습니다 🙂 : https://haon.blog

0개의 댓글