Java 배열에 대해 알아보자
배열
배열은 같은 타입의 변수 묶음이다.
아래와 같이 변수를 하나하나 생성하기엔 너무 비효율적이기에

이처럼 묶어서 한 번에 만든다.
배열의 크기는 한번 생성되면 변경할 수 없다.
배열 선언
배열 선언은 아래 2가지 방법으로 할 수 있다. 대괄호의 위치가 다르다.
자료형 배열이름[ ];
자료형[ ] 배열이름;
보통 두 번째 방법을 많이 사용한다.
이때, 배열 선언은 데이터를 저장하는 공간이 생긴 것이 아닌 주소값을 저장하는 공간이 생긴 것이다.
배열 생성
배열을 선언한 후엔 생성을 해야 한다. 선언해 놓은 배열 이름에 맞게 생성하며 new 연산자를 이용한다.
아래 코드는 선언과 동시에 생성한 것으로, 좌항이 선언, 우항이 생성이다.
위 코드를 메모리 상에서 보면 아래와 같다.
Array는 참조변수이며, Array 배열 공간의 시작 주소를 가진다. (0x11은 임의의 주소)
값을 직접 정해주지 않으면 int형의 경우 0으로 초기화된다.
참고로 자료형에 따른 기본값은 아래와 같다.
배열의 초기화
배열을 생성하면 위의 표와 같이 기본값으로 초기화된다.
우리가 원하는 값으로 초기화하려면 다음과 같은 방법이 있다.
위 방법은 배열을 생성한 후 인덱스에 직접 접근해 값을 하나씩 넣는다.
해당 방법은 보기엔 확실할지라도 일일이 초기화하기엔 비효율적이다.
따라서 아래의 방법을 더 많이 쓴다.
편의성을 위해 Java에서 제공하는 선언 및 초기화 방법이다.
위 방법은 크기를 굳이 지정해주지 않아도 된다는 장점이 있다.
둘 다 결과는 같은데, 선언과 초기화를 따로 할 땐 Array1의 방법을 사용할 수 없다.
오류가 발생함을 볼 수 있다.
배열의 활용
배열을 직접 활용해보자.
아래 코드처럼 보통 배열은 for문 등의 반복문과 함께 사용하는 경우가 많다.
이때, 배열의 크기가 바뀌는 등 변화가 생겼을 때 for문의 조건식을 일일이 바꿔주기엔 효율이 떨어진다.
따라서 아래의 방법을 사용한다.
배열이름.length 을 활용하는 것인데 해당 배열의 길이를 반환한다.
만약 배열의 길이를 5에서 10으로 바꾸면 반환 값도 10이 된다.
다차원 배열
다른 언어와 마찬가지로 Java에서도 다차원 배열을 할 수 있다.
방법은 아래와 같다.
자료형 배열이름[ ][ ];
자료형[ ][ ] 배열이름;
자료형[ ] 변수이름[ ];
생성은 일차원 배열과 동일하다.
Array1처럼 선언과 생성만 할 수도, Array2처럼 초기화까지 한 번에 할 수도 있다.
Array[2][3]을 예로 들었을 때 인덱스 접근은 아래와 같다.
이를 메모리에 올라가는 것으로 본다면 아래와 같다.
배열의 배열이 있는 것이다. 따라서 아래와 같이 다차원 배열에 대해 length를 사용할 수 있다.
또, 위와 같기 때문에 Array1.length는 2이다.
대괄호를 늘림에 따라 삼차원, 사차원 배열도 만들 수 있다.
가변 배열
다차원 배열에서 크기를 굳이 고정시킬 필요는 없다.
예를 들어 아래와 같은 형태의 배열을 만들 수 있다.
방법은 아래와 같다.
혹은 아래와 같이 초기화를 바로 할 수 있다.
배열의 복사
배열의 크기를 변경할 수 없으므로 이럴 땐 새로운 배열로 옮겨야 한다.
배열을 복사할 때 보통 같은 크기의 배열을 만든 후 for문을 통해 복사한다.
하지만 java에선 배열 복사를 위한 메서드 arraycopy()를 제공한다. 형태는 아래와 같다.
System.arraycopy(arr1, 0, arr2, 0, arr1.length);
System 클래스에 있으므로 System.arraycopy()이다.
arr1은 복사를 원하는 배열,
0은 arr1 배열의 인덱스
arr2는 복사된 값을 받을 배열,
0은 arr2 배열의 인덱스,
arr1.length는 복사할 데이터 개수이다.
아래는 arr1 배열의 내용을 arr2에 담는 코드이다.
arr1[0]부터 arr1.length만큼 arr[2]부터 차례대로 채우는 것이며 결과는 아래와 같다.
만약 중간부터 채우고 싶다면 0을 다른 숫자로 바꾸면 된다. 예를 들어 3으로 바꾸면 결과는 아래와 같다.
여기서 arr1.length를 2로 바꾸면 결과는 다음과 같다.
만약 arr2의 크기를 벗어나는 경우는 ArrayIndexOutOfBoundsException이 발생한다.
'Java > Java' 카테고리의 다른 글
Java - 중위 - 후위 표기법 변환 & 후위 표기법 계산 (0) | 2023.08.24 |
---|---|
Java - Java 클래스, 객체, 인스턴스 (0) | 2023.07.16 |
Java - Java 조건문과 반복문 (0) | 2023.02.10 |
Java - Java 연산자 (0) | 2023.02.09 |
Java - Java 변수 (0) | 2023.01.21 |