[0630] 배열 이론

ㅇㅇㅈ·2025년 6월 30일

배열(Array)

같은 자료형의 데이터연속된 정해진 메모리 공간에 저장하는 자료구조

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 개념이 존재

  • 0-base
  • 고정된 위치
  • 바로 접근할 수 있도록 함
  • 유효한 범위가 아닐 경우 오류 발생

 

 


초기화

1. 기본적인 초기화

  • 배열의 크기가 고정됨
  • 데이터마다 기본 값이 존재함
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

 

 

2. 선언과 초기화 설정을 바로 하기

  • 값을 직접적으로 지정하기
int[] arr2 = {10, 30, 20};
// java는 중괄호 내용을 지가 알아서 확인하기에
// 사이즈 3짜리 배열임을 인식함

System.out.PrintIn(Arrays.toString(arr2));

정확하게 내가 입력한 사이즈대로 출력하기에 직관적.

...이라곤 하지만,
당연히 숫자 세 개 넣었으니 세 개짜리 배열이 나오길 바라게 된다.
직관적으로 느껴지지는 않고 컴퓨터와의 의사소통에서 언어의 벽을 느낀다.

 

 

3. 반복문을 사용한 초기화

  • 가장 빈번하게 사용하는 초기화 방법
  • 1번의 크기 지정 이후 낱개로 값을 배정
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]에 저장
    // (각 칸에 랜덤 숫자를 할당)
}

 

 

4. 배열을 특정한 값으로 일괄 초기화

반복문 없이 배열 전체를 한 값(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

 

 

5. Stream을 활용한 초기화

  • Stream을 사용한 초기화
  • IntStream, LongStream, DoubleStream...
int[] arr5 = IntStream.range(0, 5).toArray();
// 이 Integer에 정리되어있는 범위 중에서
// Integer의 값을 배열로 만들어 준다
System.out.PrintIn(Arrays.toString(arr5));

출력할 경우

[0, 1, 2, 3, 4]

0개의 댓글