같은 자료형의 데이터를 연속된 정해진 메모리 공간에 저장하는 자료구조
char[5]:
[ 2byte ][ 2byte ][ 2byte ][ 2byte ][ 2byte ] (총 10byte)
int[5]:
[ 4byte ][ 4byte ][ 4byte ][ 4byte ][ 4byte ] (총 20byte)
배열에는 숫자만, 문자만, 객체만 등 한 가지 타입의 데이터만 넣을 수 있다는 뜻.
ex) 정수 배열 → 오로지 정수만,
문자 배열 → 오로지 문자만
컴퓨터의 메모리는 연속된 칸.
배열은 여러 칸을 한 줄로 붙여 예약하고,
각 칸에 주소를 부여하고,
각 주소에 데이터를 차례차례 넣는 구조.
int[] arr = new int[5]; // 정수 5개짜리 배열
[ 0 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ]
| | | | |
arr[0] arr[1] arr[2] arr[3] arr[4]
메모리를 연속적으로 사용할 수 없는 구조거나 정의가 잘 되어있지 않은 내용이라면,
배열을 사용할 수 없을 수 있음.
데이터의 순서를 나타내는 index 개념이 존재
int[] arr = new int[5]; // 공간 생성
System.out.printIn(Arrays.toString(arr));
를 출력할 경우
[0, 0, 0, 0, 0]
으로 출력됨
자바의 배열은 생성되는 순간,
각 자료형의 기본값으로 "자동" 초기화됨
int → 0
char → '\u0000' (널문자)
double → 0.0
boolean → false
참조형(객체) → null
int[] arr2 = {10, 30, 20};
// java는 중괄호 내용을 지가 알아서 확인하기에
// 사이즈 3짜리 배열임을 인식함
System.out.PrintIn(Arrays.toString(arr2));
정확하게 내가 입력한 사이즈대로 출력하기에 직관적.

...이라곤 하지만,
당연히 숫자 세 개 넣었으니 세 개짜리 배열이 나오길 바라게 된다.
직관적으로 느껴지지는 않고 컴퓨터와의 의사소통에서 언어의 벽을 느낀다.
int[] arr3 = new int[5];
// 크기가 5인 int형 배열 arr3을 생성 (각 칸은 0으로 초기화됨)
// [0][0][0][0][0] ← 5칸짜리 정수 배열
Random rand = new Random();
// 난수(랜덤 숫자)를 생성해주는 Random 객체를 만듦
for (int index = 0;index < arr3.length;index++) {
// index 변수를 0부터 arr3의 길이(5)보다 작을 때까지 1씩 증가시키면서 반복
// 즉, index: 0, 1, 2, 3, 4 → 배열의 모든 칸에 접근
arr[index] = rand.nextInt(10);
// 0~9 사이의 무작위 정수를 만들어서
// arr3[index]에 저장
// (각 칸에 랜덤 숫자를 할당)
}
반복문 없이 배열 전체를 한 값(10)으로 빠르게 채우고, 출력하는 코드
int[] arr4 = new int[5];
Arrays.fill(arr4, 10);
System.out.PrintIn(Arrays.toString(arr4));
https://docs.oracle.com/en/javase/21/docs/api/index.html
IntStream, LongStream, DoubleStream...int[] arr5 = IntStream.range(0, 5).toArray();
// 이 Integer에 정리되어있는 범위 중에서
// Integer의 값을 배열로 만들어 준다
System.out.PrintIn(Arrays.toString(arr5));
출력할 경우
[0, 1, 2, 3, 4]
