2. 배열의 생성과 선언


  • 배열의 선언 - 배열을 다루기 위한 참조변수의 선언
타입[] 변수이름;           // 배열을 선언(배열을 다루기 위한 참조변수 선언)
변수이름 = new 타입[길이]; // 배열을 생성(실제 저장공간을 생성)
int[] score;              // int타입의 배열을 다루기 위한 참조변수 score선언
score = new int[5];       // int타입의 값 5개를 저장할 수 있는 배열 생성

4~5. 배열의 길이, 배열의 초기화


4. 배열의 길이

  • 배열이름.length - 배열의 길이(int형 상수)
int[] arr = new int[5]; // 길이가 5인 int배열
int tmp = arr.length;   // arr.length의 값은 5
  • “배열은 한번 생성하면 실행 동안 그 길이를 바꿀 수 없다.”

  • 왜? - 할당된 연속적인 메모리 공간을 연장할 수 있다는 보장 X

  • 부족할 경우 - 더 큰 연속된 메모리 공간을 새로 찾아서 기존 데이터를 복사 후 추가

5. 배열의 초기화

  • 배열의 각 요소에 처음으로 값을 저장하는 것
int[] score = new int[5]; // 길이가 5인 int형 배열을 생성
score[0] = 50;            // 각 요소에 직접 값을 저장
score[1] = 60;
score[2] = 70;
score[3] = 80;
score[4] = 90;
// 더 간단한 방법
int[] score = new int[]{50, 60, 70, 80, 90};
int[] score = {50, 60, 70, 80, 90}; // new int[]를 생략할 수 있음
int[] score;
score = {50, 60, 70, 80, 90};          // 에러. new int[]를 생략할 수 없음
score = new int[]{50, 60, 70, 80, 90}; // OK.

6~7. 배열의 출력


int[] iArr = {100, 95, 80, 70, 60}
// 배열을 가리키는 참조변수 iArr의 값을 출력한다.
System.out.println(iArr); // [I@14318bb와 같은 형식의 문자열이 출력됨
// 예외적으로 character 배열의 경우
char[] chArr = {'a', 'b', 'c', 'd'};
System.out.println(chArr); // abcd가 출력됨
// 배열 iArr의 모든 요소를 출력
System.out.println(Arrays.toString(iArr)); // [100, 95, 80, 70, 60]가 출력됨

14~15. String 클래스


14. String 클래스

    1. String 클래스는 char[]와 메서드(기능)를 결합한 것
    1. String 클래스는 내용을 변경할 수 없다. (read only)
String a = "a";
String b = "b";
a = a + b // a 변수에 "a"가 "ab"로 바뀌는 것이 아니라 새로운 문자열 "ab"를 새로 참조

15. String 클래스의 주요 메서드

메서드설명
char charAt(int index)문자열에서 해당 위치(index)에 있는 문자를 반환
int length()문자열의 길이를 반환
String substring(int from, int to)문자열에서 해당 범위(from~to)의 문자열을 반환
boolean equals(Object obj)문자열의 내용이 같은지 확인
char[] toCharArray()문자열을 문자배열(char[])로 변환해서 반혼
String str = "ABCDE";
char ch = str.charAt(3); // 문자열 str의 4번째 문자 'D'를 ch에 저장
String str = "012345";
String tmp = str.substring(1, 4); // str에서 index범위 1~4의 문자들을 반환
System.out.println(tmp);          // "123" 출력

18~20. 2차원 배열


18. 2차원 배열

  • 테이블 형태의 데이터를 저장하기 위한 배열
int[][] score = new int[4][3]; // 4행 3열의 2차원 배열을 생성

20. 2차원 배열의 초기화

int[][] score = new int[][]{ {1, 2, 3}, {4, 5, 6} };
int[][] score = { {1, 2, 3}, {4, 5, 6} }; // new int[][] 생략
// 직관적으로 초기화
int[][] score = new int[][]{
								{1, 2, 3},
								{4, 5, 6}
							};

24. Arrays로 배열 다루기


배열의 비교와 출력 - equals(), toString()

int[]   arr   = {0, 1, 2, 3, 4};
int[][] arr2D = {{11, 12}, {21, 22}};
System.out.println(Arrays.toString(arr));       // [0, 1, 2, 3, 4]
System.out.println(Arrays.deepToString(arr2D)); // [[11, 12], [21, 22]]
String[][] str2D  = new String[][]{{"aaa", "bbb"}, {"AAA", "BBB"}};
String[][] str2D2 = new String[][]{{"aaa", "bbb"}, {"AAA", "BBB"}};
System.out.println(Arrays.equals(str2D, str2D2));     // false (1차원배열 비교 가능)
System.out.println(Arrays.deepEquals(str2D, str2D2)); // true  (다차원배열 비교 가능)

배열의 복사 - copyOf(), copyOfRange()

int[]   arr  = {0, 1, 2, 3, 4};
int[][] arr2 = Arrays.copyOf(arr, arr.length); // arr2 = [0,1,2,3,4]
int[][] arr3 = Arrays.copyOf(arr, 3);          // arr3 = [0,1,2]
int[][] arr4 = Arrays.copyOf(arr, 7);          // arr4 = [0,1,2,3,4,0,0]
int[][] arr5 = Arrays.copyOfRange(arr, 2, 4);  // arr5 = [2,3]
int[][] arr6 = Arrays.copyOfRange(arr, 0, 7);  // arr6 = [0,1,2,3,4,0,0]

배열의 정렬 - sort()

int[] arr = {3, 2, 0, 1, 4};
Arrays.sort(arr);                         // 배열 arr를 정렬
System.out.println(Arrays.toString(arr)); // [0,1,2,3,4]