Java

[자바] 배열(array)

lala9663 2022. 9. 26. 21:09

배열이란?


  • 동일한 자료형의 순차적 자료 구조
  • 인덱스 연산자[]를 이용하여 빠른 참조가 가능
  • 물리적 위치와 논리적 위치가 동일
  • 배열의 순서는 0부터 시작
  • 자바에서는 객체 배열을 구현한 ArrayList를 많이 활용함

배열 선언과 초기화


  • 배열 선언하기

  • int[] arr1 = new int[10]; int arr2[] = new int[10];
  • 배열 초기화 하기

배열은 선언과 동시에 자료형에 따라 초기화 됨 (정수는 0, 실수는 0.0, 객체는 null)
필요에 따라 초기값을 지정할 수 있음

int\[\] numbers = new int\[\] {10, 20, 30}; //개수 생략해야 함

int\[\] numbers = {10, 20, 30}; // new int\[\] 생략 가능

int\[\] ids;  
ids = new int\[\] {10, 20, 30}; // 선언후 배열을 생성하는 경우는 new int\[\] 생략할 수 없음

1부터 10까지의 숫자들 중홀수들의 집합은 다음과 같이 int 배열로 표현 할 수 있다.


int\[\] odds = {1, 3, 5, 7, 9};

배열은 자료형 타입 바로 옆에 [] 기호를 사용하여 표현한다. 위 예제와 같이 int자료형의 배열은 int[]로 효현할 수있다.


String\[\] weeks = {"월", "화", "수", "목", "금", "토", "일"};

즉, 배열이란 자료형의 종류가 아닌 자료형의 집합을 의미한다.

※ 위에서 알아본 배열은 모두 1차원 배열이다. 2차원, 3차원 등의 다차원 배열도 가능한데 2차원 이상의 배열은 잘 사용하지 않는다.

배열의 길이는 고정되어 있다.


위에서 살펴본 요일의 집합 예제는 다음과 같이 고쳐 쓸 수 있다.


String\[\] weeks = new String\[7\];  
weeks\[0\] = "월";  
weeks\[1\] = "화";  
weeks\[2\] = "수";  
weeks\[3\] = "목";  
weeks\[4\] = "금";  
weeks\[5\] = "토";  
weeks\[6\] = "일";

배열의 길이를 먼저 설정하여 배열 변수를 먼저 생성한 다음 그 값은 나중에 대입하는 방법이다. 단, 위 예처럼 초기값 없이 배열 변수를 만들때에는 반드시 길이에 대한 숫자값이 필요하다. 즉, 다음과 같은 코드는 불가능하다.


String\[\] weeks = new String\[\]; // 길이에 대한 숫자값이 없으므로 컴파일 오류가 발생한다.

배열의 값은 어떻게 접근 할 수 있을까?


위에서 만든 요일의 배열중 "목"에 해당되는 값을 얻으려면 다음과 같이 인덱싱을 이용해야 한다.

String\[\] weeks = {"월", "화", "수", "목", "금", "토", "일"};  
System.out.println(weeks\[3\]);

0부터 세기 때문에 weeks[3]은 weeks 배열의 네번째 항목을 의미한다.

배열의 길이


배열은 보통 for문과 함께 사용된다. for문에 배열이 사용될 경우 배열의 길이만큼 for문을 돌리는 것이 중요한데 배열의 길이는 다음과 같이 length를 이용하여 구한다.

배열 변수.lenght;

length필드는 읽기 전용 필드이기 때문에 값을 바꿀 수 없다.

String\[\] weeks = {"월", "화", "수", "목", "금", "토", "일"};  
for (int i=0; i<weeks.length; i++) {  
System.out.println(weeks\[i\]);  
}

자주 발생하는 오류


배열을 이용하면서 자주 발생하는 코드가 있다.

ArrayIndexOutOfBoundsException

이 오류는 배열의 길이가 n까지 인데 그 다음값 n+1을 얻으려고 시도할때 발생하는 오류이다.