- 예외(Exception) 처리

프로그램 실행중 예기치 않은 사소한 애러들

표준 API에는 프로그램 실행중 발생할 수 있는 예외들을 추상화하여 예외클래스들을 제공하며 JVM은 해당 예외 인스턴스를 생성하여 예외를 발생시킨다.


예외클래스들도 Object를 상속받는다.

예외가 발생했을시 프로그램이 셧다운된다.

예외 이후의 프로그램 코드는 실행되지않는다.

발생시킨 예외 인스턴스를 개발자가 명시적으로 처리(Handling)하지 않을 경우 JVM은 예외 관련 메시지를 홤녀에 출력한 후 프로그램을 강제 종료한다.


- 예외 직접 처리 (try - catch - finally)

예외가 발생한 메소드 내에서 직접 처리하기 위한 구문


try : 예외가 발생할 가능성이 있는 실행코드들, 주로 입출력, 네트워크 처리, 데이터베이스 연동등

catch : 예외가 발생한 객체를 받아서 처리한다.

finally : 예외가 발생 여부와 관계없이 항상 실행되는 코드, 주로 입출력 리소스해제, 데이터 베이스 연결 종료등, 

리소스를 해제하는코드(끊는코드)할때 주로 사용, 

return이 있어도finally 구문은 실행된다.

system.exit(0)를 실행시키면 JVM이 종료되기때문에 finally가 실행되지않는다.


NullPointerException : 값이 할당되지않았을때 사용할려고할때

ArithmeticException : 값을 0으로 나눳을때

ClassCastException : 클래스 형변환이 잘못됫을때(부모-자식관계가 아닐때 형변환)

ArrayIndexOutOfBoundsException : 배열 인덱스를 넘어섯을때

printStackTrace : 모든 예외를 추적한다. 디버깅용(사용자 출력용 아님)


- 예외 간접 처리(throws)

메소드명 throws 에외 클래스1, ~~

throws는 발생된 예외를 메소드내에서 직접 처리하는 것이 아니라 호출한 메서드에게 발생한 예외 인스턴스를 떠넘겨 간접적으로 처리하는 방법이다.


메인에서 throws 를 준다는건 예외처리가되는것이 아니다.

어딘가에서는 try 문으로 예외처리를 해줘야한다.


예외를 두가지로 구분한다.


1. compile check exception - 주 목적이다.

2. runtime exception - 주로 앞에서 다룬 내용은 이 예외이다.


예외 처리 대상은 컴파일 체크 예외(1. compile check exception) 만 해당된다

2는 개발자의 실수이기때문에 예외처리를 한다는거 자체가 말이안된다.


Object <- Throwable <- Exception <- RuntimeException 이 위에서 한 2번의 예외처리이며 4개를 빼고난 나머지는 모두 1번이다.


read 클래스에서 throws로 호출하는쪽에서 예외처리하도록 되어있다.

이유는 어떤 예외가 발생하지모르기때문에 호출하는쪽에서 처리하도록한다.


프로그램이 일정 타이밍에 멈춰있는걸 블락메소드라고 한다.


- 예외 인위적 발생(throw)

예외는 기본적으로 JVM에 의해 발생하지만, 개발자가 프로그램 로직 상 강제적으로 예외를 발생 시킬 수 있다.

throw new 예외클래스();

----------------------------- 오전끝!! -----------------------------


- 사용자 정의 예외 클래스

잘 알려진 예외(Built-in)가 아닌 프로그램 로직 상 필요한 더 구체적인 예외처리를 위해 개발자가 직접 예외클래스를 만들어 사용할 수 있다.

java.lang.exception클래스를 확장(상속)하여 사용자 정의 에외클래스를 정의한다.


오버라이딩시에 메서드 선언부가 같아야한다. 라는 제약조건이있는대 그때 Excetion 까지 같아야 오버라이딩이다.

 제외하면 새로정의된 함수가 된다. 

하지만 접근제한자의 경우 더 넓어야하지만 예외처리는 같거나 더 자식일경우만(구체적) 가능하다. 그말인즉슨 예외처리할 클래스를 확장한 클래스까지 가능하다.


- 자료구조와 Collection Framework

배열 : 하나의 타입형만 가능, 한번 선언하면 바꿀수 없다. <-- 이와 같은 문제점이 있기때문에 collection 가 나왔다.


자료구조 : 다수의 데이터에 대한 효율적 관리와 검색 속도 향상을 위한 데이터 저장 구조

- 자바 콜렉션 프레임워크(Collection Framework)

데이터 집합(자료구조)을 추상화하여 만든 정형화(표준화)된 틀

자바 표준 API에는 배열의 제약사항을 개선하여 다수의 데이터를 체계적이고 효율적으로 관리(저장, 검색, 수정, 삭제)할 수 있도록 자료구조를 표준화(정형화)시킨 인터페이스돌과 클래스들의 묶음을 제공한다.

표준화된 틀 이라서 프레임워크라고 한다.(프레임워크란 말을 쓸수있다면 인터페이스가 구현되어있다고 본다.)

인터페이스가 잘 나타나 있다.

클래스중에서 특정 클래스 라이브러리로 만들어진것을 프레임워크라고한다.


컴포넌트 : 인터페이스를 구현한 클래스

내맘대로 만들면 클래스 인터페이스를 구현하면 컴포넌트


해시 = 동그랑땡 = 여러가지를 뭉쳐놓음

인터페이스가 비슷하기때문에 적당히 비슷하게 쓸수 있다.


set : 순서가 없으며 중복을 허용하지않는 특정의 데이터 구조(보따리)

List : 순서가 있으며 중복을 서용하는 특정 데이터 구조

Queue : 선입 선출

Stack : 선입 후출

---- 여기까지 콜렉션

Map(위와 다르게 상속이 아니고 단독이다) : Key와 Value를 쌍으로 관리하는 데이터 구조


set 메소드 구현실습
















'JAVA 계열 > 자바 & 안드로이드 교육' 카테고리의 다른 글

7월 3주차 4일 (3주)  (0) 2015.07.23
7월 3주차 2일 (3주)  (0) 2015.07.21
7월 2주차 4일 (2주)  (0) 2015.07.16
7월 2주차 3일 (2주)  (0) 2015.07.15
7월 2주차 2일 (2주)  (0) 2015.07.14
Posted by moyaiori
,