morijwana
수로그
morijwana
전체 방문자
오늘
어제
  • 분류 전체보기
    • 강의노트
    • Machine Learning
      • Pandas
      • NLP
    • Computer Science
      • Linux
      • TIL
    • Development
      • React
      • Swift
      • Javascript
    • 스터디 기록
      • Clean Code
      • 구글 BERT의 정석
      • 개발도서
      • 기타
    • Problem Solving
      • Baekjoon
      • ICPC Sinchon
    • 끄적
      • 끄적끄적
      • 요리왕

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Solution Challenge
  • Python
  • 백준
  • 회고
  • Pandas
  • 개발도서
  • GDSC Sookmyung
  • ML
  • 프로그래밍언어론
  • 데이터사이언스
  • gdsc
  • nlp
  • 자연어처리
  • cs224n
  • 민트하임스터디
  • Bert
  • 구글BERT의정석
  • 구부정스터디
  • 프레임워크없는프론트엔드개발
  • word2vec

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
morijwana

수로그

강의노트

[2021-1 프로그래밍언어론] Chapter 14: Exception Handling and Event Handling

2021. 6. 1. 22:21

Introduction to Exception Handling

예외 처리가 불가능하다면, 예외가 발생했을 때 제어권은 운영체제로 이동하고, 에러 메세지가 표시되며 프로그램은 종료된다. 반면에 예외 처리가 가능하다면, 프로그램은 몇몇 예외에 대하여 적절한 처리를 함으로써 프로그램이 종료되지 않고 계속 실행될 수 있도록 할 수 있다.

예외(Exception)은 드물게 발생하는 이벤트로, 하드웨어나 소프트웨어에 의해 발견되며 특별한 처리가 필요하다. 이 특별한 처리를 exception handling이라고 부르며, 예외가 발견된 이후에 예외를 처리하는 코드 단위인 exception handler에 의해 진행된다.

 

Exception Handling Alternatives 예외 처리가 불가능한 경우 대안들

  • 보조 파라미터를 사용하거나, 서브프로그램에서 발생한 문제 상황에 따른 예외 코드를 리턴하도록 한다.
  • 예외 발생 시 특정 label parameter로 이동하여 처리하도록 한다.
  • exception handling이 가능한 서브프로그램에 넘긴다.

 

Advantages of Built-in Exception Handling 내장 예외 처리의 장점

  • 에러를 추적하는 코드를 작성하는 것은 매우 번거로운데, 예외 처리가 내장되어 있다면 이런 코드를 작성하지 않아도 된다.
  • 개발자로 하여금 발생할 수 있는 다양한 에러를 고려하여 코드를 작성하도록 한다.
  • 나를 호출한 쪽으로 예외를 전달함으로써 예외 핸들링 코드를 상위 레벨에서 재사용할 수 있다.

 

Exception Handling Examples in Some Languages

1. C++

