프로그래밍 입문

배열

토픽 프로그래밍 입문 > Java 언어 > Java 기본 과정

배열의 개념

배열은 연관된 데이터를 모아서 관리하기 위해서 사용하는 데이터 타입이다. 변수가 하나의 데이터를 저장하기 위한 것이라면 배열은 여러 개의 데이터를 저장하기 위한 것이라고 할 수 있다.

 

배열의 생성

String[] classGroup = { "최진혁", "최유빈", "한이람", "이고잉" };

String[] classGroup에서 classGroup은 배열이 담길 변수의 이름이다. String[] classGroup에 담을 배열에 담길 데이터의 타입이 문자열의 배열이라는 의미다. 배열을 선언할 때는 데이터 타입 뒤에 []를 붙여야 한다. []가 없다면 classGroup는 배열이 아니라 문자열 데이터 타입을 갖는 변수가 된다

배열의 첫 번째 역할은 연관된 데이터를 저장하는 것이다. 저장했으면 저장한 것을 꺼내오는 이슈가 생긴다.  

System.out.println(classGroup[0]);

System.out.println(classGroup[1]);

System.out.println(classGroup[2]);

System.out.println(classGroup[3]);

 

classGroup[0] 처럼 배열이 담겨있는 변수의 이름 뒤에 대괄호를 붙이고 그 안에 0부터 시작하는 숫자를 입력하면 순차적으로 값을 가져올 수 있다.

다음 예제는 배열을 정의하는 다른 방법과 배열에 담겨 있는 값의 수를 알아내는 방법을 보여준다.   

String[] classGroup = new String[4];

classGroup[0] = "최진혁";

System.out.println(classGroup.length);

classGroup[1] = "최유빈";

System.out.println(classGroup.length);

classGroup[2] = "한이람";

System.out.println(classGroup.length);

// 값을 지정하지 않은 배열의 값은? 

System.out.println(classGroup[3]);

 

.length는 배열에 실제 담긴 데이터의 숫자를 의미하는 것이 아니라 배열을 처음 생성할 때 지정한 배열의 크기를 의미한다는 점을 주의하자.

지금까지 알아본 배열의 개념을 정리해보자.

위와 같이 배열에 담긴 각각의 데이터를 원소(element)라고 한다. classGroup[1]은 최유빈이다. 여기서 숫자 1은 원소 최유빈을 식별하는 식별자이다. 이러한 식별자를 인덱스라고 부른다.이 배열이 담을 수 있는 원소의 개수를 length라고 한다.  

 

반복문에서 배열의 사용

String[] members = { "최진혁", "최유빈", "한이람" };

for (int i = 0; i < members.length; i++) {

    String member = members[i];

    System.out.println(member + " 상담을 받았습니다");

}

위의 예제에서 주목해야 할 것은 반복문과 배열을 결합한 부분이다. 반복문을 이용해서 배열 members의 내용을 하나씩 꺼낸 후에 상담 결과를 화면에 출력하고 있다. 배열이란 연관된 정보를 하나의 그룹으로 관리하기 위해서 사용하는데 그 정보를 처리 할 때는 반복문을 주로 이용한다.  

for-each

배열의 내용을 탐색할 때 for 문을 좀 더 간편하게 사용할 수 있는 방법이 있다.  

 

for (String member : members) {

    System.out.println(member + " 상담을 받았습니다");

}

위의 예제는 이전 예제와 정확하게 동일하게 동작한다. 하지만 문법적으로는 간결해졌다

 

오류

배열을 사용할 때 흔히 발생하는 오류를 살펴보자.

1

2

String[] members = { "최진혁", "최유빈", "한이람" };

System.out.println(members[3]);

1

2

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3

at ot_array.ExceptionDemo.main(ExceptionDemo.java:7)

우리가 아직 예외를 배우지는 않았기 때문에 위의 내용은 그냥 오류라고만 언급하겠다.

ArrayIndexOutOfBoundsException은 존재하지 않는 인덱스를 사용하려고 했을 때 발생한다. 배열 members는 인덱스가 2까지 존재하는데 3을 사용했기 때문에 발생한 오류이다. 비유하자면 교실에 50명의 학생이 있는데 51번 학생을 호명한 셈이다.   

 

배열의 한계

배열은 초기화할 때 그 크기가 정해진다. 그래서 정해진 크기 이상의 값을 넣을 수 없다

이러한 한계는 c와 같은 언어에 익숙한 사람에게는 당연한 것이지만, JavaScript Python, PHP와 같은 언어에 익숙한 사람에게는 의아할 것이다. 후자의 언어들은 배열의 크기를 미리 정의하고 사용하지 않는다. 물론 방법이 있다. 자바에는 컬렉션 Collection이라는 기능이 있어 유연하게 배열을 사용할 수 있다. 컬렉션은 매우 중요한 주제이지만 지금 단계에서는 이것을 이해하기 위한 부품이 부족하다.  

 

댓글

댓글 본문