[JAVA] 배열
@욕심쟁이
·2020. 8. 3. 16:24
배열이란?
- 같은타입의 데이터를 연속공간에 나열(동일한 데이터 타입 변수들의 집합)
- 기본 데이터타입과 참조 데이터타입 모두를 배열로 생성 가능
- 저장된 데이터들은 배열명(변수명)을 사용하여 관리
- 그연속된 공간에는 인덱스(첨자)번호가 붙는다
- 시작은 0번부터 (0,1,2,3,4....) 배열크기의 -1까지 자동부여
- 배열은 힙이라는 메모리에 실제 데이터 저장이가능하도록 공간을 할당받고
생성된 heap공간의 메모리 주소값을 해당변수에 저장
(앞으로 해당 변수에 저장된 주소값을 참조하여 배열에 접근)
- 기본데이터 타입으로 배열을 생성할 경우 각타입의 기본값으로 자동 초기화가 이루어짐
- 참조 데이터 타입으로 배열을 생성할 경우 참조형의 기본값인 null값이 자동으로 초기값으로 지정됨
(null은 참조하는 주소값이 없다는 의미의 특수 데이터)
특징
- 같은타입의 데이터만 저장가능하다(다른데이터를사용하면 타입미스매치(typemissmath) 컴파일에러 발생)
- 한번 만들어지면 메모리크기는 불변
1. 배열선언
- 배열 변수선언
→ 데이터타입[] 변수명;
(단, 배열 선언만 했을 경우 메모리에 실제 배열 공간이 생성되기 전이므로 데이터 저장 불가)
int[] arr; //int형 정수저장을 위한 배열공강의 이름을 arr로 선언
//=> 주의! 아직 정수를 저장할 수 있는 메모리 공간 생성전이므로 배열에 데이터 저장은 불가능
2. 배열생성
- new연산자 이용
→ 변수명 = new 데이터타입[배열크기];
(메모리(Heap)에 실제 데이터 저장이 가능하도록 공간을 할당받음)
arr = new int[10];
// 변수명 = new 데이터타입[배열크기]
3. 배열 초기화
→ 변수명[인덱스] = 데이터;
arr[0] = 10;
arr[1] = 20;
arr[2] = 30;
//배열 선언, 생성, 초기화를 한꺼번에 수행
int[] nums = {1, 2, 3, 4, 5};
4. 배열사용
int[] nums = {1, 2, 3, 4, 5};
System.out.println("배열 arr 의 0번 인덱스 : " + names[0]); //1
System.out.println("배열 arr 의 1번 인덱스 : " + names[1]); //2
System.out.println("배열 arr 의 2번 인덱스 : " + names[2]); //3
5. length를 사용하여 데이터 접근
- 배열명.length속성을 사용하여 크기를 전달받을 수 있음
→ 출력문에 배열명.length 전달 또는 변수에 배열명.length저장
public class Test {
public static void main(String[] args) {
int[] arr = {10,20,30,40,50};
int total = 0;
for(int i= 0; i<arr.length; i++) {
System.out.printf("arr의 %d자리의 %d\n",i,arr[i]);
//arr의 0자리의 10
//arr의 1자리의 20
//arr의 2자리의 30
//arr의 3자리의 40
//arr의 4자리의 57
total += arr[i];
}
System.out.println("배열 arr의 합계는 : " + total); //배열 arr의 합계는 : 157
}
}
6. 이미 생성된 배열을 버리고 새로 생성하여 변수에 할당하는 경우
arr = new int[] {10,20,30,40,50};
- 주의! int[] 내부에 배열크기를 지정하지 않도록 한다!
7. 주의사항
int[] a1, b1;// a1고 b1모두 배열타입 변수로 선언되지만
int a2, b2[]; //a2는 기본형 변수, b2만 배열타입 변수로 선언됨
참고! 데이터타입[] 변수명 :변수명의 역할은 주소값을 알려주기위해(주소저장공간) = 참조형변수