⚡ 배열

sonjh919·2023년 10월 17일
0

Java

목록 보기
11/28
post-thumbnail

📌 배열

  • 같은 자료형의 변수들을 하나의 묶음으로 다루는 것
  • 배열도 하나의 객체라고 볼 수 있다. → 메소드 사용 가능

🌈 배열 선언

  • Stack 영역에 배열의 주소를 저장할 수 있는 공간을 만든다.
자료형[] 배열명;
자료형 배열명[];

🌈 배열 할당

  • Memory(Heap)에 공간을 만드는 행위
  • new : Heap 영역에 공간을 할당하고 발생한 주소값을 return하는 연산자
  • 배열의 크기는 한번 선언 후 변경할 수 없다.
배열명 = new 자료형[배열크기];

int[] arr = new int[3];
int arr[] = new int[3];

🌈 배열 초기화

for(int i=0;i<arr.length;i++){
	arr[i] = i;
}

💡 Heap 영역은 값이 없을 수 없으므로 첫 배열 선언 시 초기화를 따로 하지 않으면 자료형 별 기본값으로 초기화된다.

🌈 선언 & 초기화

int[] arr = {1,2,3,4,5};
int[] arr = new int[] {1,2,3,4,5};

🌈 배열 저장구조

  • 배열은 참조 변수이다.
  • 메모리에 대한 자세한 설명은 메모리 구조를 참고하자.

💡 참조 변수
주소를 저장하는 변수

Stack

  • 배열 arr의 주소를 저장

Heap

  • 배열값은 Heap 영역에 할당
  • Stack에 저장된 주소를 이용해 Heap에 할당된 index를 참조하는 방식
  • 사용하지 않는 객체는 Garbage Collecter(GC)를 통해 버린다. → 메모리 자동 관리

🌈 배열의 삭제

  • 더 이상 주소를 참조할 수 없는 배열은 Garbage Collecter(GC)를 통해 버린다. → 메모리 자동 관리

📌 2차원 배열

  • 배열의 index마다 또 다른 배열의 주소를 보관하는 배열
int arr[][] = new int[3][4];
int[][] arr = new int[3][4];
int[] arr[] = new int[3][4];

int arr[3][2] = {{0,1}, 
				{1,2}, 
				{3,4}}

🌈 2차원 배열 생성과정

  1. Stack

    배열의 주소를 보관할 reference 변수 선언

  2. Heap

    여러 개의 1차원 배열의 주소를 보관하는 배열을 생성

    배열을 할당(heap)하여 주소를 보관하는 배열에 저장 (heap)

🌈 2차원 동적 배열

  • Column의 수는 미리 지정해 놓아야 한다.
int arr[][] = new int[3][]

📌 배열 복사

🌈 얕은 복사

  • Stack의 주소값만 복사
  • 객체의 주소값만 가져와 참조형 변수에 참조하고 하나의 객체를 두 변수가 참조하는 것
int arr1[4] = new int[4];
int arr2[4] = arr1;

🌈 깊은 복사

  • Heap의 배열에 저장된 값을 복사
  • 새로운 배열 객체를 만들어 직접 값을 복사하는 것
// 1. for
for(int i=0; i<arr1.length; i++){
	arr2[i] = arr1[i];
}

// 2. Object.clone()
int[] arr2 = arr1.clone(); 

// 3. System.arraycopy
System.arraycopy(arr1, 0, arr2, 3, arr.length); 

// 4. Arrays.copyof
int[] arr2 = Arrays.copyOf(arr1, 7); 

0개의 댓글