17. 배열과 ArrayList
> Array(배열)
- 동일한 자료형의 변수를 index를 이용해서 순차적(물리적, 논리적으로 연속적)으로 관리
- 데이터가 중간에 빌 경우 data를 땡겨서 순차적으로 만들어주어야 함
- 데이터가 length만큼 꽉 찼는데, 데이터 추가를 원할 경우 length가 더 긴 배열을 선언 후 data를 복사해야함
length
- 배열이 선언될 때의 크기
- index: 0 ~ n-1
- 배열이름.length
size(크기)
배열 중 사용되는 공간의 크기
> 배열 선언
- 자료형[] 배열이름 = new 자료형[개수];
int[] arr = new int[10];
- 자료형 배열이름[] = new 자료형[개수];
int arr[] = new int[10];
- 배열의 length에 변수도 들어갈 수 있음
> 배열 초기화
- 배열은 선언과 동시에 초기화 할 수 있음
- 배열을 초기화 할 때는 배열의 개수를 명시하지 않음
// 개수 생략
int[] studentIDs = new int[] {101, 102, 103};
// 오류 발생
int[] studentIDs = new int[3] {101, 102, 103};
// int형 length 3인 배열 생성
int[] studentIDs = {101, 102, 103};
- 아무런 초기화 값이 없이 선언만 한 경우, 정수와 char는 0, 실수는 0.0, 객체 배열은 null로 초기화 됨
> 배열 사용
- []
- index 혹은 첨자 연산자
- 배열의 위치를 지정하여 자료를 가져옴
- 모든 배열의 순서는 0부터 시작함
- n개의 배열은 0부터 n-1까지 자료 존재
|해보기| 배열 초기화하고 출력하기
18. Object Array
> 객체 배열 만들기
- reference variable을 선언하는 객체 배열
- 배열만 생성한 경우 요소는 null(주솟값)로 초기화 됨
- 각 요소를 new를 활용하여 생성하여 저장해야함

- 객체 배열 초기화

> 배열 복사하기
- 기존 배열과 같은 배열을 만들거나 배열이 꽉 찬 경우 더 큰 배열을 만들고 기존 배열 자료를 복사.
- System.arraycopy(src, srcPos,dest,destPos, length);

- 매개변수에 문제가 있을 경우, compile은 되지만 run에서 error 발생
> 객체 배열 복사하기
- shallow copy(얕은 복사): 배열 요소의 주소만 복사되므로 배열 요소가 변경되면 복사된 배열의 값도 변경됨

- deep copy(깊은 복사)

> enhanced for loop (향상된 for문)
배열 요소의 처음부터 끝까지 모든 요소를 reference할 때 편리한 반복문

19. multi-dimensional array
> 다차원 배열
- 2차원 이상의 배열
- 지도, 게임 등 평면이나 공간을 구현할 때 많이 사용
- two dimensional array 의 선언과 구조

- 선언과 초기화

20. ArrayList class
> ArrayList class
- 기존 배열은 길이를 정하여 선언하므로 사용 중 부족한 경우 다른 배열로 복사하는 코드를 직접 구현해야 함
- 중간의 요소가 삭제되거나 삽입되는 경우도 나머지 요소에 대한 조정하는 코드를 구현해야 함
- ArrayList class는 java에서 제공되는 object array가 구현된 class
- 여러 method와 property 등 사용하여 object array를 편리하게 관리
- 가장 많이 사용하는 object array class
- java doc: https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html
- [핫키] control + shift + o : organize import
> ArrayList class methods
요소를 추가하거나 제거할 때 각 내부에서 코드가 모두 구현되어 있으므로 배열을 직접 선언하여 사용하는 것보다 편함

> ArrayList class 사용하기
- ArrayList<E> 배열이름 = new ArrayList<E>();
- 사용할 객체를 E위치(generic)에 넣고, ArrayList method를 활용하여 추가하거나 참조

+ ArrayList에 <generic>을 명시해주지 않으면 data를 get할 때, object type으로 가져옴(+형변환으로 사용하기도 함)
21. eclipse java debugging
- break point 설정: line 더블클릭
- step into (F5): 함수 정의로
- step over (F6): 다음 줄로
- step return (F7): 이 전으로
- resume (F8): 다음 break point까지 진행