배열이란?
동일한 자료형(Data Type)의 데이터를 연속된 공간에 저장하기 위한 자료구조이다. 즉, 연관된 데이터를 그룹화 하여 묶어준다고 생각하면 된다.
배열의 장점
연관된 데이터를 저장하기 위한 변수의 선언을 줄여주며, 반복문 등을 이용하여 계산과 같은 과정을 쉽게 처리할 수 있다.
배열 선언 및 사용
배열을 정의하는 방법은 크게 2가지 방법이 있다. 하나씩 알아보자.
자료형[] 변수= {데이터1, 데이터2, 데이터3, - - };
첫번째 방법은 데이터들의 값을 알고 있을 때 사용하면 편리하다. 예제를 살펴보기전에 이해를 돕기 위해 비유를 들어보겠다. 우리가 자주 가는 대형마트를 생각해 보자. 과자가 있는 코너, 소스코너, 라면코너 등등 고객들과 직원들이 찾기 편하게 섹션 별로 분류되어 진열이 되어있다. 따라서 우리는 사고자 하는 상품이 있는 코너로 이동하게 된다. 맥주를 파는 코너로 이동하였다고 생각했을 때 거기에는 또다시 맥주별로 이름이 붙어 있고 품목별로 분류 되어 진열이 되어있다. 이러한 점에서 배열과 비슷하다고 할 수 있다. 위에 비유한 내용으로 배열을 생성하는 예제를 살펴 보자.
package Ex01;
public class ArrayEx01 {
public static void main(String[] args) {
String[] beer = {"Kloud", "Cass", "Asahi", "Guinness", "Heineken"};
//인덱스 번호 0 , 1 , 2 , 3 , 4
System.out.println(beer[0]);
System.out.println(beer[1]);
System.out.println(beer[2]);
System.out.println(beer[3]);
System.out.println(beer[4]);
}
}
beer라는 String[]변수에 데이터를 저장하였다. 저장한 데이터들을 출력하기 위해서는 인덱스 번호라는 것에 대해서 알아야 한다. 인덱스 번호는 데이터를 저장한 순서대로 0부터 시작하여 1씩 증가되어 만들어진다. 인덱스 번호는 맥주를 품목별로 구분하기 위한 구분자라고 생각하면 된다. 즉, beer라는 배열에 0~4까지의 index번호를 가진 5개의 공간(length)에 데이터들이 저장이 되어있다. 이것을 그림으로 표현하면 아래와 같다.
length(배열의 크기) | 5 | ||||
element(데이터 값) | Kloud | Cass | Asahi | Guinness | Heineken |
index(구분자 | 0 | 1 | 2 | 3 | 4 |
위에서 언급했던 반복문과 배열을 함께 사용하는 방법에 대해서 예제를 통해 알아보자.
package Ex01;
public class ArrayEx02 {
public static void main(String[] args) {
int[] score = { 93, 75, 95, 76, 70};
int sum = 0;
for(int i = 0; i < score.length; i++) {//score.length = 5
sum += score[i]; //sum = sum + score[i];
}
double avg = (double)sum / score.length;//형 변환
System.out.println("점수 합계 : "+sum);//결과합계 409
System.out.println("점수 평균 : "+avg);//평균 81.8
}
}
score라는 int형 배열을 만들고 계산과 형변환을 통해 총합과 평균값을 구했다. 배열의 인덱스 번호를 이용해서 반복문을 사용하게 되면 쉽게 처리가 가능하다. 여기서 반복문 조건식을 살펴보자. i < score.length라는 속성을 사용하였는데 이것은 위에서 설명했던것 처럼 배열의 크기(길이)를 의미한다. score에 값을 추가하거나 제거한다고 했을 때 score.length는 수정할 필요가 없다. 또한 배열의 크기를 모를 때도 length를 사용하여 반복문을 작동시킬 수 있는 장점이 있다.
배열을 정의하는 두 번째 방법은 아래와 같다.
자료형[] 변수=new 자료형[배열크기]; //좌항과 우항의 자료형 통일
변수[0] = 데이터 값;
변수[1] = 데이터 값;
위 방법은 배열의 값은 모르지만 향후 값을 저장하기 위한 배열을 생성하고 싶을 경우 주로 사용한다. new라는 연산자로 배열을 생성시키는데 이것의 개념은 메모리 영역{heap)이 들어가 있어서 조금 복잡하다. 지금은 new를 이용해서 배열을 정의한다고만 알아두자.
두번째 방법으로 배열을 정의하는 예제를 살펴보자.
package Ex01;
public class ArrayEx03 {
public static void main(String[] args) {
int[] num = new int[3];//크기가 3인 배열 생성
num[0] = 10; // 0번 index에 값 할당
num[1] = 15; // 1번 index에 값 할당
num[2] = 13; // 2번 index에 값 할당
for(int i = 0; i < num.length; i++)
System.out.println(num[i]);
}
}
이렇게 보면 첫 번째 방법으로 작성했던 것 보다 어렵고 불편하다고 생각이 들것이다. 모르는 값을 배열에 저장하고 사용하는 예제를 확인 해보자.
package Ex01;
import java.util.Scanner;
public class ArrayEx04 {
public static void main(String[] args) {
int[] num = new int[5];//배열생성
int max, min;
Scanner sc = new Scanner(System.in);
System.out.println("5개 정수를 입력 하시오");
for(int i = 0; i < num.length; i ++) {
num[i] = sc.nextInt();//데이터 입력 및 배열에 저장
}
max = num[0];//최대값 초기 설정
min = num[0];//최소값 초기 설정
for(int i = 0; i < num.length; i++) {
if(max<num[i]) {//최대값 비교
max = num[i];//최대값 할당
}
if(min > num[i]) {//최소값 비교
min = num[i]; //최대값 할당
}
}
System.out.println("최대 값 : "+max);
System.out.println("최소 값 : "+min);
}
}
ㅇ위의 예제 처럼 배열의 값을 모를 때 배열은 정의만 하고 값을 입력 받아 데이터를 저장한다. 데이터의 값을 모를 경우가 더 많기 때문에 위와 같은 방법을 더 자주 사용하게 된다.
마무리 하기전에 향상된 for문(for-each)에 대해서 간략히 설명하겠다.
지금까지 사용하던 반복문을 사용해도 되지만 배열을 사용하여 반복시킬 때 조금 더 편리한 방법이 있는데 그것이 for-each문 이다. 정의하는 방법은 아래와 같다
for( 자료형 변수 : 배열) { //배열의 값이 있으면 자료형 변수로 값을 보내주고
반복 실행할 문장; //문장실행
} //값이 없으면 종료
위에서 살펴 봤던 예제와 비슷한 내용으로 for - each문으로 작성헤 보면 다음과 같다.
public class ForEachEx01{
public static void main(String[] args){
int[] score = { 78, 70, 65, 95, 60 };
int sum = 0;
for(int i : score){
sum += i; // sum = sum + i;
}
System.out.println("점수 합계 : " + sum);
}
}
반복문을 작성하는 구간이 문법적으로 간결해졌다. 종료 조건과 초기값,증감식을 숨기고 배열과 변수를 이용하여 문장을 반복시키는 방법이다. 하지만 배열을 사용한다고 반드시 이 방법을 쓸 필요는 없다. 본인이 편한 반복문을 사용하면 되고 이런것도 있다는 것을 알고 있으면 된다.
'JAVA' 카테고리의 다른 글
[JAVA] Queue 정리 (0) | 2019.12.13 |
---|---|
[java] Stack 스택 정리 (0) | 2019.12.13 |
정규식표현으로 이메일 주소 패턴 만들기 (0) | 2019.12.13 |
다차원(2차원) 배열 (0) | 2019.12.12 |
JAVA - 자바 시작하기 (자바설치, 개발환경 설정) (0) | 2019.12.03 |