Notice
Recent Posts
Recent Comments
Link
관리 메뉴

브래의 슬기로운 코딩 생활

JAVA 프로그래밍 11주차 정리 본문

2-1/JAVA 프로그래밍

JAVA 프로그래밍 11주차 정리

김브래 2023. 5. 16. 23:15

MVC Model  VS  MVP, MVVM, MVI

MVC Model

Model : 사용자가 원하는 데이터나 정보

View  사용자의 요청 화면 및 사용자에게 제공되는 응답 화면

Controller : 사용자의 요청을 처리하고, 그 요청에 따른 전체적인 흐름을 제어


MVC + S Model (Controller는 요청 제어만, 실제 처리는 Service가)

Service : 실제 업무를 처리 담당. 비지니스 로직(business logic, 업무 로직)
Repository : Data Access를 담당(DB, File 등에 C.R.U.D - 데이터 처리 기본 연산)

예외 처리 (exception handling)


예외(exception)

정의

프로그램이 실행되는 동안에 발생하는 정상적인 흐름을 전복(disrupt)시키는 사건(event)
 
프로그램의 비정상적인 종료 및 잘못된 실행 결과를 발생시키거나 컴퓨터 시스템 파괴 등의
심각한 문제를 발생시키는 상황
 

발생 원인

예외들은 사용자의 오류, 프로그래머의 오류, 물리적인 자원들의 오류에 의해 발생됨
부적절한 메소드 호출과 실행
사용자가 잘못된 데이터를 입력한 경우
사용을 위해 열어야 하는 파일을 발견할 수 없는 경우
네트워크 연결이 통신하는 동안 유실되거나 JVM이 메모리 이상 등 시스템 에러가 발생한 경우
 

자바 예외의 특징

자바에서는 예외를 객체로 취급한다

- Throwable 클래스 또는 그의 서브 클래스(Exception, RuntimeException)들 중에 하나로부터 확장된 클래스의 객체

- 예외처리에 관련된 메소드가 정의되어 있음

 

언어 자체에서 예외 처리문을 제공한다

- try-catch-finally, try-with-resource

 

throw 문을 제공한다

- 명시적으로 예외를 일으키는데 사용하는 문장 //예외 처리기(exception handler)가 반드시 필요함

 

예외의 분류

Exception : 발생할 경우 프로그래머에 의해 회피될 수 있도록 정의된 예외

checked exception //IOException, SQLException

unchecked exception //ArithmeticException, IndexOutOfBoundsException

 

Error : 발생할 경우 프로그래머의 노력으로 복구가 불가능한 시스템적 오류

// OutOfMemoryError, LinkageError, NoClassDefFoundError, InternalError

checked exception

programmer-defined exception
상속 관계 : Exception 클래스로부터 상속된 클래스
원인 : 사용자 실수 또는 프로그래머가 발견하지 못한 문제에 의해 발생
프로그래머가 작성한 예외 처리기가 존재하는지 컴파일러가 검사함
// 예외 처리기가 존재하지 않는 경우 컴파일 에러를 발생함

 

unchecked exception

system-defined exception or predefined exception
// 프로그램이 정상적으로 실행되는 동안 발생할 수 있는 미리 정의되어 있는 시스템 정의 예외

 

상속 관계 : RuntimeException 클래스에서 상속된 클래스
원인 : 자바 시스템에 의해 자동적으로 발생
컴파일 시점에 체크되지 않음

예외 발생

정의

예외가 일어나는 것
 

종류

시스템에 의해 묵시적으로 발생
// 대상 : 시스템 정의 예외
 
프로그래머에 의해 명시적으로 발생
// 대상 : 프로그래머 정의 예외뿐 아니라 시스템 정의 예외도 가능
// throw 문 사용

 

throw

형식 : throw ThrowableObject;
// ThrowableObjectThrowable 클래스나 그의 서브 클래스로 부터 생성된 객체를 의미한다.
역할
- 프로그래머가 정의한 예외뿐 아니라 시스템 정의 예외를 발생할 수 있다

예외 처리

정의

예외가 발생하여도 안전한 종료를 수행하거나 또는 프로그램의 실행을 계속하도록 발생한 예외를 처리하는 행위
 

장점

