2차원 배열
- 행렬 구조

int[][] scores = new int[2][3];
- 구현 방법: 1차원 배열이 다시 1차원 배열을 참조

scores.length
scores[0].length
scores[1].length
int[][] scores = new int[2][];
scores[0] = new int[2];
scores[1] = new int[3];

scores.length
scores[0].length
scores[1].length
타입[][] 변수 = {{값1, 값2, ...}, {값1, 값2, ...}, ...};
int [][] scires = {{95,84}, {93,86}};
int score = scores[0][0];
int score = scores[1][1];
객체를 참조하는 배열
참조 타입 배열
- 요소에 값(정수, 실수, 논리값)을 저장하지 않고, 객체의 번지를 가지고 있음

String[] strArray = new String[3];
strArray[0] = "Java";
strArray[1] = "C++";
strArray[2] = "C#";

String[] strArray = new String[3];
strArray[0] = "Java";
strArray[1] = "Java";
strArray[2] = new String("Java");
System.out.println(strArray[0] == strArray[1]);
System.out.println(strArray[0] == strArray[2]);
System.out.println(strArray[0].equals(strArray[2]));
배열 복사
- for문을 이용해서 요소 하나를 복사
- System.arraycopy()를 이용한 복사
System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length);
String[] oldStrArray = {"java", "array", "copy"};
String[] newStrArray = new String[5];
System.arraycopy(oldStrArray, 0, new StrArray, 0, oldStrArray.length);

향상된 for문
- 배열이나 컬렉션을 좀 더 쉽게 처리
- 반복 실행 윙 루프 카운터 변수나 증강식 사용하지 않음

int[] scres = {95, 76, 32, 34, 65};
int sum = 0;
for(int score : scores){
sum = sum + score;
}
System.out.println("점수 총합 = " + sum);
정리
- 배열: 같은 타입의 데이터를 연속된 공간에 나열하고, 각 데이터에 인덱스 부여한 자료구조
- 인덱스: 0부터 시작해 0~(배열길이-1)까지 범위 가짐
- 배열 선언: 타입[] 변수; 형태로 선언
- 배열 생성: {값1, 값2, 값3, ...}과 같이 값 목록으로 생성하거나, new 타입[길이]로 생성
- 배열 길이: 배열에 저장될 수 있는 항목의 수, 배열변수.length
- 다차원 배열: 타입[][] 변수 = new 타입[길이1][길이2];로 생성
- 향상된 for문: for(타입 변수 : 배열) {...}