간단한 예제 문제만 풀어도 에러가 발생해서 종료될 때가 많다.
이렇게 발생하는 에러를 예측해서 미리 사전에 대응할 코드를 작성해 프로그램의 비정상적인 종료를 방지하고 정상적인 실행 상태를 유지하기 위해 예외 처리를 한다.
먼저 정리하고 갈 것은, 그동안 모든 문제를 에러라고 불렀는데 이제 에러와 예외로 구분해야한다는 것이다.
에러는 한번 발생하면 복구하기 어려운, 심각한 오류를 말하고 대표적으론 메모리 부족이나 스택오버플로우 등이 있다.
예외는 잘못된 사용 또는 코딩으로 인한 상대적으로 미약한 수준의 오류로 코드 수정 등을 통해 수숩이 가능한 걸 말한다.
예외처리는 위에서 예외의 경우에 관련한 것이다.
예외는 try -catch 문을 사용해서 처리할 수 있다.
try {
// 예외가 발생할 가능성이 있는 코드를 삽입
// 예외 없이 정상적으로 실행되면 catch블록은 실행되지 않고 finally 블록이 실행된다.
}
catch (ExceptionType1 e1) {
// ExceptionType1 유형의 예외 발생 시 실행할 코드
}
catch (ExceptionType2 e2) {
// ExceptionType2 유형의 예외 발생 시 실행할 코드
//이렇게 여러 종류의 예외를 처리할 수있다.
//일치하는 블록을 찾지 못하면 예외는 처리되지 못한다.
}
finally {
// finally 블록은 꼭 포함되어야하는 문법은 아니다.
// 예외 발생 여부와 상관없이 항상 실행
}
위 try- catch 문 외에 예외를 호출한 곳으로 다시 떠넘기는 방법도 있다.
반환타입 메서드명(매개변수, ...) throws 예외클래스1, 예외클래스2, ... {
...생략...
}
//예시
public class ThrowExceptionTest {
public static void main(String[] args) {
try {
throwException();
} catch (ClassNotFoundException e) {
System.out.println(e.getMessage());
}
}
static void throwException() throws ClassNotFoundException, NullPointerException {
Class.forName("java.lang.StringX");
}
}
//출력값
java.lang.StringX
여러 데이터를 그룹으로 묶어놓은 걸 컬렉션이라한다.
컬렉션을 다르는 데 있어 편리한 메서드들을 미리 정의해 놓은 것을 컬렉션 프레임워크 라고한다.
특정 자료구조에 데이터를 추가,삭제,수정,검색 등을 동작하는 편리한 메서드를 제공한다.

Collection
Map
1) List
List 인터페이스는 배열과 같이 객체를 일렬로 늘어놓는 구조이다.
객체를 인덱스로 관리하기 때문에 객체를 저장하면 자동으로 인덱스가 부여되고, 인덱스로 객체를 검색이나 추가,삭제할 수 있다.
(배열과 유사하다.)
List 인터페이스를 구현한 클래스로 ArrayList, Vector, LinkedList, Stack 등이 있다. (위 그림 참고)
ArrayList<타입 매개변수> 객체명 = new ArrayList<타입 매개변수>(초기 저장 용량);
ArrayList<String> container1 = new ArrayList<String>();
// String 타입의 객체를 저장하는 ArrayList 생성
// 초기 용량이 인자로 전달되지 않으면 기본적으로 10으로 지정된다.

LinkedList에서 데이터를 삭제하려면, 삭제할 요소의 이전 요소가 삭제할 요소의 다음 요소를 참조하도록 변경하면 된다. 데이처를 추가할 때도, 새로운 요소를 추가하고자하는 위치의 앞 뒤 요소 사이에 연결해주면 된다.
이렇게하면 배열처럼 데이터를 이동하기 위해 복사할 필요가 없어 처리 속도가 훨씬 빠르다.
정리하면, 데이터가 자주 변경될거 같다 -> LinkedList // 데이터의 개수는 변경되지 않는다 -> ArrayList