Ch07: Arrays and ArrayLists

Arrays

  • 배열은 객체, 즉 참조 자료형이다.
  • 원소들은 원시 자료형 또는 참조 자료형 둘다 될 수 있다.
  • 배열 안의 모든 원소들의 자료형은 동일해야 한다.
  • 배열의 인덱스는 int 형이거나, int 형으로 암묵적으로 변환될 수 있어야 한다. 즉 byte, short 또는 char 는 가능하지만, long 은 불가능하다.

Declaring and Creating Arrays

int[] c = new int [12];

int[] c;
c =  new int[12];

int[] a, b, c;

// a는 int형 배열 참조 변수이지만 b, c는 int형 변수이다.
int a[], b, c 
  • 배열 선언시, 각 원소는 기본값으로 초기화된다.
  • 원시 자료형 → 0
  • booleanFalse
  • 참조 자료형 → null

Examples Using Arrays

  • final 변수는 사용되기 전에 반드시 초기화되어야 하며, 이후 수정될 수 없다.
final int ARRAY_LENGTH = 10;
// 또는
final int ARRAY_LENGTH;
ARRAY_LENGTH = 10;
  • final 변수가 초기화된 후 수정하려는 시도는 컴파일 에러를 발생시킨다.
  • final 변수가 초기화되기 전 사용하려는 시도는 컴파일 에러를 발생시킨다.

Exception Handling: Processing the Incorrect Response (Cont.)

예외

  • 프로그램이 실행하는 동안 발생하는 문제 표시하는 것이다.

예외 처리

  • 예외가 발생 시 종료하는 대신에, 문제를 처리한 후 프로그램이 계속 실행할 수 있도록 하는 것이다.
try {
	// 예외가 발생할 코드
	// 예외가 발생하면 실행되지 않아야 할 코드
}
catch (예외) {
	// 예외를 다루는 코드
	// 매개 변수는 예외 처리기가 처리하는 예외 타입을 나타낸다.
}

예외 매개 변수의 toString 메소드

try {
	++frequency[response[answer]];
} catch (ArrayIndexOutOfBoundsException e) {
	// 예외 객체에 암묵적으로 저장된 에러 메시지를 얻어 표시하기 위해
  // 암묵적으로 예외 객체의 toString 메소드를 호출한다.
	System.out.println(e);
}

Enhanced for Statement

for (parameter : arrayName)
	statement;
  • 매개 변수는 자료형과 식별자를 가진다.
    • 매개 변수의 자료형은 배열 원소의 자료형과 상응해야한다.
    • 식별자는 배열의 연속적인 값을 나타낸다.
  • arrayName은 반복할 배열이다.
  • 배열의 원소를 획득하기 위해서만 사용 가능하고, 원소 수정이 불가능하다.

Passing Arrays to Methods (Cont.)

  • 객체는 메소드에 전달될 수 없다.

Caller

int[] array = { 1, 2, 3, 4 };
modifyArray(array);

Callee

public static void modfiyArray(int[] array) {
	for (int cnt = 0; cnt < array.length; cnt++) {
		array[cnt] *= 2;
}

자바에서 모든 인자에는 값이 전달된다

  • 메소드 호출은 두 가지 값의 종류로 메소드에 전달할 수 있다.
    • 원시형 값의 복사본
    • 객체의 참조값의 복사본
class testClass {
	public static void testMethod(int num2, int[] array2) {
	...
	}
}
...
	int num1 = 5;
	testClass.testMethod(num1, array1);
...
  • testClass.testMethod 의 매개 변수로 num1 전달된다. → num1의 값이 복사되어 num2 에 저장된다.
  • testClass.testMethod 의 매개 변수로 array1array1 객체를 참조하는 참조값이 array2에 저장된다. → testClass.testMethod에서 array2 수정 시 array1 도 수정된다.

Multidimensional Arrays

int[][] c = new int[3][4];

int[][] d = new int[2][];
d[0] = new int[5];
d[1] = new int[3];

Variable-Length Argument Lists

public static double average(int num, double... numbers) {
	...
}
...
average(3, d1, d2, d3);
average(3, d1, d2, d3, d4);
  • ...는 매개 변수 리스트의 마지막에 오직 한 번만 가능하다.
  • 가변 인자는 자동으로 매개 변수에 의해 참조된 배열에 놓인다.

Class Arrays

Arrays 클래스

  • 배열 조작을 위한 static 메소드를 제공한다.
    • sort
    • binarySearch
    • equals
    • fill
  • 배열의 원소가 원시 자료형인 경우와 참조 자료형인 경우를 위해, 메소드들은 오버로딩되어 있다.

System 클래스

  • static arraycopy 메소드는 한 일차원 배열을 다른 일차원 배열로 복사한다.
// 메소드 예시
import java.util.Arrays;
Arrays.sort(doubleArray);
Arrays.fill(filledIntArray, 7);
System.arraycopy(intArray, 0, intArrayCopy, 0, intArray.length);
boolean b = Arrays.equals(intArray, intArrayCopy);
int location = Arrays.binarySearch(intArray, 5);

Introduction to Collections and Class ArrayList

Collection

  • 자바 API에 의해 사전 정의된 데이터 구조이다.
  • 인덱스는 0부터 시작한다.

Generic

class Person<T> {
	public T info;
}

public class genericTest {
	public static void main(String[] args) {
		Person<String> p1 = new Person<String>();
		Person<StringBuilder> p2 = new Person<StringBuilder>();
	}
}
  • 클래스 내부에서 사용할 자료형을 외부에서 지정하는 기법이다.
  • 클래스 정의 시 info 의 자료형을 확정하지 않는다.
  • 인스턴스 생성 시 자료형을 지정한다.

ArrayList

import java.util.ArrayList;
...
	ArrayList<String> items = new ArrayList<String>();
	ArrayList<String> items = new ArrayList<>(); // Java SE7 and higher
...
  • java.util 패키지의 클래스이다.
  • 배열 크기가 가변적으로 변하는 선형 리스트이다. 저장 용량을 초과하면, 부족한 만큼 저장 용량을 증가시킨다.
    • ArrayList 기본 용량은 10이다.
  • Tcollection에 저장된 원소의 자료형이다.
    • 이러한 종류의 클래스가 제네릭 클래스이다.
  • 오직 참조 자료형만이 사용될 수 있다.
  • 다양한 메소드를 제공한다.
    • add : 원소를 리스트의 마지막에 추가하거나 특정 인덱스에 추가한다.
    • clear : 모든 원소를 삭제한다.
    • contains: 특정값을 포함하면 true, 아니면 false 를 반환한다.
    • get: 특정 인덱스의 원소를 반환한다.
    • indexOf : 특정 원소가 처음 나타나는 인덱스를 반환한다.
    • remove : 특정 값이 처음 나타나는, 또는 특정 인덱스의 원소를 삭제한다.
    • size : 저장된 원소 개수를 반환한다.
    • trimToSize : 현재 원소의 개수로 ArrayList의 용량을 조절한다.
items.add("red");
items.add(0, "yellow"); 
items.contains("red");
items.get(i);
items.remove("yellow");
items.remove(1);
items.size();

좋은 웹페이지 즐겨찾기