Language/Java

[Java] 자바 배열 (Array) 선언, 초기화, 길이, for

KAispread 2022. 4. 29. 19:29
728x90
반응형

기본 자료형인 long, int, short, byte, char, float, double, bool 에는 하나의 데이터만 넣을 수 있다.
한 가지 타입에 대해 여러개의 데이터을 넣기 위해서 배열을 사용한다.

 


 

배열 선언 방법

자바에서 배열은 다음과 같이 선언할 수 있다.

타입 [] 변수명 
타입 변수명 []

위와 같이 두 가지 방법으로 배열 선언이 가능하다.
타입은 기본 자료형을 넣어도 되고, classenum, String 과 같은 참조 자료형을 넣어도 된다.
첫번째 방법처럼 타입과 변수명 사이에 대괄호 [] 를 넣는 것을 권장한다.

int [] arrayNum01 = new int[3];
// 선언과 동시에 배열 크기 지정

int [] arrayNum02;
arrayNum02 = new int[3];
// 선언 후 크기 지정

배열은 참조 자료형이기 때문에 new 예약어를 사용하여 객체를 생성할 수 있다.
대괄호 안의 숫자에 따라 배열의 크기가 결정된다.

int [] arrayNum = new int[3]

arrayNum[0] = 1
arrayNum[1] = 2
arrayNum[2] = 3

배열 선언 후에 다음과 같이 해당 배열의 인덱스를 이용해 직접 값을 삽입해 줄 수 있다.
(배열의 인덱스는 1이 아닌 0부터 시작한다. 따라서, 크기가 3인 배열의 마지막 인덱스는 '2'이다)

int [] arrayNum = {1, 2, 3}

다음과 같이 배열을 선언과 동시에 값을 할당해 줄 수도 있다.
중괄호 {} 안에 값을 콤마 , 단위로 끊어서 넣어주면 된다.

이렇게 배열 인덱스에 데이터를 넣어서 초기화하지 않는다면 기본적으로 할당 된 값은 무엇일까?
대표적으로 int 자료형 배열과 String 자료형 배열을 선언 후 초기화 없이 0번 인덱스를 출력해보았다.

int [] arrayNum = new int[3];
String [] arrayString = new String[3];
		
System.out.println(arrayNum[0]);
System.out.println(arrayString[0]);

결과 값

다음과 같이 int 배열에서는 초기값 0이, String 배열에서는 초기값 null이 저장되어 있다는 사실을 알 수 있다.
각 자료형에 대한 배열 기본값(초기값)은 다음과 같다.

배열 자료형 기본값
byte, short, int, long 0
float, double 0.0
char '\u0000'
bool false
참조 자료형 null

 

 

2차원 배열 선언 방법


배열은 한가지 자료형의 여러 데이터 값을 저장해 줄 수 있는 참조 자료형이다.
위 예시에서와 같이 1차원으로 값을 저장해주어도 되지만 2차, 3차원, 그 이상의 다차원으로 배열을 선언할 수도 있다.

int [][] arrayNum = new int[3][5];


2차원 배열을 선언하는 간단하다. 대괄호 [] 를 2개 붙여주면 된다.
3차원, 4차원도 마찬가지이다.
위 예시 코드에서 배열을 3 x 5로 선언하면 다음과 같이 크기가 5인 배열이 3줄 있는거라고 생각하면 된다.

 


 

int [][] arrayNum = new int[3][];

arrayNum[0] = new int[5];
arrayNum[1] = new int[3];
arrayNum[2] = new int[4];


2배열을 선언할 때 1차원 배열의 크기만 미리 지정할 수도 있다.
또한, 1차원 배열의 각 인덱스에 대해 각각 다른 크기의 배열을 선언할 수도 있다.
위의 예시 코드에서는 2차원 배열로 선언된 arrayNum의 1차원
0번 인덱스에 크기가 5인 int 자료형 배열이 선언되어 int 값을 최대 5개 저장할 수 있고,
1번 인덱스엔 int 값을 최대 3개,
2번 인덱스엔 int 값을 최대 4개 저장할 수 있다.

 


 