에러 처리를 위한 별개의 통로를 제공하여 안전한 프로그램 작성이 가능함
응용 프로그램의 신뢰성을 높일 수 있고, 예외 검색과 처리를 위한 프로그램 코드를 소스에 간결하게 삽입할 수 있음

 

예외 처리 방법

try-catch-finally

// 예외가 발생할 수 있는 모든 위치에 사용할 수 있다.
 

try-with-resource

// 닫아야하는 자원(예를 들면 스트림)을 사용하는 경우에 활용함.
 

exception propagation(예외 전파)를 이용한 처리

// 메소드 호출 스택을 이용해서 런타임 시스템이 적절한(appropriate) 예외 처리기에 전달한다.

// 전파를 위해서 전파 경로를 설정해야 한다.

 

try ~ catch ~ finally

형식
try {
    //
예외 검사 
} catch (ExceptionType1 e1) {
    // …
} catch (ExceptionType2 e2) {
    // …
} finally { 
    //
반드시 실행해야 할 것이 있는 경우
  
// 자원 해제, 파일 닫기 등 수행
}

 

try 블록

예외 발생을 검사함

catch 블록

해당 예외 처리함, 에러 처리기를 찾기 위해서 catch 구문의 나열된 순서대로 검사함.
// Exception 유형의 예외가 다른 예외들보다 먼저 catch 구문에 나오는 경우 이후
catch 블록은 도달 불가(Unreachable catch block ...) 오류가 발생함에 유의해야 한다.

finally

예외 발생, continue, break, return에서도 반드시 실행

try-with-resource

형식
try ( closable objects
선언 및 생성  ){
    //
예외 검사 
} catch (
ExceptionType id) {
    // …
} catch (
ExceptionType id) {
    // …
} finally {   
    //
반드시 실행해야 할 것이 있는 경우
}


예외 전파

예외 전파의 정의

예외를 발생한 곳에서 처리하지 않고, 특정 메소드에서 모아 처리할 수 있도록 전파하는 것
// 예외가 발생한 메소드를 호출한 메소드로 예외를 전파하여 특정 메소드와 함께 모아 처리하는 것
 

예외 전파의 장점

예외 처리 코드의 분산을 방지
예외 처리를 위한 코드 양의 감소
제어의 주 흐름이 불분명해지는 현상을 방지

 

예외 전파 순서 

발생한 예외를 처리하는 catch블록이 존재하지 않는 경우에는 호출한 곳으로 전파함
// 메소드 호출 체인의 역순서로 예외가 전파됨
 
대응되는 예외 처리기를 발견하지 못하면 에러 메시지를 출력하고 종료함
// 프로그램 진입점에 디폴트 예외 처리기가 존재한다고 생각하면 된다.
// 예외가 처리되고 난 후 에 실행되는 곳은 해당 예외가 처리한 try 구문 바로 다음의 문장이 실행된다.

다양한 예외 처리 상황

예외를 처리한 후 예외를 발생시킨 메소드의 재호출이 필요하거나 실행을 계속하는 경우
예외가 일어 났을 때 프로그램을 종료하거나 메소드의 대안적인 결과의 반환이 필요한 경우
발생한 예외를 적절히 처리한 후, 호출자에게 동일 예외 또는 다른 예외를 재발생시킬 필요가 있는 경우

 

예외 처리 관점에 따른 비교

개발 관점

 

개발자가 정확한 디버깅이 가능하도록 발생한 예외에 관한 정보를 조금 더 구체적이고

자세하게 화면에 출력하는 것을 권장함

 

서비스 관점

 

사용자의 신뢰성 확보를 위해 안내 메시지로 처리하는 것을 권장함

 

예외 종류에 따른 처리

시스템 정의 예외의 처리

- 모든 메소드 내에 예외 처리기를 두거나 메소드 선언 부분에 기술하는 것은 불가능함.
필요에 따라서는 예외 처리기를 둘 수 있음
- 예외가 발생했는데 프로그래머가 처리하지 않는 경우에는 디폴트 예외 처리기(메시지 출력)에 의해 처리됨
 

프로그래머 정의 예외의 처리

- 발생할 수 있는 예외에 대하여 예외 처리기(exception handler)를 작성하거나 런타임 시스템이
예외를 처리가 가능한 곳으로 전파해야 함
- 예외를 처리하지 못하는 경우 비정상적인 종료 발생