euncoding-240213 2024. 4. 11. 21:01

[ 배열이란 ] 

배열(array)은 인덱스(index)와 인덱스에 대응하는 일련의 데이터들로 이루어진 연속적인 자료 구조로서, 배열에는 같은 종류의 데이터들이 순차적으로 저장된다.

 

[ 배열 선언 및 생성 ] 

자바에서 배열을 생성하는 방법은 C/C++와 달리 레퍼런스 변수 선언과 배열 생성의 두가지 단계가 필요하며, 5개의 정수 배열을 만드는 과정을 보자.

1) 배열에 대한 레퍼런스 변수 선언 

int intArray[]; // 배열에대한 레퍼런스 변수 intArray를 선언한다. 초기화가 되지 않았으므로 사용할 수 없다.

intArray변수는 레퍼런스라고 불리는 배열의 주소 값을 가지며 이 자체가 배열은 아니다. 이 선언문으로 아직 배열이 생성되지 않았으므로 intArray 변수 값은 null이다. 배열에 대한 레퍼런스 변수는 다음 두가지 방법으로 선언할 수 있다.

int intArray[]; 혹은 int [] intArray; >> 선언시 []안에 배열의 크기를 지정하면 안된다. ( int intArray[5]; // 오류 )

2) 배열 생성

배열생성은 배열 공간을 할당받는 과정이다. 반드시 new 연산자를 이용하여 배열을 생성하며 [ ] 안에 생성할 원소 개수를 지정한다. 다음 코드는 5개의 정수 공간을 할당받아 배열을 생성하고, 생성된 배열에 대한 레퍼런스를 intArray에 대입한다.

intArray = new int[5]; >> 이제 intArray를 배열로 사용할 수 있다. 배열은 선언과 생성을 동시에 할 수도 있다.

int intArray = new int[5];

3) 배열 초기화

배열 선언문에서 { }안에 원소를 나열하여 초기화 된 배열을 만들 수 있다.

int intArray={3,5,7,9,11}; > 자동으로 배열의 크기가 5가된다. 배열의 크기는 { } 사이에 나열된 값의 개수로 정한다.

 

[ 배열 인덱스와 배열 원소 접근 ]

배열의 인덱스는 정수만 가능하다. 인덱스는 0부터 시작하며 마지막 원소의 인덱스는 (배열크기-1)이다. 배열의 원소는 레퍼런스변수와 [] 사이에 원소의 인덱스를 적어서 접근한다.

int intArray = new int[5];

intArray[0] = 5;

intArray[3] = 6;

int n = intArray[3] // 3번인덱스의 값을 읽어서 n에 저장한다. n=6

 

음수 인덱스로 접근하거나 배열의 범위를 넘어서면 오류가 난다.

int n = intArray[-2]; // 인덱스로 음수는 사용 불가능 

int m = intArray[6]; // 인덱스의 범위는 0~4이므로 오류

 

배열이 생성되지 않은 상태에서 배열을 사용해도 오류가 난다.

int intArray[]; // 레퍼런스만 선언

intArray[1] = 8; // 배열이 생성되지 않음

 

[ 레퍼런스 치환과 배열 공유 ]

자바에서는 배열 공간과 레퍼런스 변수가 분리되어 있기 때문에 생성된 배열에 대한 공유가 쉽게 이루어진다. 즉 생성된 배열을 다수의 레퍼런스가 참조할 수 있다.

int intArray[] = new int[5];

int myArray[] = intArray; // 레퍼런스 치환. myArray는 intArray와 동일한 배열 참조

이 레퍼런스의 치환은 intArray배열을 복사하여 새로운 배열을 만들어 myArray 배열을 생성하는 것이 아니다. 레퍼런스만 복사되므로 myArray는 intArray의 레퍼런스값을 가지게 되면서 myArray는 intArray의 배열을 공유하게 된다. myArray로 intArray의 배열 원소를 마음대로 접근할 수 있다.

 

배열 선언 및 생성 예시 : 5개의 양수를 입력받고 제일 큰 수 출력하기

 

[ 배열의 크기, length 필드]

자바는 배열을 객체로 다룬다. 배열이 생성되면 배열공간과 함께 배열의 크기 값을 가진 length필드가 배열 객체 내에 생성된다. 배열의 크기는 length필드를 이용해서 간단히 알아낼 수 있다.

int intArray[] = new int[5];

int size = intArray.length; // size = 5

length필드를 이용하면 프로그램에서 배열의 크기를 따로 관리할 필요가 없다. length 필드를 이용하여 배열의 모든값을 출력하는 코드는 for( int i = 0; i <intArray.length ; i++) System.out.println(intArray[i]);

배열의 length필드 활용 : 5개의 정수 입력받아서 평균구하기

 

[ 배열과 for-each문 ]

for문을 변형한 for-each문은 배열이나 나열의 크기만큼 루프를 돌면서, 각 원소를 순차적으로 접근하는데 매우 유용하다.

for( 변수 : 배열레퍼런스 ) { ... 작업문 .... }

 

for-each문 예제 : int[]배열의 합 구하고, String[] 배열의 문자열 출력해보기