int [][] arrayNum01 = new int[2][2];
arrayNum01[0][0] = 1;
arrayNum01[0][1] = 2;
arrayNum01[1][0] = 3;
arrayNum01[1][1] = 4;

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


2차원 배열에서도 1차원에서와 마찬가지로 인덱스를 통해 직접 초기화해줄 수도 있고,
선언과 동시에 중괄호 {}를 이용하여 초기화 해줄 수도 있다. (데이터끼리 콤마 , 를 사용하여 구분)

 

배열의 길이를 구하는 .length


배열의 길이를 구하는 방법은 아주 간단하다.

"배열 변수명.length"


배열 이름 뒤에 .length 를 붙여주면 int 타입의 배열 길이를 리턴해준다.

int [] arrayNum01 = new int[4];
int [][] arrayNum02 = new int[3][4];

System.out.println(arrayNum01.length);    // '4' 출력

System.out.println(arrayNum02.length);    // '3' 출력
System.out.println(arrayNum02[0].length); // '4' 출력


1차원 배열에서는 변수명에 .length를 붙여주면 된다.

하지만, 2차원에서는 변수명에 .length를 붙이면 1차원 배열의 길이를 리턴해준다.
이 때, arrayNum02의 2차원 배열 길이인 '4'라는 값을 얻기 위해선 arrayNum02의 1차원 배열 인덱스에 .length를 붙여주면 된다.

int [][] arrayNum = new int[3][];

arrayNum[0] = new int[5];
arrayNum[1] = new int[3];
arrayNum[2] = new int[4];

System.out.println(arrayNum01[0].length); // '5'출력
System.out.println(arrayNum01[0].length); // '3'출력
System.out.println(arrayNum01[0].length); // '4'출력

 

배열을 위한 for


이렇게 .length 를 통해 구한 배열의 길이는, for 문에서 아주 유용하게 사용할 수 있다.

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

for(int i = 0; i < arrayNum01.length; i++){
	System.out.println("Index" + i + " = " + arrayNum01[i]);
}

출력 값


위의 예시 코드처럼 배열의 길이만큼 loop를 돌릴 수 있다.

하지만 이보다 더 편한 방법이 있다.
JDK 5에서 추가된 문법으로, Javascript나 C#에서는 foreach를 사용하지만 자바에서는

"for( 자료형 임시 변수 : 반복 대상 배열 )"


을 통해 배열의 데이터에 더욱 쉽게 접근할 수 있다.
예시를 통해 살펴보자.

int [] arrayNum = {1,2,3,4,5,6,7,8,9,10};

for(int data : arrayNum) {
	System.out.println(data);
}


이 for 루프 ( for( 임시 변수 : 반복 대상 배열 ) ) 은 콜론 : 뒤쪽에 삽입한 배열의 길이만큼 for 문을 반복하면서 데이터를 변수에 저장하게 된다.
위의 예시에서, 배열에 저장되어있는 값은 int 형이기 때문에 임시 변수의 자료형도 int로 설정해주어야 한다.
여기서 주의해야될 점이 있다.

  • 콜론 뒤에 배열이나 사용 가능한 객체형태가 위치해야 한다.
  • 임시 변수의 자료형을 배열이나 객체에 맞춰주어야 한다.


예시를 보자.

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

for(int [] data : arrayNum) {
	System.out.println(data[0] + "," + data[1]);
}
// 1, 2
// 3, 4


이 for 문에서는 반복 대상 배열 의 첫번째 인덱스 값이 임시 변수에 들어가게 된다.
따라서 콜론 : 뒤에 arrayNum을 위치시키게 되면, arrayNum[0], arrayNum[1] 의 값이 data에 들어가게 된다.
arrayNum[0], arrayNum[1] 의 값은 각각 {1, 2} {3, 4} 인 배열 값이므로
임시 변수 자료형으로 'int'가 아닌, 'int []'를 써야한다.

 

참조
ㆍ자바의 신 Vol.1 (이상민)
728x90
반응형