본문 바로가기

자바/뇌를 자극하는 JAVA

배열의 선언, 생성, 이용

앞에서 배운 방법을 변수를 선언하면 그 변수에는 한개의 데이터만 저장할 수 있습니다. 그러면 10개의 데이터를 저장하기 위해서는 10개의 변수를 선언해야 할까요?


그래야 할 경우도 있겠지만 10개의 데이터 타입이 모두 같고, 사용하는 목적도 비슷하다면 모든 데이터를 한 곳에 저장해두고 하나의 변수를 가지고 사용할 수 있습니다. 

이절 에서 배울 배열이 바로 그런 식으로 사용할 수 있는 데이터 저장 장소입니다.


 10개의 다른 이름을 갖는 변수들

 이름

 a

b

 값

 7 

100  32 


10개의 데이터를 저장할 수 있는 배열

 이름

a

 값 

100  32 

 인덱스


뒤의 두 가지 표에서 다른점은 아래표는 각 값에 대하여 인덱스를 붙여 준다는 것입니다.

이해도 안되는 잡소리는 집어치우고 예부터 보죠.


  int arr[];                ->  배열 변수를 선언합니다.

  arr = new int[10]    ->   배열을 생성합니다. 0부터 10까지 인덱스가 붙은 변수들이 생성되었습니다.

  arr[0] = 10;            ->   인덱스0의 값을 초기화해줍니다.

  arr[1] = 20;            ->   인덱스1의 값을 초기화해줍니다.

  arr[2] = arr[0] + arr[1];        -> 인덱스2의 값을 초기화해줍니다.


아래는 기존의 변수 선언과 생성입니다.

  int num1, num2;

  num1 = 1;

  num2 = 2;


기존의 변수 선언과는 어떻게 다른지 대략 감이 오실겁니다.

중간에 배열을 생성하는 부분이 다르죠.


배열을 생성하는 이유

자바에서는 프리미티브 타입의 변수를 선언하면 그와 동시에 데이터를 저장할 수 있는 메모리가 확보됩니다.

그렇기 때문에 프리미티브 타입의 변수는 선언하고 나서 바로 값을 대입할 수 있습니다.

int num = 3;


하지만 배열 변수의 경우에는 선언을 해도 배열 항목을 위한 메모리가 확보되지 않습니다. 

그 대신에 단 하나의 값을 저장할 수 있는 메모리가 확보되는데, 그 메모리도 배열 항목을 위한 메모리는 아닙니다.

그렇기 때문에 배열항목의 메모리를 확보하는 일은 따로 해야 하는데, 그 일을 하는 것이 바로 배열의 생성식입니다.

그러면 배열 변수를 선언할 때 확보했던 메모리는 어디에 사용되는 걸까요? 그 메모리는 배열 생성식의 결과를 담는 데 사용됩니다.

int arr[] = new int [10];

arr[0] = 20;


일차원 배열의 선언,생성,이용

1차원 배열 변수 선언 2가지 형식

타입 식별자[];                 타입[] 식별자;

int arr[];                         int[] arr;

float num[];                    float[] num;

String strArr[];                String[] strArr;


1차원 배열 변수를 선언했다면 배열을 생성 해야겠죠?

배열 생성 식

new 타입[크기];

arr = new int[10];

num = new float[5];

strArr = new String[3];


이제 선언과 생성을 했으니 배열 항목에 있는 데이터를 사용할 수 있습니다.

1차원 배열의 항목을 가리키는 식

배열이름[인덱스];

arr[0] = 12;

num[3] = num[1] + sum[2];

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


배열의 인덱스는 0부터 시작하기 때문에 배열의 첫번째 항목의 인덱스는 0이고, 두 번째 항목의 인덱스는 1입니다. 

10의 인덱스를 사용했다면( arr = new int[10]; ) 인덱스 가능번호는 0~9까지 입니다.


다차원 배열의 선언,생성,이용

자바에서는 2차원 이상의 다차원 배열도 지원합니다.

2차원 배열 변수 선언문 2가지 기본 형식

타입 식별자[][];                 타입[][] 식별자;

int arr[][];                         int[][] arr;

float num[][];                     float[][] num;

String strArr[][];                 String[][] strArr;


int[] arr[]; 이런식도 가능하지만 혼란스러우므로 바람직하지 않습니다.


2차원 배열 변수를 선언했으니 배열을 생성합니다.

2차원 배열을 생성하는 식

new 타입[크기1][크기2]

arr = new int[10][10];

num = new float[5][2];

strArr = new String[3][15];


이런 방식을 사용하면 3차원 배열이나 그 이상의 배열도 사용 할 수 있습니다.


배열의 선언과 초기화를 한꺼번에 하는 방법

많은 경우에 배열 변수를 선언하고 나서 바로 다음에 해야 할 일은 배열을 생성하고 항목을 초기화하는 것입니다. 아래와 같이 말이죠.

int arr[];

arr = new int[10];

arr[0] = 10;

arr[1] = 20;

arr[2] = 30;

그런데 배열 변수 선언문에서는 배열 생성식과 결과를 바로 대입 할 수 있기 때문에, 위에 있는 첫번쨰와 두번쨰 명령문은 다음과 같은 하나의 명령문으로 대체할 수 있습니다.

int arr[] = new int[10];

이보다 더 간단하게 위에 있는 모든 명령문들을 하나의 명령문으로 만들 수 있는 방법이 있습니다. 다음과 같이 배열 항목의 초기값들을 중괄호로 묶어서 배열 변수에 대입하는 것입니다. 이렇게 하면 초기값의 수와 동일한 크기의 배열이 생성되고, 그배열의 항목들이 해당 값으로 초기화되기 때문입니다.

int arr[] = { 10, 20, 30 }

2차원 배열의 경우에도 이런 선언문을 사용할 수 있습니다. 하지만 그럴 때는 중괄호 안에 중괄호를 써서 차원을 표시해야 합니다. 다음은 그런 예를 보여주는 프로그램입니다.


class ArrayExample

 public static void main(String args[]) {

  int table[][] = { { 1, 2, 3, 4 },

 { 5, 6, 7, 8 },

 { 9, 10, 11, 12 } };

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

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

  Systme.out.println(table[2][3]);

 }

}


실행결과

1

6

12


배열의 항목 수를 알아내는 방법

 작은 규모의 프로그램에서는 배열의 크기를 눈으로 보고 바로 알 수 있지만, 복잡한 로직을 갖는 프로그램에선느 그럴 수 없는 경우도 있습니다. 그럴 때는 배열의 이름 뒤에 ".length"를 붙여서 만든 식을 가지고 배열의 크기를 알아내야 합니다. 다음은 그런 식의 사용 예를 보여주는 프로그램입니다.


 class ArrayExample5

  public static void main (String args[]) {

   int arr[] = { 21, 2, 4, 3, 4, 65, 7, 178, 3, 5, 45, 78, 2, 0, 32, 75, 92 };

   Systme.out.println(arr.length);

  }

}


실행결과

17


배열의 갯수가 출력됩니다.

'자바 > 뇌를 자극하는 JAVA' 카테고리의 다른 글

switch 조건문  (0) 2013.04.28
if 조건문  (0) 2013.04.28
여러 가지 대입문  (0) 2013.04.28
로컬 변수의 선언과 이용  (0) 2013.04.27
자바의 기초  (0) 2013.04.26