본문 바로가기
공부/자바

배열 선언과 초기화

by xladmt 2024. 5. 26.

배열이란?

같은 자료형끼리 묶어둔 것!

  • 배열은 한 번 생성하면 그 길이를 바꿀 수 없다.
    • 왜? 배열은 연속된 메모리 공간을 갖는다. 하지만 값을 바꾸면 메모리 공간을 연속되게 확보할 수 있다는 보장이 없기 때문이다.
    • 그렇다면? 길이가 큰 배열을 새로 만들어서 값을 복사하면 된다.

 

배열 선언과 초기화

배열 선언과 초기화 (가능한 것과 불가능한 것 잘 알아두기!)

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

// 불가능
int[] arr = new int[5]{1, 2, 3, 4, 5}; // 초기화 할 때는 크기를 정할 수 없다.
int arr[5]; // 배열을 선언할 때는 크기를 지정할 수 없다.
int arr = new int[]; // 앞에 타입과 뒤 타입이 일치해야함. 앞타입에 int[]라고 해주어야함.
int[5] arr = new int[]; // 배열의 길이는 뒤에 선언해주어야 한다.

 

초기화 방법)

int[] score = new int[]{50, 60, 70, 80, 90};  // 방법 1
int[] score = {50, 60, 70, 80, 90};           // 방법 2. new int[]를 생략. 하지만 두 줄로 나누면 안됨.

=> 두 번째 방법으로 사용할 때는 꼭 한 줄로 써야한다. 두 줄로 나눠서 작성하면 오류가 발생한다!!

 

배열 출력

int[] arr = {100, 95, 80, 70, 60};
System.out.println(Arrays.toString(arr)); //출력 : [100, 95, 80, 70, 60]

 

배열 변수로만 출력은 불가능! for문을 사용하거나 Arrays.toString() 함수를 사용해야함. 

but, char형 배열변수 이름만으로 출력 가능!

int[] iArr1 = {1, 2, 3, 4, 5};
int[] iArr2 = {10, 20, 30, 40, 50};
char[] chArr = {'a', 'b', 'c', 'd'};

System.out.println(iArr1);                     // [I@1d251891
System.out.println(Arrays.toStirng(iArr2));    // [10, 20, 30, 40, 50]
System.out.println(chArr);                     // abcd

=> int형 배열 변수를 이름만 출력하면 위와 같은 결과를 얻는다. 하지만 char형 배열 변수는 가능하다는 것을 할 수 있다.

 

 

Arrays로 배열 다루기

  • 배열의 비교와 출력 - equals(), toString()
int[] arr = {0, 1, 2, 3, 4};
int[][] arr2D = {{11, 22}, {21, 22}};

System.out.println(Arrays.toString(arr));       // [0, 1, 2, 3, 4]
System.out.println(Arrays.deepToString(arr2D)); // [[11,22], [21,22]]

String[][] str2D = new String[][]{{"aaa", "bbb"}, {"AAA", "BBB"}};
String[][] str2D2 = new String[][]{{"aaa", "bbb"}, {"AAA", "BBB"}};

System.out.println(Arrays.equals(str2D, str2D2));     // false
System.out.println(Arrays.deepEquals(str2D, str2D2)); // true

 

  • 배열의 복사 - copyOf(), copyOfRange(), System.arrayCopy()
int[] arr = {0, 1, 2, 3, 4};
int[] arr2 = Arrays.copyOf(arr, arr.length);  // arr2 = [0, 1, 2, 3, 4] 
int[] arr3 = Arrays.copyOf(arr, 3);           // arr3 = [0, 1, 2]  
int[] arr4 = Arrays.copyOf(arr, 7);           // arr4 = [0,, 1, 2, 3, 4, 0, 0]
int[] arr5 = Arrays.copyOfRange(arr, 2, 4);   // arr5 = [2, 3] <- 4는 불포함
int[] arr6 = Arrays.copyOfRange(arr, 0, 7);   // arr6 = [0, 1, 2, 3, 4, 0, 0]

 

* System.arrayCopy()

for(int i=0; i<num.length;i++){ newNum[i] = num[i] };
// 위 식은 아래 식과 같다.
System.arraycopy(num, 0, newNum, 0, num.length);
// num[0]에서 newNum[0]으로 num.length개의 데이터를 복사

 

 

  • 배열의 정렬 - sort()
int[] arr = {3, 2, 0, 1, 4};
Arrays.sort(arr); // 배열 arr를 (오름차순)정렬한다.
System.out.println(Arrays.toString(arr)); // [0, 1, 2, 3, 4]

 

'공부 > 자바' 카테고리의 다른 글

오버로딩(overloading)  (0) 2024.05.29
객체 지향 프로그래밍(OOP)  (0) 2024.05.28
조건문과 반복문  (0) 2024.05.25
연산자  (0) 2024.05.24
상수와 리터럴  (0) 2024.05.22