배열이란?

배열(array)은 인덱스(index)와 인덱스에 대응하는 데이터들로 이루어진 자료구조

배열을 사용하는 큰 이유 중 하나는 반복문의 활용에 있다.

배열의 선언 및 생성

자바의 배열생성에는 두가지 단계가 필요하다.

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

(2) 배열 생성

배열 공간을 가르키기 위한 레퍼런스 변수 선언하는 단계(1)과 배열 공간을 할당하는 단계(2)로 구분된다.

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

int intArray []; // 순서대로 배열타입- 배열에 대한 레퍼런스 변수 - 배열선언

(2) 배열 생성

intArray = new int [5]; //배열에 대한 레퍼런스변수- 배열생성 - 타입 - 원소 개수

위 과정을 그림으로 나타내면

그림[4-1]

그림[4-1]과 같이 나타난다.

여기서 래퍼런스 변수는 intArray를 나타낸다. 레퍼런스 변수를 설명하기 위해선 인스턴스(instance)의 정의가 필요하다.

클래스를 사용하기 위해서는 반드시 메모리에 생성해 주어야 한다. 이렇게 메모리상에 생성된 클래스를 객체 혹은 인스턴스라고 부른다. 레퍼런스 변수메모리상에 생성된 인스턴스를 카리키는데 사용되는 변수이다. 위 그림에서 점으로 표현된 부분이 인스턴스이고 intArray가 해당 인스턴스를 가르키는 레퍼런스 변수인것이다. 모든 인스턴스는 레퍼런스 변수만을 통해서 사용이 가능하며, 일반적인 데이터를 넣어두는 변수가 아니고 인스턴스를 가르키는 값이다. 또한 레퍼런스 변수 . 을 이용해 인스턴스의 맴버 변수나 메소드를 사용할 수 있다.

배열참조

배열의 선언과 생성은 별개이다. 그러므로 한개의 배열을 다수의 레퍼런스가 참조할 수 있다.

 

그림[4-2]

그림[4-2]와 같이 각각 다른 레퍼런스 변수인 intArray와 myArray가 하나의 배열을 참조했다. 각각 배열의 인덱스를 참조할 수 있으며 변경시에 나중에 기록된것으로 바뀐다.

배열 원소 접근

배열의 원소에 대한 접근은 배열 레퍼런스 변수인덱스를 이용한다.

원소에 대한 인덱스는 0부터 시작한다.

int arr[] = new int[3];
arr[0] = 51;
arr[2] = 24;
int n = arr[2]; // 라고 했을때 n 의 출력 값은 24가 된다.

배열의 인덱스(index)는 정수만 가능하며 정수형 상수도 사용할 수 있다. 인덱스는 0부터 시작하며 마지막 원소의 인덱스는 (배열의 크기 -1)이 된다. 자바에서는 배열도 하나의 객체 처럼 다루어진다. 따라서 .length() 를 이용해 배열의 길이를 알고자 할때 사용한다.

int arr[];
arr = new int[31];

int arrSize = arr.length; // arrSize의 출력값은 31

for- each 문

for문을 변형해 배열이나 나열의 각 원소를 순차적으로 접근하기 편한 반복문이다. 반복 횟수는 지정한 배열의 인덱스 만큼이다.

String name[] = {"a","s","d","f","q"};
for(String s : name){
	System.out.printf(s);
}
//결과 값은 asdfq 총 for-each문은 5번 반복했다.

2차원 배열

2차원 배열은 1차원 배열을 겹쳐놓은 모양으로 선언은 다음과 같다

int arr1[][];
float arr2[][];

1차원 배열과 마찬가지로 레퍼런스 변수 선언 후 배열을 생성해야 한다.

arr1 = new int[4][2];
arr2 = new float[6][3];

메소드에서 배열 리턴

메소드에서 배열을 리턴할 수 있다. 이 경우 실제 배열에 대한 레퍼런스가 리턴된다. 메소드가 리턴하는 배열 타입과 배열의 차원은 리턴받는 배열 레퍼런스 변수의 타입과 배열의 차원에 일치해야 한다. 메소드 선언 시 배열의 크기는 매번 다를 수 있으므로 배열의 크기는 정하지 않는다.

int[] makeArr(){
    int temp[] = new int[4];
    return temp;
}

+ Recent posts