try {
 // code that is expected to raise an exception
} catch (formal parameter) { // formal parameter에는 타입 이름만 명시.
 // 예외 발생 시 가장 위의 catch문부터 차례대로 formal parameter를 확인하며
 // 발생한 예외와 맞는 formal parameter를 가진 catch문을 실행함
 // handler code
} catch (formal parameter) {
...
} catch (formal parameter {
 // handler code
}
  • formal parameter: 각 catch 문에 들어가는 formal parameter는 고유해야 하며, 변수 이름 없이 타입명만 들어가도 된다. handler에 예외에 대한 정보를 전달하는 용으로 사용된다. 생략 가능하며, 이 경우 위에서 핸들되지 않은 남은 예외를 핸들하게 된다.
  • throwing exceptions: 예외를 고의적으로 발생시킬 수 있다. expression 없이 작성하는 경우는 핸들러 안에서만 다시 예외를 발생시킬 때만 허용된다.
throw [ expression ];
  • 핸들러가 실행된 후, 제어 흐름은 마지막 핸들러의 끝으로 이동한다.
  • 처리되지 않은 예외는 예외가 발생한 함수를 타고 main 함수까지 전파된다. 핸들러가 발견되지 않는다면 기본 핸들러가 호출된다.

 

 

2. Java

C++을 베이스로 OOP를 한스푼 섞은 형태다. 모든 예외들은 Throwable 클래스의 자손 클래스다. Throwable 클래스는 2개의 하위 클래스를 갖는다.

  • Error: 사용자에 의해 핸들되지 않는다.
  • Exception: 사전에 정의된 2개의 하위 클래스(IOException, RuntimeException)를 갖는다. 사용자가 정의한 예외들은 보통 이 클래스의 하위 클래스다.
  • C++와는 다르게, formal parameter 자리에 이름이 있으며 Throwable 클래스의 자손 클래스인 파라미터가 와야 한다.
  • 에러를 발생시킬 때 new 키워드와 함께 exception 객체를 생성해 발생시킨다.
throw new MyException();
  • try 문에서 핸들러를 찾지 못하면 가장 가까운 try문을 계속 탐색하며 핸들러를 찾는다. 만약 해당 메서드에서 핸들러를 찾지 못하면 해당 메서드를 호출한 곳으로 예외가 전파된다. 끝까지 핸들러를 찾지 못하면 프로그램이 종료된다.
  • 모든 예외를 처리하길 원한다면 try 구조문의 가장 마지막에 Exception 클래스에 대한 예외 처리 핸들러를 추가해주면 된다.
  • unchecked exceptions: Error와 RunTimeException과 얘네들 자손 클래스들이다.
  • checked exceptions: unchecked exceptions를 제외한 모든 예외는 checked exceptions다. checked exceptions는 throws 절에 포함시켜 caller 쪽에서 해결하거나, 메서드 안에서 직접 예외 처리를 해주어야 한다. 해주지 않으면 컴파일 에러가 발생한다.
  • 부모 클래스가 throws 하지 않는 예외를 자식 클래스가 throws할 수 없다.
  • 예외를 throws하는 메서드를 호출하는 메서드에서는 예외를 처리하기 위한 3가지 대안을 가진다:
    • 내가 직접 예외를 처리한다(try / catch).
    • 핸들러 안에서 다시 예외를 throw한다. -> 보통 발생한 예외와 다른 타입의 예외를 발생시킨다.
    • 내 throws 절에 예외를 추가하고, 나를 호출한 caller에게 책임을 전가한다.
  • finally: try 구조가 끝나는 부분에 작성한다. try 안의 명령문의 정상적 실행 여부와 상관없이 무조건 실행된다.
try {
 for (int i = 0; i < 13; i++) {
  ...
   if ( ... ) return;
}
}
finally {
 // do something
} // end of try construct
  • assert: 실행 중 상태값을 확인하는 용도다. condition이 참이면 넘어가고, 거짓이면 AssertionError가 발생한다. 두번째 문장은 condition이 거짓이면 expression의 값이 예외 메세지로 보여진다.
assert condition;
assert condition: expression;

 

Introduction to Event Handling

Event는 바우스 클릭이나 그래픽 버튼이 클릭되었을 때처럼 특별한 일이 발생했을 때의 알림이다. event handler는 이벤트에 응답하여 실행되는 코드의 세그먼트다.

 

The Java Event Model

  • GUI 컴포넌트와 사용자의 상호작용은 event listeners가 감지 가능한 이벤트를 만들어 낸다.
  • event listeners는 인터페이스로 작성되어 있으며, 사용자가 표준 프로토콜에 맞춰 이벤트를 핸들링할 수 있도록 한다. 리스너를 구현하는 클래스는 해당하는 리스너를 implement해야 한다.
저작자표시 (새창열림)

'강의노트' 카테고리의 다른 글

[2021-1 운영체제] Chapter 3: 프로세스와 스레드  (1) 2021.06.18
[2021-1 프로그래밍언어론] Chapter 12: Object-Oriented Programming  (0) 2021.06.01
[2021-1 프로그래밍언어론] Chapter 11: Abstract Data Types and Encapsulation Constructs  (0) 2021.06.01
[2021-1 프로그래밍언어론] Chapter 10: Implementing Subprograms  (0) 2021.05.30
[2021-1 데이터마이닝및분석] Chapter 2: Data (3) Similarity  (0) 2021.04.16
    '강의노트' 카테고리의 다른 글
    • [2021-1 운영체제] Chapter 3: 프로세스와 스레드
    • [2021-1 프로그래밍언어론] Chapter 12: Object-Oriented Programming
    • [2021-1 프로그래밍언어론] Chapter 11: Abstract Data Types and Encapsulation Constructs
    • [2021-1 프로그래밍언어론] Chapter 10: Implementing Subprograms
    morijwana
    morijwana
    행복한 휴학생의 devlog

    티스토리툴바