차근차근 개발자 되기

Java

16일차: Java 예외처리/Thread- 2021.07.06

wellow 2021. 7. 6. 23:39

목차

1.    예외처리

2.    Thread

 

1. 예외처리                                     

 

1) 예외의 정의와 목적

예외: 프로그램이 실행되는 동안에 발생하는 예기치 않은 에러를 의미

예외처리: 프로그램 실행 시 발생할 수 있는 예외의 발생에 대비한 코드를 작성하는 것

예외처리를 하는 목적: 프로그램의 비정상적인 종료를 막기 위해서 사용

 

2) 예외 메시지 종류

printStackTrace(): 예외 정보를 자세하게 출력

형식: ex. e.printStackTrace();

결과: e.printStackTrace() = java.lang.Exception: 에러내용입니다.

              at ExeThrowException.main(ExeThrowException.java:5)

 

* ​printStackTrace() 메소드는 자료형이 void이므로 getMessage(), toString()과는 다르게 리턴값이 없다.

이 메소드를 호출하면 메소드가 내부적으로 예외 결과를 화면에 출력한다.

 

getMessage(): 예외 정보를 문자열로 반환

형식: ex. System.out.println(e.getMessage() );

결과: e.getMessage() = 에러내용입니다.

 

toString(): 간단한 예외 메시지 확인

형식: ex. System.out.println(e.toString() );

결과: java.lang.Exception: 에러내용입니다.

 

3) 예외처리 형식                                            

① try ~ catch 구문                              → ★DivideZeroExceptionHandling2 참고

   try{

           예외가 발생할 가능성이 있는 문장;

   }catch(예외클래스명  매개변수){

           예외 메시지;

   }

 

②  try ~ catch ~ catch 구문                 → ★MultiExceptionHandling / ExceptionEx3 참고

   try{

           예외가 발생할 가능성이 있는 문장;

   }catch(예외클래스명 매개변수){

           예외 메시지;

   }catch(예외클래스명 매개변수){

           예외 메시지;

   }

 

③ try ~ catch ~ finally 구문                  → ★MultiExceptionHandling1 참고

   try{

           예외가 발생할 가능성이 있는 문장;

   }catch(예외클래스명 매개변수){

           예외 메시지;

   }finally{                           // 주로 파일을 닫을 때, 데이터베이스 연결 끊을 때 사용됨

                                          예외가 발생하든, 발생하지 않든 무조건 실행됨;

   }

 

예외 떠넘기기(throws)    → ★ThrowsException / ThrowsExceptionHandling1 / ThrowsEx 참고

- 예외가 발생하는 메소드를 호출한 클래스에서 객체 생성 후 예외를 처리한다.

• 형식: throws 예외클래스

ex. public void check() throws Exception

 

프로그래머가 고의로 예외를 발생시키는 경우(throw)     → ★ThrowException 참고

• 형식: throw new 예외클래스();

ex. if( I == 3 ){ throw new ArrayIndexOutOfBoundsException();

 

*유의사항*

- 다중 catch 구문에서 Exception은 가장 마지막에 사용 가능

- throws로 예외를 던지는 클래스가 exception인데, 받는 클래스가 하위 클래스면 오류

 

4) 사용자 정의 예외처리 클래스              → ★UserDefineException / UserExceptionTest 참고

- 사용자 정의 예외처리 클래스를 만들 때, ‘extends’로 Exception 클래스를 상속받는다.

 

5) 예외처리 클래스

• ArithmeticException : 0으로 나눌 때

• ArrayIndexOutOfBoundsException : 배열의 범위를 벗어났을 때

• NumberFormatException : 숫자외의 값을 사용할 때

• NullPointerException : 객체를 생성하지 않고 멤버변수나 메소드를 호출할 때

• IOException : 입출력에 관련된 예외

• FileNotFoundException : 파일이 없을 때 발생

• SQLException : 데이터베이스 관련 예외

 

2. Thread                            

 

1) Thread의 정의와 사용

thread: 각 프로세스를 구성하는 작업 단위

• 동시에 여러가지 작업을 하는 경우에 사용 (ex. 게임, 채팅)

 

2) Thread 생성 방법

① Thread 클래스를 상속받아 생성(extends)                      → ★ThreadEnd 참고

 

② Runnable 인터페이스를 상속받아서 생성(implements)     → ★RunnableTest 참고

- 이미 다른 클래스를 상속받는 경우, 클래스의 다중 상속이 되지 않으므로 Runnable 인터페이스 상속

- Runnable 객체 생성 후, Thread 객체를 생성해서 Runnable 객체를 담고, Thread 객체로 run() 메소드 호출

 

3) Thread 생명 주기                                                   → ★ThreadLife 참고

Runnable :  새로 생성한 Thread를 start하면 Runnable 상태가 됨

             실행 가능한 상태( start() 메소드 호출한 상태)

Running : CPU를 점유하고 run() 메소드 내의 명령문을 실행하는 상태

실행상태(run() 메소드를 실행한 상태)

Block : 특정 메소드의 호출에 의해서 현재 실행중인 Thread가 CPU의 제어권을 잃어버린 상태

Dead : run() 메소드의 명령 수행이 끝났을 경우

 

4) Thread 우선순위                   → ★ThreadPriority / ThreadPriorityControl / ThreadSleep 참고

- Thread의 우선순위를 따로 설정하지 않으면 기본값은 5가 된다.

- 우선순위를 지정해도 출력 결과가 우선순위에 맞게 출력되지는 않는다.

- sleep() 메소드를 사용해 프로그래머가 강제로 block 상태로 만들 수 있다.

 

- 최저 순위 (MIN_PRIORITY:1)

- 순위 미지정 (NORM_PRIORITY:5)

- 최고 순위 (MAX_PRIORITY:10),