코드스테이츠_국비교육/[Section1]

10_배열_22.09.01

생각없이 해도 생각보다 좋다. 2022. 9. 2. 15:21

배열

>의미

: 동일한 타입의 값들을 하나의 묶음으로 만든 자료 구조

 

>장점

: 반복문을 이용하여 모든 배열 혹은 일부 배열을 검색할 수 있음.
: 동일 타입의 데이터를 저장할 때, 일일이 변수를 만들 필요가 없음.


>선언

배열 타입[] 참조변수;
(1) 참조변수 = new 타입[길이] // 모든 요소가 0으로 초기화.
(2) 참조변수 = new 타입[] {초기화값} // 초기화 값 만큼의 배열 길이가 정해진다.
(3) 참조변수 = new 타입[0]; // 빈 배열.

예시.
int[] num;
num = new int[3] // 길이가 3이고 배열의 요소가 {0,0,0}인 int 배열 생성
num = new int[]{1,2,3}// 길이가 3이고, 배열의 요소가 {1,2,3}인 int 배열 생성
num = new int[0] // 길이가 0인 빈 int 배열 생성.
num = new int[]{} // 길이가 0인 빈 int 배열 생성.
int[] num = new int[0] // 한 줄로 가능.


>특징

: 참조 변수는 실제 값이 아닌 참조 값을 갖는다.
: 실제 값인 배열은 초기화 된 길이만큼 특정 위치의 주소를 시작으로 순차적으로 저장된다.
: 배열의 요소 하나당 메모리 공간 크기는 배열 타입의 크기와 같다.

double[] num = new double[3];
//1. num이라는 참조 변수 생성.
//2. 8byte(double)의 메모리 공간 3곳에 0이 저장된 배열 생성.(메모리 주소는 연속적)
//3. 참조 변수 num이 배열의 첫 번째 요소가 저장된 주소를 참조

>1차원 배열

: 배열 타입에 '[ ]'가 하나인 경우,

: 위에서 설명한 배열이 1차원 배열

 

>배열의 접근

: 참조변수[인덱스] 로 접근 가능

: 호출 및 수정 가능

int[] num = new int[]{1,2,3};
System.out.println("출력: " + num[0]); // 인덱스는 0부터 시작
System.out.println("출력: " + num[1]);
System.out.println("출력: " + num[2]);
/*
출력: 1
출력: 2
출력: 3
*/

>2차원 배열

: 배열 타입에 '[ ]'가 두 개인 경우,

: 배열안에 배열이 있다고 생각하면 편함.

/* 2차원 배열의 초기화 */
int[][] num2 = new int[2][3];
int[][] num2 = new int[][]{
{0,0,0}
{0,0,0}
};
//: 길이가 3인 배열이 2개로 묶여있는 2차원 배열.
//: 모든 요소는 0으로 초기화.
//: 두 초기화는 방식만 다를 뿐, 같은 초기화 결과를 보임.

>2차원 배열; 행렬로 이해하기

예시: int[ ][ ] num2 = new int[2][3]; // 2행 3열의 배열

 

 

>다차원 배열; 3차원 이상의 배열

: 1차원이 늘어날 때 마다 인덱스 표현 방식(배열의 '[ ]')가 하나씩 늘어남.

: 배열이라는 덩어리 묶음 속에 덩어리 묶음이 계속 묶이는 것으로 이해.

: 현실 세계의 차원으로 생각하면 3차원은 높이 축으로 쌓이는 개념(사람 개념)

: 하지만 디지털 개념으론 그냥 순차적인 주소에 저장됨.

 

>가변 배열

: 배열의 길이를 고정하지 않은 배열.

: 2차원 이상의 배열에서는 마지막 차수에 해당하는 배열의 길이를 고정하지 않아도 됨.

: 즉, 가장 내부에 묶이는 배열은 길이 설정이 자유롭다. (외부 배열은 생성된 상태)

int[][] num = new int[4][];
int[0] = new int[3]; // int[0]의 내부 배열로 길이가 3인 배열 생성.
int[1] = new int[6]; // int[1]의 내부 배열로 길이가 6인 배열 생성.
int[2] = new int[0]; // int[2]의 내부 배열로 길이가 0인 배열 생성.
int[3] = new int[6]; // int[3]의 내부 배열로 길이가 6인 배열 생성.

>1차원 배열, 가변 배열처럼 쓰기

: 메서드를 이용해서 길이를 늘려주는 방법 사용. (예시: Arrays.copyOf)

int[] num= new int[0]; // 원래는 길이가 0인 빈 배열
num = Arrays.copyOf(num, num.length + 1); // 길이 1 추가 (총 길이: 1)
num[0] = 10;
num = Arrays.copyOf(num, num.length + 1); // 길이 1 추가 (총 길이: 2)
num[1] = 2;
System.out.println(num[0]);
System.out.println(num[1]);
/*
10
2
*/