2020. 5. 19. 20:46ㆍ프로그래밍/Java
배열
같은 타입의 여러 변수를 하나의 묶음으로 다루는 것을 배열(array)이라고 합니다 많은 양의 데이터를 저장하기 위해서 그 데이터의 숫자만큼 변수를 선언해야 한다면 매우 곤란할 것입니다 예를 들어 수백 개의 데이터를 저장해야 할 때 같은 수의 변수를 선언해야 한다면 상당히 지루하고 불편할 것입니다 이런 경우에 배열을 사용하면 많은 양의 데이터를 손쉽게 다룰 시 있게 됩니다.
여기서 중여한점은 같은 타입이어야 한다는 것 입니다 서로 다른 타입의 변수들로 구성된 배열은 만들 수 없습니다 한 학급의 시험 점수를 저장하고자 할 때 배열을 사용하기 좋은 예이니다 많일 배열을 사용하지 않는다면 5명의 학생의 점수를 저장해주기 위해 아래의 코드처럼 변수를 선언해주어야 합니다
public class Ex11 {
public static void main(String[] args) {
int score1,score2,score3,score4,score5
}
}
만약 여기서 변수 대신 배열을 이용한다면 다음과 같이 간단히 처리할 수 있습니다 변수의 선언과 달리 다뤄야 할 데이터의 수가 아무리 많아도 단지 배열의 길이만 바꾸면 됩니다.
int[] score = new int[5];//5개의 int값을 저장 할수있는 배열 생성
배열의 선언과 생성
배열읜 선언할 때는 원하는 타입의 변수를 선언하고 변수 또는 타입에 배열임을 의미하는 []를 붙이면 됩니다 []는 타입 뒤에 붙여도 되고 변수 이름 뒤에 붙여도 됩니다
//타입[] 변수이름;
int[] score;
String[] name;
//타입 변수이름[];
int score[];
String name[];
배열의 생성
배열을 선언한 다음에는 배열을 생성해야 합니다 배열을 선언하는 것은 단순히 생성된 배열을 다루기 위한 참조 변수를 위한 공간이 만들어지는 것이며 배열 생성해야 값을 저장할 수 있는 공간이 만들어지는 것입니다 배열을 생성할 때에는 'new'와 함께 배열의 타입과 길이를 지정해주어야 합니다.
타입[] 변수이름;//배열을 선언
변수이름 = new 타입[길이]//배열을 생성
배열의 길이와 인덱스
생성된 배열의 각 저장공간을 배열의 요소라고 하며 배열 이름[인덱스]의 형식으로 배열의 요소에 접근합니다 인덱스는 배열의 요소마다 붙여진 일련번호로 각 요소 들을 구별하는 데 사용합니다
인덱스의 범위는 '0부터 자신이 지정한 배 열결이-1'입니다.
배열의 길이는 배열을 생성할 때 [] 안에 배열의 길이를 적어 주어야 하는데 배열의 길이는 배열의 요소의 개수 즉 값을 저장할 수 있는 공간의 개수입니다 배열의 길이는 양의 정수이어야 하며 최댓값은 int타입의 최댓값 약 20억 정도 합니다 실제로 이렇게 큰 배열을 생성하는 경우는 드물기 때문에 배열의 길이는 거의 제약이 없습니다.
int[] arr = new int[5];//길이가 5인 int배열
길이가 0인 배열도 생성이 가능합니다 길이가 0일 때 값을 저장할 수 있는 공간이 없어 의미가 없다고 생각하실 수 있지만 프로그래밍을 하다 보면 길이가 0인 배열이 필요한 상황이 있고 나름 유용합니다.
배열의 이름. length
자바에서는 JVM이 모든 배열의 길이를 별도로 관리하며 '배열 이름. length'를 통해 배열의 길이에 대한 정보를 얻을 수 있습니다 아래의 코드처럼 배열 arr의 길이가 5이므로 arr.length의 값 역시 5입니다.
int[] arr = new int[5];//길이가 5인 int배열
int[] tem = arr.length;//arr.length의 값은 tem에 5가 저장이됩니다
배열은 한번 생성하면 길이를 변경할 수 없기 때문에 이미 생성된 배열의 길이는 변하지 않습니다 따라서 배열의 이름. length는 상수입니다 즉 값을 읽을 수만 있을 뿐 변경할 수없습니다.
배열의 초기화
배열은 생성과 동시에 자동적으로 자신의 타입에 해당하는 기본값으로 초기화가 됩니다 그렇기에 배열을 사용하기 전에 따로 초기화를 해주지 않아도 되지만 원하는 값을 저장하려면 각 요소마다 값을 지정해주어야 합니다.
int[] a = new int[5];
a[0] = 2;
a[1] = 4;
a[2] = 6;
a[3] = 8;
a[4] = 10;
배열의 길이가 큰 경우 이렇게 요소 하나하나에 값을 지정하기보다는 for문을 사용하는 것이 좋습니다. 하지만 for문으로 배열을 초기화하려면 저장하려는 값에 일정한 규칙이 있어야만 가능하기 때문에 자바에서는 다음과 같이 배열을 간단히 초기화할 수 있는 방법을 제공합니다.
int[] su1 =new int[] {1,4,6,7,9};
for(int i = 0; i<su1.length; i++){
System.out.println(su1[i]+2);
}
저장할 값들을 {} 안에 쉼표로 구분해서 나열되며 {} 안의 값의 개수에 의해 배열의 길이가 자동으로 결정되기 때문에 [] 안에 배열의 길이는 적지 않아도 됩니다
int[] su1 ={1,4,6,7,9};
for(int i = 0; i<su1.length; i++){
System.out.println(su1[i]+2);
}
심지어 위의 코드같이 'new타입[]'을 생략하여 코드를 더 간단히 할 수도 있습니다 아무래도 생략된 형태의 코드가 더 간단하므로 자주 사용됩니다 다만 배열의 선언과 생성을 따로 하는 경우에는 생략할 수 없습니다.
int[] = su1;
su1 = new int[] {1,4,6,7,9};
for(int i = 0; i<su1.length; i++){
System.out.println(su1[i]+2);
}
마지막으로 {} 안에 아무 값도 넣지 않으면 길이가 0인 배열이 생성됩니다 참조 변수의 기본값은 null이지만 배열을 가리키는 참조 변수는 null대신 길이가 0인 배열로 초기화하기도 합니다.
int[] su1 =new int[0];
int[] su1 =new int[];
int[] su1 ={};
위의 코드는 전부 길이가 0인 배열이며 마지막 부분은 new int []가 생략이 됩니다.