● 배열이란?
이때까지 사용하던 배열과 같은 개념으로 자바에서 사용된다.
여러 개의 타입이 같은 데이터를 하나의 이름으로 저장하는 자바의 타입으로 각각의 데이터를 인덱스로 구별한다.
(자바의 타입은 크게 기본타입은 앞 게시물에서 간단히 정리했다.)
배열을 사용할 경우 많은 반복이 필요한 작업도 간단하게 반복문을 활용해 해결이 가능하다.
● 자바의 배열
자바의 배열은 배열에 대한 레퍼런스 변수 선언과, 배열 생성 2단계로 이루어진다.
(c의 경우 두 과정을 한 번에 이뤄진다.)
1.레퍼런스 변수 선언은 간단하게 만들어질 배열의 위치를 저장하는 변수를 하나 만들어 주는 것이다.
c언의 포인터 개념과 비슷한데 이 선언 만으론 배열공간이 할당되지 않고 , 처음엔 null값이 들어있다.

위 두 가지 형태로 선언해주고 선언 시에는 배열의 크기를 지정하지 않는다.
2.배열생성은 실제 값이 저장될 공간을 할당받는 것이다.

● 배열 선언과 동시 생성
선언과 동시에 생성의 경우 아래처럼 하거나

선언 시 배열에 초기화를 시켜주면 선언과 동시에 배열이 생성된다.

● 레퍼런스 치환과 배열 공유
자바의 배열의 경우 배열의 위치인 레퍼런스 변수와 배열공간이 분리되어 있다.
따라서 서로 다른 레퍼런스 변수가 하나의 배열공간을 가리킬 수 있다.

위 코드를 보면 test2array라는 레퍼런스 변수가 선언된 후 배열이 생성되었다.
그 후 test1array 레퍼런스 변수가 선언되었고 여기에 test2array의 값을 넣어 줬다. test2array의 값이란 test2array의 배열의 위치가 저장되어있다. 즉 test1array 레퍼런스 변수 또한 같은 배열을 가르키게 돼 것이다.
test1array를 통해 배열값을 수정한 후 test2array에서 찍어보면 수정 값이 적용되어 있다.
● 배열과 for-each문
기존의 for문을 변형해 배열의 크기만큼 루프를 돌리는 것. 형태는 아래와 같고 각 원소를 순차적으로 접근할 때 유용하다.

위 코드의 결괏값은 312 이다.
● 2차원 배열
2차원 배열도 1차원 배열과 마찬가지로 레퍼런스변수 선언 후 배열을 생성한다.

선언 방법은 위의 두 가지이다.

배열 생성은 위와 같고 첫 번째 [] 에는 행의 개수, 두 번째 []는 열의 개수를 나타낸다.
c의 경우 배열이 쭉 펼쳐진 느낌으로 2차원 배열이 생성되지만 자바의 경우 각 행을 가리키는 각각의 1차원 배열이 생성되는 구조를 가진다. 그림으로 나타내면 아래와 같다.

맨 처음 레퍼런스 변수 i를 선언하면 가장 왼쪽의 배열 위치를 저장하는 변수 i가 생성된다.
그 후 배열이 생성되면 행의 크기만큼 배열이 만들어지고 각 배열의 인덱스는 행과 연결된다.
i[0]의 경우 0행의 값이 저장된 배열과 연결되고 i[1]의 경우 1행의 값이 저장된 배열과 연결된다.
● 비정형 배열
비정형 배열이란 각 행과 열의 개수고 동일하지 않은 배열이다.
비정형 배열은 위에서 설명한 각 행을 가리키는 레퍼런스 변수에서 원하는 크기만큼 배열을 생성해 주면 된다.
즉 i[0]이 0번쨰 행을 가르키는 레퍼런스 변수이므로 i[0] = new int[3]을 해주면 0번쨰 행은 3개의 값을 가지게 된다.
● 메소드의 배열 리턴
메소드가 배열을 리턴하는 경우 배열 전체가 리턴되는 것이 아니라 배열의 위치 즉 레퍼런스 변수 값만 리턴된다.
따라서 리턴타입을 선언할 때 배열크기를 지정하지 않는다.

'java' 카테고리의 다른 글
| [java] 필요 개념 정리 hash map (0) | 2023.09.19 |
|---|---|
| [자바] 메소드의 활용 (0) | 2023.04.04 |
| [자바] 객체배열 (0) | 2023.03.27 |
| [java] 객체와 생성자 (0) | 2023.03.20 |
| [java] 자바 클래스와 객체 (0) | 2022.08.31 |