본문 바로가기

백엔드 개발자 기록 일람/java 학습 기록

07. Java 배열

연휴가 끝났다. 모두 새해복 많이 받으시길.

 

  배열(array)은 여러 개의 변수를 하나로 묶어 넣은 것이다. 배열을 사용하면 같은 종류의 대량의 데이터를 한 번에 선언할 수  있다. 대열의 요소들은 인덱스(index)라 불리는 번호가 붙어 있고 이 번호를 통하여 배열 요소에 접근 할 수 있다. 예를 들어서  a가 정수 배열이라면 a[i]는 배열 안에 있는 i번째 정수이다.

 

배열의 선언과 사용

자바에서  배열은 객체(object)다.객체란 이름(name)과 값(value)으로 구성된 프로퍼티(property)의 정렬되지 않은 집합을 말한다. 프로퍼티의 값으로 함수가 올 수도 있는데, 이러한 프로퍼티를 메소드(method)라고 한다. 이부분은 다음에 더 알아보고 지금은 저기까지만 하고 넘어가서 배열의 선언과 사용하는 법에 대해 알아보자.

 

1 먼저 배열의 참조 변수부터 다음과 같이 선언한다. 정수형 배열을 만든다면 배열 참조 변수는 int[] 타입으로 선언하면 된다.

2. 배열 참조 변수를 선언했다고 해서 배열이 완전히 만들어 진건 아니다. 변수만 정해졌을 뿐. 실제 배열은 new 연산자를 사용하여서  생성하여야 한다.대관호 안의 숫자가 배열의 크기이다. 이 문자이 실행되면 10개의 요소를 가지는 배열이 생성되고. 이  배열이 s를 의미하게 된다.

그리고 배열을 생성할 때 배열의 크기를 변수로 두어도 된다. 자바에서는 배열의 크기는 반드시 상수일 필요가 없다.

 

배열의 초기값 기본적으로 정수형이면 모든 요소들이 0으로. boolean배열은 false로 초기화 된다. 문자형 배열은 null로  초기화 된다.

 

 

반복문과 배열

 

  배열의 각각의 요소는 인덱스 라는 번호로 접근할 수 있다. 예를 들어서  배열 a의 첫 번째 요소는 a[0]이 된다. 배열이 생성되면반복 루프를 이용하여 배열 요소에 값들을 채울 수 있다. 크기가 14인 정수형 배열을 생성하고, 여기에 0부터 13까지의 값으로 배열을 채우는 프로그램을 적어보자.

배열이 편리한 이유는 반복 구조를 이용하여 배열 요소에 차례로 접근할 수 있기 떄문이다. 배열을 이용하면 관련된 데이터를 차례로 접극하여 쉽게 처리할 수 있다. 만약 관련된 데이터들이 서로 다른 이름의 변수에 저장되어 있다면 이들 이름을 일일이 기억해야 할 것이다. 배열은 한번 생성되면 크기를 변경할  수 없다. 만약 실행 도중에 배열의 크기를 변경해야 한다면 ArrayList나 Vector 클래스를 사용해야 한다. 저 부분은 나중에 설명하기로 하자.

 

배열의 크기

자바에서는 배열이 객체이기 떄문에 배열의 크기도 손쉽게 알 수 있다. 배열 이름이 d라면 d.lenght가 배열의 크기가 된다.

 

배열의 초기화

배열을  선언과 동시에 초기화 하려면 배열을 선언한 다음에 중괄호를 사용하여 배열 요소의 초기값을 적어 넣는다. 이때에는 연산자 new를 사용하지 않아도 배열이 생성된다. 또 배열의 크기를 지정할 필요도 없다. 이 방법은 배열에 저장되는 수를 미리 알고 있는 경우에 사용된다.

 

for-each 루프

JDK 1.5 버전부터 배열에 대하여 다음과 같은 형식의 for-each 루프라고 불리는 향상된  루프를 사용할 수  있다. for-each루프에서는 아주 쉽게 배열의 각 요소를 순차적으로 접근할 수 있다.

배열의 list의 각 요소가 변수 e로 차례대로 대입되면서 반복된다.

반복이 진행되면서 변수 e 에는 list 배열의 첫번째 요소부터 마지막 배열 요소까지 차례대로 대입된다. 이 for-each 루프는 사실 for문을 루프와 똑같은 효과를 낸다.

for-each루프의 경우 그냥 for문 보다 사용하기는 쉽다. for-each루프에서는 배열의 크기에 신경쓰지 않아도 되고, 인덱스 값을 저장하는 변수를 생성할 필요도 없으며, 사용법이 간결하여 오류가 발생할 가능성이 적다. 따라서 배열에서 요소를 하나씩 꺼내어 처리하는 경우라면 for-each루프를 사용하는 편이 좋다.

하지만 경우에 따라서 for-each루프를 사용할 수 없는 경우도 있다. 가장 대표적인 경우가 배열 요소의 값을 변경하는 경우이다. 또는 역순으로 배열 요소를  처리하는 경우, 전체가 아니고 일부 요소만 처리하는 경우, 하나의 반복 루프에서 두개 이상의 배열을  처리하는 경우에는 for-each루프가 부적합하다. 이럴경우에는 통상 for문을 이용하여야 한다.