본문 바로가기

Java/자바 기반 웹 개발자 과정 필기

[200317.17일차] 예외처리

반응형

 

 

예외처리

예외는 오류가 발생하더라도 오류를 우아하게 처리하게 합니다.

=> 기존에는 오류 발생 시, 프로그램이 멈춘다.

=> 예외 처리를 한다.

 

예외 (exception) : 잘못된 코드, 부정확한 데이터, 예외적인 상황에 의하여 발생하는 오류

=> 런타임 에러

=> 프로그램 실행 중 어떤 이유들로 프로그램이 강제 종료됨

 

예외처리 -> 프로그램이 종료되는 상황(런타임에러)이 왔을때

어떻게 대응할지에 대한 명세를 작성해주는것

==> 그러면 예외가 발생해도 프로그램이 종료되지 않고 계속 동작

 

 

 

자바는 오류가 나면 그 줄에서 바로 실행이 멈춘다.

 

try{ 예외가 발생할 수 있는 코드들 }

catch(발생한 예외){ 예외가 발생하면 실행하는 코드들 }

 

 

 

7번 라인에서 예외가 발생 => 8번 라인 catch문을 실행 => 멈추지 않고 이어서 나머지 코드들 실행

 

 

처음부터 오류가 발생할거라고 예상하고 예외처리를 하기보단, 마지막 테스트 후 예외처리를 한다.

 

 

Exception도 객체다.

 

 

 

 

try 안의 코드들이 정상 작동하면 catch문이 실행되지 않는다.

 

 

 

 

 

try {}

catch {}

finally {}  <= 예외가 발생하던 안하던 무조건 실행된다.

 

      왼쪽 - 오류X   /   오른쪽 - 오류O

 

 

 

 

예제

 System.err.println("~~~") // 빨간색으로 에러 표기

 

 

 

 

 

 

 

 

 

 

 

 

 

체크 예외와 비체크 예외

체크예외 => 컴파일러가 예외처리를 강요 ( IO 익셉션 같은 것 )

비체크 예외 => 컴파일러가 신경안쓰는 예외

 

 

 

 

 

 

 

 

강제 IOException 발생

 

 

+ Throw

 

 

 

 

 

 

 

스레드

=> 동시에 여러개의 프로그램을 실행하는 효과를 가진다.

 

동시 처리가 불가능하면 (한개의 스레드만 있으면)

메신저 => 메세지를 보내고 있는동안은 메세지를 받을 수 없다.

동시처리를 해야 한다. => 동시에 병렬적으로 최소 2개 이상의 스레드가 작동중이다.

병렬처리 => ex) 음악을 들으며 운동을 한다.

 

 

하나의 프로그램 => 프로세스

=> 하나의 프로세스 안에는 스레드가 돌아가고 있어야된다.

 

 

멀티 프로세스 

프로세스를 여러 개를 동시에 실행 시킬 수 있는것.

 

 

멀티 스레드

다중 스레딩(multi_threading)은 하나의 프로그램이 동시에 여러 가지 작업을 할 수 있도록 하는 것

각각의 작업을 스레드(thread)라고 불린다.

 

 

 

 

병렬 처리를 구현하는 방법

 

1. 다중 프로세스

=> 각 프로세스가 별도의 메모리 공간을 할당받기 떄문에,

각 프로세스간에 데이터를 어떻게 주고 받을 것 인지가 이슈 (ICP)

 

 

2. 다중 스레드 (우리가 해볼 것)

=> 각 스레드(명령처리흐름)들이 하나의 프로세스 안에서 공통된 메모리 공간을 공유하기 때문에

교통정리가 이슈

 

 

 

 

 

 

 

스레드 생성 방법

 

 

1. Thread 클래스를 상속 받는 방법

 

기존의 순서

 

start()가 실행되면

파생스레드가 run()으로 일을 하러 가고,

메인스레드가 동시에 start()다음의 코드들을 실행을 한다.

 

=> 일꾼 두명이 서로 출력을 하려고 하는 구조

사이좋게 번갈아가면서X, 우선순위에 따라

-> 메인 3줄실행하고..파생1줄하고..메인1줄하고..파생10줄하고..

-> 파생 2줄 실행하고..메인 3줄 실행하고..파생5줄 실행하고..

==> 매번 다르다.

 

하나의 우선순위를 높여주면 => 다른 것들의 성능이 떨어진다.

 

2. Runnable 인터페이스를 상속 받는 방법

 

 

 

둘다 결과는 똑같다.

 

=> Thread 클래스 상속은 다중 상속이 불가능하기 때문에, Runnable 인터페이스를 사용하는 것이 좋다.

 

 

 

 

 

 

매번 출력되는 순서가 달라진다.

 

 

 

 

 

 

 

 

 

말 객체 하나마다 0~3000까지의 랜덤한 값을 가진다.

=> 13번 줄 Thread.sleep(sleepTime) : 랜덤한 값 동안 말을 잠깐 기다리게 가지고 있는다.

 

sleep => 교통정리를 할 때 사용한다.

 

 

 

 

 

로켓발사 예제

 

1. Runnable을 implement받는 CountDownThread클래스 작성

-> 20~0까지 카운트 다운 출력하는 클래스

 

2. Runnalbe을 implement받는 RocketThread클래스 작성

-> 10초 - 안전장치 분리, 6초 - 발사준비 완료, 0초 - 발사

 

3. main을 갖는 RocketTest

20 19 ....11 10 안전장치 분리.. 7 6 발사준비 완료.. 0 발사

 

 

 

 

 

 

스레드의 상태

 

 

 

동기화

=> 상황을 똑같이 만드는 것

 

병목현상, 스레드락을 방지하는 것.

( 병목현상, 스레드락 : 문 하나에 여려개가 들어오려다 충돌하는거 )

 

 

하나의 메소드에, 한번에 하나의 스레드만 들어가게 하는게 동기화

 

 

 

 

 

 

 

 

 

둘이 동시에 실행되면 출력된다

 

 

 

 

 

 

synchronized 키워드를 사용해 동기화를 하면 동시에 실행하지 않는다.

 

 

 

 

 

 

 

반응형

'Java > 자바 기반 웹 개발자 과정 필기' 카테고리의 다른 글

[200320.20일차]  (0) 2020.03.20
[200319.19일차] 네트워크 프로그래밍  (0) 2020.03.19
[200318.18일차] 입출력  (0) 2020.03.18
[200316.16일차]  (0) 2020.03.16
[200313.15일차]  (0) 2020.03.13
[200312.14일차]  (0) 2020.03.12
[200311.13일차] 상속  (0) 2020.03.11