[Java의 정석]Chapter5.배열(04~05)

Hello_Wendy·2022년 4월 14일
0

자바의 정석

목록 보기
26/61
post-thumbnail

Chapter 5. 배열

04. 배열의 길이(배열이름.length)

  • 자바에서는 자바가상머신(JVM)이 모든 배열의 길이를 별도로 관리하며, '배열이름.length'를 통해 배열 길이에 대한 정보 얻음

    	int[] arr = new int[5]; //길이가 5인 int배열
    	int tmp = arr.length;   //arr.length의 값은 5, tmp에 5가 저장됨
  • 배열은 한번 생성하면 길이를 변경할 수 없기 때문에, 이미 생성된 배열의 길이는 변하지 않음

  • '배열이름.length'는 상수이며, 값을 읽을 수만 있을 뿐 변경불가

int[] score = new int[6];
for(int i=0; i<6; i++)
	System.out.println(score[i]);

*위 코드는 배열의 각 요소를 for문을 이용해서 출력, 배열score의 길이는 6, 인덱스 범위는 0~5임
아래와 같이 코드를 변경하여 배열의 길이를 줄이면 인덱스 유효범위는 0~4가 됨

int[] score = new int[5]; //배열의 길이를 6에서 5로 변경
for(int i=0; i<6; i++) //실수로 조건식을 변경하지 않음
	System.out.println(score[i]); //에러발생!!
  • 배열의 길이가 변경될 때 for문에 사용되는 조건의 범위도 변경 필수
  • 변경하지 않는다면 for문은 배열의 유효한 인덱스 범위인 0~4를 넘어 0부터 5까지 반복하기 때문에 5번째 반복에서 에러 발생
  • ArrayIndexOutOfBoundsException이라는 예외(배열의 index가 유효한 범위를 벗어났다는 에러)가 발생하여 비정상적으로 종료될 것

배열이름.length 사용

  • 배열의 길이를 직접 적어주는 것보다 '배열이름.length'를 사용하는 것이 편리
  • 위의 for문을 '배열이름.length'를 사용해서 변경한 예시
int[]score = new int[5]; //배열의 길이를 6에서 5로 변경
for(int i=0; i<score.length; i++) //조건식을 변경하지 않아도 됨
	System.out.println(score[i]);
*'배열이름.length'는 배열의 길이가 변경되면 자동적으로 변경된 배열의 길이를 값으로 갖기 때문에,
배열과 함께 사용되는 for문의 조건식을 일일이 변경하지 않아도 됨

05. 배열의 초기화

  • 배열은 생성과 동시에 자동적으로 기본값(0)으로 초기화되므로 배열을 사용하기 전에 따로 초기화 해주지 않아도 됨

  • 하지만, 원하는 값을 저장하려면 각 요소마다 값을 지정해줘야함

    	int[] score = new int[5] //길이가 5인 int형 배열을 생성
    	score[0] = 50;			 //각 요소에 직접 값을 저장
    	score[0] = 60;
    	score[0] = 70;
    	score[0] = 80;
    	score[0] = 90;
    
    	* 배열의 길이가 큰 경우 요소 하나하나에 값을 지정하기 보다 for문을 사용하는 것이 좋음
    
    	int[] score = new int[5]; //길이가 5인 int형 배열을 생성
    	for(int i=0; i<score.length; i++)
    		score[i] = i * 10 + 50;
  • for문으로 배열을 초기화하려면, 저장하려는 값에 일정한 규칙이 있어야만 가능

  • 따라서 자바에서 다음과 같이 배열을 간단히 초기화 할 수 있는 방법 제공

    	int[] score = new int[]{50, 60, 70, 80, 90}; //배열의 생성과 초기화를 동시에 함
  • 저장할 값들을 중괄호{}안에 쉼표로 구분해서 나열

  • 중괄호{}안의 값의 개수에 의해 배열의 길이가 자동으로 결정되기 때문에 대괄호[]안에 배열의 길이는 안적어도 됨

    	int[] score = new int[]{50, 60, 70, 80, 90};
    	int[] score = {50, 60, 70, 80, 90}; //new int[] 생략가능
  • 'new 타입[]'을 생략하여 코드를 더 간단히 할 수도 있음

  • 다만, 배열의 선언과 생성을 따로 하는 경우에는 생략불가

    	int[] score;
    	score = {50, 60, 70, 80, 90}; //에러.new int[]생략 불가
    	score = new int[]{50, 60, 70, 80, 90} //OK.
profile
안녕 나의 새로운 세상

0개의 댓글