[Java] 배열

2024. 1. 21. 19:32공부 중/Java

 

1. 배열

 

가. Array Type

int a
int[] arr

arr의 타입은 Reference Type 중 Array Type이다.

 


나. 배열 선언

int[] arr = new int[3];
// int가 들어가는 크기가 3인 배열 선언
  • arr는 생성된 배열을 참조하는 reference 타입 변수다.
  • int arr[], int[] arr 모두 가능하지만 int[]로 통일해서 사용하자.

 

int[] b = new int[]{1,2,3,4,5}; //추천
int[] c = {1,2,3,4,5}
  • 생성과 초기화를 동시에 가능.

 

int err[];
err = {1,2,3,4}
  • 아래는 에러가 발생함.
  • 한 줄 단위로 컴파일하기 때문에 컴파일러가 {1,2,3,4}를 이해하기 어렵기 때문에.

 

아래는 자료형마다 가지는 기본값이다.

 

자료형 기본값
boolean false
char ‘\u0000’
byte, short, int 0
long 0L
float 0.0f
double 0.0
Reference Type null (아무것도 참조하지 않음.)

 


다. 배열의 성질

 

배열은 immutable 하다.

 

배열은 최초 메모리 할당 이후, 변경할 수 없음.

(개별 요소는 변경할 수 있지만, 요소를 추가하거나 삭제할 수 없다.)

 

int[] scores = {90, 80, 100}; 배열에 새로운 점수를 추가하고 싶을 때. (배열 확장)

scores = new int[4]; //가능
scores = new int[]{90, 80, 100, 95}; //가능
scores = Arrays.copyOf(scores, 5); //가능
scores = {90, 80, 100, 95}; //불가능!!!!
  • scores = {90, 80, 100, 95}; : new int()를 생략하려면 선언과 할당을 동시에 수행해야 한다. 지금은 선언이 생략되었다.
  • Arrays.copyOf(scores, 5); : scores를 복사하고 빈 공간은 0을 채운 크기 5의 배열을 생성.

 


라. 배열 복사

import java.util.Arrays;
...
int[] arr = new int[]{1, 2, 3, 4};
int[] arr2 = arr; // soft copy. 주소값만 복사
int[] arr3 = Arrays.copyOf(arr, 4); // Deep copy. 새로운 배열 생성 후 복사

 

arr2는 변수 arr에 저장된 배열의 주소값을 복사할 뿐 정말로 기존의 배열을 복사한 새로운 배열을 생성하는 것은 안니다.

 

새로운 배열을 생성 후 복사하기 위해서 arr3처럼 Arrays.copyOf() 메서드를 활용하자.

 

 

Arrays.CopyOf Method (Java.Util)

Copies the specified array, truncating or padding with zeros (if necessary) so the copy has the specified length.

learn.microsoft.com

 


마. 출력

import java.util.Arrays;
...
int[] arr = new int[] {1,2,3,4};
System.out.println(arr.toString());
System.out.println(Arrays.toString(arr));
/*
[I@5b464ce8
[1, 2, 3, 4]
*/
  • Arrays.toString(arr) : 쉽게 배열의 값을 출력할 수 있음.

 


2. 다차원 배열

 

가. 이차원 배열 선언

int[][] int Array = new int[4][4];

int[][] intArray = new int[4][];
intArray[0] = new int[3];
intArray[1] = new int[2];
// intArray[2] = {1,2,3}; //오류

자바는 다차원 배열의 크기는 가변적이다.

 

이차원 배열은 1차 배열만 생성 후, 필요에 따라서 2차 배열을 생성할 수 있음.

 

이는 자바에선 다차원 배열은 “1차원 배열의 연속”이기 때문이다.

(아마 int[] array;가 가능한 이유랑 같은 듯. 이차원 배열 int[?][]에는 실제 배열이 아니라 어떤 int[]의 주소값을 저장하고 있을 뿐이다.)

 

다차원 배열 구조 - 1차원 배열의 연속

 

 

intArray[2], intArray[3]는 기본값인 null 값을 가짐.

 


나. 공간복잡도

int[][] brr = new int[2][10];
int[][] brr2 = new int[10][2];

Java에서는 brrbrr2의 공간복잡도는 다르다. (C에선 같음)

 

brr이 메모리를 더 작게 차지한다. (작은 것부터)

 

이 또한 자바에선 다차원 배열은 “1차원 배열의 연속”이기 때문이다.

 


다. 배열과 반복문

int[][] intArray = new int[4][];
intArray[0] = new int[1];
intArray[1] = new int[2];
intArray[2] = new int[3];
intArray[3] = new int[4];

for(int i = 0; i < intArray.length; i++){
    for(int j = 0; j < intArray[i].length; j++){
        ...
    }
}
  • for(int j = 0; j < intArray[i].length; j++){ : 2차원 배열의 크기가 다를 수 있기 때문에

 


'공부 중 > Java' 카테고리의 다른 글

[Java] 다형성  (0) 2024.01.22
[Java] 상속  (0) 2024.01.21
[Java] 객체지향  (0) 2024.01.21
[Java] 조건문, 반복문  (0) 2024.01.21
[Java] 자료형과 연산자  (0) 2024.01.21