int a;
a = 10;
sysout(a); //10
a = 20;
sysout(a); //20
이렇게 위와 같은 방식은 변수 1개당 값을 1개밖에 저장하지 못하기 때문에 가장 나중에 선언한 값으로 변경된다.
그럼 이 10 과 20 모두 변수 a 에 담는 방법은 없을까? 이 방법이 바로 자바의 배열이다.
배열
배열은 집합 데이터의 처리를 수월하게 해준다.
하나의 배열에 여러개의 값을 저장할 수 있지만, 이들의 타입이 동일해야 한다.
배열의 크기는 고정되어 있고, 배열의 각 방은 자동으로 초기화가 된다.
배열 선언
int [] a;
char [] b;
(타입명) [] (변수이름);
배열 생성문
a = new int [5]; //int 한 개를 담을 수 있는 방을 5개 만들어라
b = new char [3]; // char 한 개를 담을 수 있는 방을 3개 만들어라
a[0] = 1;
a[1] = 2;
a[2] = 3;
a[3] = 4;
a[4] = 5;
배열 복사
배열은 한번 생성하면 길이를 변경할 수 없다. 하지만 사용하다 보면 더 많은 공간이 필요할 때가 있다. 이러한 경우, 더 큰 길이의 배열을 새로 만들고 이전 배열로부터 항목들을 복사해야 한다.
1) 얕은 복사
참조값만 복사한다. 요소(배열을 구성하는 각각의 값) 를 변경하면 다른 쪽에 영향을 준다.
간단히 말하면, 얕은 복사는 몸 하나에 이름이 두 개인 것이다.
int [] a = {1,2,3,4,5}; // 방이 5개 만들어진다
int [] b = a;
- a : 4B 방 5개를 메모리에 저장한다.
- b : a의 주소값을 나타낸다
int[] c = new int[3];
- Java에서
- new : 메모리 할당 공간/ heap에서 메모리 할당 받아라
- 주소를 c에 저장함
- int : 4B
- 3 : 3칸을
2) 깊은 복사
배열의 요소는 동일하지만 다른 메모리에 복사한다.
직접 구현할 수도 있고 api 메서드를 사용할 수도 있다.
1. 직접 구현
int[] a = {1,2,3,4,5};
int[] b = new int[a.length];
int i;
for(i=0;i<a.length;i++){
b[i]=a[i];
}
2. api 메서드를 사용
arraycopy()를 활용
System.arraycopy(원본 배열, 원본 복사 시작 위치, 대상 배열, 대상 복사 시작 위치, 복사 요소 갯수)
2차원 배열
⬇️ 2차원 배열은 다음 포스팅에서.