배열은 자료형이 같은 둘 이상의 값을 저장할 수 있는 메모리 공간이다. 그리고 이는 구조에 따라서 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}
};
'JAVA' 카테고리의 다른 글
[JAVA] 클래스의 상속 2 : 오버라이딩 (자바 독학하기17) (0) | 2021.07.07 |
---|---|
[JAVA] 클래스의 상속 1 : 기본 (자바 독학하기16) (0) | 2021.07.05 |
[JAVA] 콘솔 입·출력 (자바 독학하기14) (0) | 2021.06.28 |
[JAVA] string 클래스 (자바 독학하기13) (0) | 2021.06.26 |
[JAVA] 메소드 오버로딩 (Method Overloading) (자바 독학하기12) (0) | 2021.06.26 |