본문 바로가기

JAVA

[JAVA] 배열 (Array) (자바 독학하기15)

반응형

배열은 자료형이 같은 둘 이상의 값을 저장할 수 있는 메모리 공간이다. 그리고 이는 구조에 따라서 1차원 배열과 다차원 배열로 나뉜다.

 

1. 1차원 배열

 

1차원 배열은 타입이 같은 둘 이상의 데이터를 저장할 수 있는 1차원 구조의 메모리 공간 이라고 정의한다.

그리고 자바는 배열도 인스턴스로 처리한다.

int[] a = new int[4];

위와 같이 참조변수 선언 과 배열 인스턴스의 생성이 이루어 짐을 알 수 있다.

위 코드는 일차원 배열의 사용을 볼수 있으며, 인스턴스 변수 length 를 이용해 배열의 길이를 체크하여 인스턴스 사용을 보였다.

위의 코드는 인스턴스를 저장할 수 있는 배열의 생성이 가능함을 보여주는 책에서의 예제이다.

이는 Box 클래스의 인스턴스 5개를 저장할 수 있는 배열이 생성됨을 볼 수 있다.

 

배열에 자신이 원하는 값을 저장하는 방법은 다음과 같다.

위의 코드와 같이 인스턴스의 배열 번호를 적고 값을 대입하면 해당 배열에 값이 저장됨을 알 수 있다.

 

배열을 생성과 동시에 초기화 시키는 방법은 다음과 같다.

int[] a = new int[] {1,2,3};

1,2,3 을 통해 배열의 길이를 파악할 수 있으므로 괄호 안의 숫자는 사라진다. 여기에 값을 넣으면 에러가 발생한다.

위의 문장은 한번더 줄여서 표현할 수 있다.

int[] a = {1,2,3};

 

다음 아래의 두 문장은 동일한 의미로 사용된다.

int[] a = new int[3];

int a[] = new int[3];

 

int 형의 배열은 생성과 함께 모든 요소가 0으로 초기화 되며, string 형은 null 로 초기화 된다.

다음 메소드는 원하는 값으로 초기화 하는 법을 보여준다.

위 코드와 같이 arrays.fill 메소드를 이용해 원하는 값으로 인스턴스의 배열을 채울 수 있다.

또한 system.arraycopy 를 통해 특정 배열에서 다른 배열로 일정 구간을 복사하여 붙여 넣을 수도 있다.

위 코드에서는 system.arraycopy 를 통해 3번부터 5개의 배열에 복사한다는 의미이다.

 

 

2. enhanced for 문

 

enhanced for 문은 특정 조건에 해당하는 값을 증가시키거나 특정 조건으로 값을 증가시키는 등의 상황에서 사용하기 유용하며 for-each 문이라고도 불린다.

이는 자바 5 에서 추가되었다.

 

int[] a = {1,2,3,4,5};

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

    system.out.println(a[i]);

}

라는 a의 모든 배열을 출력하는 for문을 enhanced for 문을 이용하면 아래와 같이 쉽게 표현된다.

for(int e : a){

    system.out.println(e);

}

 

enhanced for 문 코드의 양이 상당 수 줄어들고 배열의 길이 정보를 확인 및 입력할 필요가 없어지는 장점이 있다.

for(요소 : 배열){

    반복할 문장

}

위와 같이 기본 구성을 정리 할 수 있다.

 

또한 인스턴스의 참조값도 enhanced for 문을 사용할 수 있다.

Box[] a = new Box[10];

for(Box e : a){

    ......

}

위와 같은 형태로 사용할 수 있다.

 

 

3. 다차원 배열

 

배열의 논리적 메모리 구조가 2차원 이상의 형태를 보이는 배열을 다차원 배열이라고 한다.

1차원 배열은 선의 형태인 배열이지만 2차원 배열은 면의 형태다.

예로 int[] a = new int[3][4]; 라는 배열을 선언하면 이는 가로 3, 세로 4의 배열이 생성되는 것이다.

위 코드와 같이 사용할 수 있다.

 

2차원 배열의 초기화는 다음과 같이 이루어진다.

int[][] a = new int[][]{

    {1,2,3},

    {4,5,6},

    {7,8,9}

};

이는 다음과 같이 줄일 수 있다.

int[][] a = {

    {1,2,3},

    {4,5,6},

    {7,8,9}

};

반응형