프로그래밍 언어/자바의 정석 기초편

자바의 정석 기초편 ch5-4,5 배열의 길이, 배열의 초기화

life grow 2022. 6. 1. 22:50

5-4 배열의 길이

배열이름.length - 배열의 길이(int형 상수)

int[] arr = new int[5];

int  tmp =  arr.length;

배열은 한번 생성하면 그 길이를 바꿀 수 없다.(실행동안)

 

1. 왜 배열의 크기를 못바꿀까?

메모리 공간이 있다.

int배열 5이니까 4byte X 5 20byte의 메모리 공간이 필요하다.

배열은 연속적이니까 20byte가 연속적인 곳을 찾아야 한다.

근데 공간이 더 필요해서 int[10]으로 늘리면

연속으로 40byte가 필요하다.

이때 처음에 쓰던 20byte 뒤에 20byte가 비었다는 보장이 없다.

 

그래서 배열의 크기를 못늘리게하고 필요하면 다른 곳으로 옮기는 식으로 한다.

공간을 늘릴 수 없어 새로운 공간을 만들고

기존에 배열의 내용을 복사한다.

 

for(int i=0; i<sore.length;i++)로 하는 이유는

만약 new int[6]을 new int[5]로 바꾼다면

int i=0;i<5로 바꿔줘야하는데 까먹기가 쉽다.

그래서 배열이름.length를 써준다.

 

만약 new int[9]로 바꾸고 for문에서는 i를 9까지 안바꿔줬다면

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 9 out of bounds for length 9
at lnterfaceEx.main(lnterfaceEx.java:9)

인덱스의 범위를 벗어났다는 오류가 생길 수 있다.

 

5-5 배열의 초기화

 

배열의 초기화: 배열의 각 요소에 처음으로 값을 저장하는 것

배열을 만든 이유는 값을 저장하기 위해서

배열은 기본적으로 자동 초기화된다.

int는 0으로 자동 초기화된다.

 

배열이 초기화가 안되는건 말이 안됨

그럼 하나씩 다 값을 넣어줘야된다.

 

배열은 중괄호를 이용해서 초기화하는 방법이 있다.

int[] score = new int[]{ 50, 60, 70, 80, 90}; 

int[] score = { 50, 60, 70, 80, 90}; //new int[]를 생략가능

 

위에 식을 두 문장으로 쓰면 에러남

int[] score;

score = { 50, 60, 70, 80, 90};

이렇게 써야 할 때도 있다.(1%정도)

그럴때는 score = new int[] { 50, 60, 70, 80, 90};