본문 바로가기
Java

[JAVA] 자바 - 배열 (자료를 순차적으로 한꺼번에 관리하는 방법)

by Seong-Jun 2021. 11. 24.
728x90
반응형
SMALL

배열이란?

  • 동일한 자료형의 순차적 자료 구조이고 유한 집합으로 정의할 수 있습니다.
  • 배열은 같은 종류의 데이터를 많이 다뤄야 하는 경우에 사용할 수 있는 가장 기본적인 자료 구조입니다.
  • 배열을 구성하는 각각의 값을 배열 요소(element)라고 합니다.
  • 배열에서의 위치를 가리키는 숫자를 인덱스(index)라고 합니다.
  • 인덱스 연산자[]를 사용하여 빠른 참조가 가능합니다.
  • 물리적 위치와 논리적 위치가 동일합니다.
  • 배열의 순서는 0부터 시작합니다.
  • 자바에서는 객체 배열을 구현한 ArrayList를 많이 활용합니다.
  • 배열은 선언되는 형식에 따라 1차원 배열, 2차원 배열뿐만 아니라 그 이상의 다차원 배열로도 선언할 수 있습니다.

 

1차원 배열

배열 선언

- 2가지 방법이 있습니다.

int[] arr1 = new int[10];
int arr2[] = new int[10];

 

배열 초기화

  • 배열은 선언과 동시에 자료형에 따라 초기화됩니다. (정수는 0, 실수는 0.0, 객체는 null)
  • 필요에 따라 초기값을 지정할 수 있습니다.
int[] number = new int[] {10, 20, 30}; // 개수 생략해야 함
int[] number2 = {10, 20, 30}; // new int[] 생략 가능
int[] ids;
ids = new int[] {10, 20, 30} // 선언 후 배열을 생성하는 경우는 new int[] 생략할 수 없음

 

배열 사용하기

  • [] 인덱스 연산자 활용 : 배열 요소가 저장된 메모리의 위치를 연산하여 찾아줍니다.
  • 배열을 이용하여 합을 구하기

ArrayTest.java

public class ArrayTest {

	public static void main(String[] args) {
		int arr1[] = new int[10]; // 배열 선언
		int total = 0;
		
		for(int i = 0, num = 1; i < arr1.length; i++, num++) {
			arr1[i] = num; // 배열 각 항의 값 설정
		}
		
		for(int i = 0; i < arr1.length; i++) {
			total += arr1[i];
		}
		
		System.out.println(total);
	}

}

 

출력결과

55

 

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

  • 배열을 선언하면 개수만큼 메모리에 할당되지만, 실제 요소(데이터)가 없는 경우도 있습니다.
  • 배열의 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);

 

출력 결과

0.0

배열은 선언과 동시에 자료형에 따라 초기화됩니다. 위의 예제에서는 double형이기 때문에 0.0으로 전부 초기화됩니다. 그럼 1.1, 2.1, 3.1, 0.0, 0.0입니다. 그래서 모든 항을 곱했을 때 4번째와 5번째에 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);

 

출력 결과

7.161000000000001

 

문자 배열을 만들어 A-Z까지 배열에 저장하고 이를 다시 출력하기

public class ArrayTest2 {

	public static void main(String[] args) {
		char cArr[] = new char[26];
		char x = 'A';
		
		for(int i = 0; i < cArr.length; i++) {
			cArr[i] = x++;
		}
		
		for(int i = 0; i < cArr.length; i++) {
			System.out.print(cArr[i] + " ");
		}
	}

}

 

출력 결과

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

 

향상된 for문 사용하기

배열의 n개 요소를 0부터 n-1까지 순차적으로 순회할 때 간단하게 사용할 수 있습니다.

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

 

public class ArrayTest2 {

	public static void main(String[] args) {
		char cArr[] = new char[26];
		char x = 'A';
		
		for(int i = 0; i < cArr.length; i++) {
			cArr[i] = x++;
		}
		
//		for(int i = 0; i < cArr.length; i++) {
//			System.out.print(cArr[i] + " ");
//		}
		
		for(char alpha : cArr) {
			System.out.println(alpha + " " + (int)alpha);
		}
	}

}

 

출력 결과

A 65
B 66
C 67
D 68
E 69
F 70
G 71
H 72
I 73
J 74
K 75
L 76
M 77
N 78
O 79
P 80
Q 81
R 82
S 83
T 84
U 85
V 86
W 87
X 88
Y 89
Z 90

 

 

 

728x90
반응형
LIST

댓글