본문 바로가기
개발공부/Java

[Java] 12. 자료를 순차적으로 관리하는 방법 - 배열(Array)

by sangyeon 2021. 11. 29.
728x90

1. 배열이란?

- 동일한 자료형의 순차적 자료 구조

- 인덱스 연산자[]를 이용하여 빠른 참조 가능

- 물리적 위치와 논리적 위치가 동일

- 배열의 순서는 0부터 시작

- 자바에서 객체 배열을 구현한 ArrayList를 많이 활용함

 

2. 배열 선언과 초기화

- 배열 선언하기

ex) int[] arr1 = new int[10];

ex) int arr2[] = new int[10];

출처 : https://gitlab.com/easyspubjava/javacoursework/

- 배열은 선언과 동시에 자료형에 따라 초기화 된다. (정수는 0, 실수는 0.0, 객체는 null)

- 필요에 따라 초기값을 지정할 수 있다.

ex) int[] numbers = new int[] {10, 20, 30};   // 개수 생략해야 함

ex) int[] numbers = {10, 20, 30}                // new int[] 생략 가능

ex) int[] numbers;

     numbers = new int[] {10, 20, 30};        // 선언 후 배열을 생성하는 경우 new int[]를 생략할 수 없다.

 

 

3. 배열 사용하기

- []인덱스 연산자 활용 > 배열 요소가 저장된 메모리의 위치를 연산하여 찾아준다.

- 배열을 이용하여 합을 구하기

package ch20;

public class ArrayTest {

public static void main(String[] args) {

int arr[] = new int[10];
int total = 0;

for(int i=0, num=1; i<arr.length; i++) {
arr[i] = num++;
}

for(int num : arr) {  // arr 배열의 처음부터 끝까지의 value가 num에 들어감.
total += num;
}

System.out.println(total);
}
}

 

4. 배열의 길이와 요소의 개수는 동일하지 않다.

- 배열을 선언하면 개수만큼  메모리가 할당되지만, 실제 요소(데이터)가 없는 경우도 있다.

- 배열의 length 속성은 배열의 개수를 반환해주기 때문에 요소의 개수와는 다르다.

- length를 활용하여 오류나는 경우

double[] dArr = new double[5];

dArr[0] = 1.1;  
dArr[1] = 2.1; 
dArr[2] = 3.1; 

double mtotal = 1;
for(int i = 0; i< dArr.length; i++) {
mtotal *= dArr[i];
}

System.out.println(mtotal);

> 기대하는 결과 값은 1.1 x 2.1 x 3.1 = 7.161이 겠지만, 실제 결과 값은 0.0이 된다.

그 이유는 배열을 선언하고 값을 넣지 않으면 실수의 경우에는 0.0으로 초기화되기 때문이다.

 

원하는 결과 값을 얻기 위해서는 아래와 같이 코딩해야 한다.

(요소의 개수에 대한 변수(count)를 따로 유지)

double[] dArr = new double[5];
int count = 0;
dArr[0] = 1.1; count++; 
dArr[1] = 2.1; count++;
dArr[2] = 3.1; count++;

double mtotal = 1;
for(int i = 0; i< count; i++) {
mtotal *= dArr[i];
}

System.out.println(mtotal);

 

 

5. 향상된 for문 사용하기

- 배열의 n개 요소를 0부터 n-1까지 순차적으로 순회할 때 간단하게 사용하는 방법

ex) for (변수 : 배열) {}

package ch20;

public class CharArrayTest {

public static void main(String[] args) {

char alphabets[] = new char[26];
char ch = 'A';

for(int i=0; i<alphabets.length; i++) {
alphabets[i] = ch++;
}

for(char alpha : alphabets) {
System.out.println(alpha + "," + (int)alpha);
}
}

}

 

 

6. 2차원 배열 사용하기

- 다차원 배열 : 2차원 이상으로 구현된 배열

- 평면(2차원 배열)이나 공간(3차원 배열)을 활용한 프로그램 구현

 

- 2차원 배열 예제

ex) int[][] arr = new int[2][3];

public static void main(String[] args){

int[][] arr = {{1,2,3},{1,2,3,4}};
int i,j;

for(i=0; i<arr.length; i++){
   for(j=0; j<arr[i].length; j++){
       System.out.print(arr[i][j] + ",");
    }
    System.out.println("\t" + arr[i].length);
  }
}

> arr.length는 행의 길이를 뜻하고, arr[0].length는 0번째 행의 열을 뜻한다.

 

결과 값

1,2,3, 3
1,2,3,4, 4

728x90