배열(Array)
- 동일한 데이터 타입의 값(0개 이상)들을 저장하기 위한 자료구조
- 인덱스를 이용하여 각 요소에 접근할 수 있음
- 고정된 크기 (생성된 배열의 크기를 바꿀 수는 없음)
- 메모리에 연속적으로 저장이 됨
배열의 선언 필요 요소
- 자료형 : 배열을 이루는 자료형(기초자료형, 참조자료형 모두 가능)
- 배열이름 : 프로그램에서 사용할 배열의 이름(주소 값 저장)
- 길이 : 배열을 이루는 요소의 값 (배열은 고정된 길이)
배열 선언
- 데이터 타입[] 배열이름
- 데이터타입 배열이름 []
| 자료형 | 배열 이름 | 배열 선언문 |
|---|
int | intArray | int[] intArray; |
char | charArray | char[] charArray; |
boolean | boolArray | boolean[] boolArray; |
String | strArray | String[] strArray; |
float | floatArray | float[] floatArray; |
배열의 생성과 초기화
- 자료형[] 배열이름 = new 자료형[길이];
-> 배열 생성(자료형의 초기값으로 초기화)
- 자료형[] 배열이름 = new 자료형[길이]{값1, 값2, 값3, 값4};
-> 배열 생성 및 값 초기화
- 자료형[] 배열이름 = {값1, 값2, 값3, 값4};
-> 선언과 동시에 초기화
| 자료형 | 기본값 | 비고 |
|---|
| boolean | false | |
| char | '\u0000' | 공백 |
| byte, short, int | 0 | |
| long | 0L | |
| float | 0.0f | |
| double | 0.0 | |
| 참조형 변수 | null | 아무것도 참조하지 않음 |
배열의 메모리 생성과정

배열의 인덱스
- [ ]사이에 숫자를 넣으면 해당 위치의 요소에 점근할 수 있음
- 인덱스는 0부터 시작 -> 길이가 5인 배열의 인덱스
: 0, 1, 2, 3, 4
- 음수를 사용할 수 없음
- 배열의 길이를 벗어나는 값을 사용할 수 없음(N개의 크기 -> 0 ~ N-1 활용)
=> 접근 가능한 배열의 인덱스 범위를 벗어나면 오류 발생
- .length를 이용하면 배열의 길이는 구할 수 있음
배열의 출력
- 저번시간에 배웠던 반복문을 통해서 출력해볼 수 있음!
- java.util.Arrays 클래스의 메서드 toString() 활용
-> Arrays.toString(배열명)-> [요소1, 요소2, 요소3, ''']식으로 출력됨
int[] nums ={97, 1, 16};
System.out.println(Arrays.toString(nums));
// 출력 결과
// [97, 1, 16]
배열의 복사
- 실제 여러가지 방법으로 복사가 가능
- 배열은 고정된 크기이므로 배열의 크기를 변경하기 위해서는 배열을 생성 및 복사해야함

얕은 복사
- 객체 내부의 참조형 변수는 원본 객체의 참조를 복사함
- 원본 객체와 복사본이 같은 참조를 가리키므로, 하나를 수정하면 다른 객체에도 영향 O
깊은 복사
- 객체의 모든 필드 값을 새로 복사하여 독립적인 개체를 생성함.
- 원본 객체와 복사본은 완전히 별개의 메모리 공간을 가지므로, 한 객체의 변경이 다른 객체에 영향 X
배열의 복사 메서드
- Arrays.copyOf() : 배열을 복사하여 새로운 배열을 생성
- Arrays.copyOfRange() : 배열의 특정 범위를 복사하여 새로운 배열을 생성
다차원 배열(Array)
- 배열 안에 또 다른 배열을 포함하는 구조
- 3차원 이상도 가능
cf) 일반적으로 2차원 배열(행렬 형태)가 많음
- 표 형태 혹은 복잡한 계층 구조를 표현할 때 유용
- 2차원 배열은 배열 요소로 1차원 배열의 참조를 가지는 배열
- 3차원 배열은 배열 요소로 2차원 배열의 참조를 가지는 배열
'
'
'
- n차원 배열은 배열 요소로 n-1차원 배열의 참조를 가지는 배열
즉, n차원 배열의 요소에 접근하기 위해서는 n개의 인덱스가 필요함

2차원 배열
- 배열의 각 요소가 또 다른 1차원 배열을 가리킴
- 행(row)과 열(column)의 구조 / 테이블 구조 / 좌표 평면 구조 등
- 2차원 배열의 각 요소 즉, 배열의 크기는 일정하지 않아됨
ex)
jagged[0] = new int[2]; // 첫 번째 행은 2칸
jagged[1] = new int[5]; // 두 번째 행은 5칸
jagged[2] = new int[1]; // 세 번째 행은 1칸
=> 상관없음
2차원 배열 선언
- 데이터타입[][] 배열이름
// 자바에서는 이게 국룰임!
- 데이터타입 배열이름 [][]
- 데이터타입[] 배열이름[]
2차원 배열 초기화
- 크기만 지정
new 데이터타입[1차원 배열 개수(행의 수)][1차원 배열 크기(열의 수)]
- 비정형 배열
new 데이터타입[1차원 배열 개수(행의 수)][]
- 값으로 초기화
2차원 배열 인덱스
- 인덱스를 이용하여 요소에 접근
- arr[행 인덱스][열 인덱스]

2차원 배열 메모리 구조

3차원 배열
3차원 배열 선언
3차원 배열 생성
- 배열이름 = new 데이터타입[크기1][크기2][크기3]
크기 1 : 3차원 배열의 크기
크기 2 : 2차원 배열의 크기
크기 3 : 1차원 배열의 크기
- 배열 이름 = new 데이터타입[크기1][][]
- 배열 이름 = new 데이터타입[][][]
한줄 요약 : 파이썬은 [] 면 되던데..