티스토리 뷰

기억하자정보

- throws IOException

LANIAN 2007. 3. 30. 09:51
- throws IOException

구문 그대로 해석을 해 보면, [입출력 예외를 던진다] 입니다.

자바에서는 런타임시에 발생할 수 있는 여러가지 예외들을 처리하는
별도의 메카니즘을 가지고 있습니다. throws 키워드는 실행시간에
예외가 발생했을 경우 해당 예외를 직접처리하지 않고 다른 곳에서
처리하도록 예외를 던지겠다 라는 의미입니다.

예외를 직접처리하는 경우와 던지는 경우의 예는 다음과 같습니다.

- 직접처리할 경우.

method a() {
  try {
    // 실행시간에 예외가 발생할 수 있는 코드들..
  } catch (Exception e) {
    // 예외발생시에 처리할 코드들..
  }
}

위와 같이 try - catch 블록을 써서 예외를 직접 받아서(catch) 처리할 경우는
try 블록 내에서 예외가 발생했을 때, 예외가 던져지고(throw), 이 던져진 예
외는 catch 블록에 의해서 받아져서 결국, catch 블록내의 코드들이 실행됩니다.
이 경우에는 예외가 발생하더라도 catch 블록에 의해 처리되고 난 후, catch
블록 이 후의 코드들이 계속해서 실행 될 수 있습니다.

- 예외를 던질 경우.

method a() throws Exception {
  // 실행시간에 예외가 발생할 수 있는 코드들..
}

이 처럼 예외를 직접처리하지 않고 던지는 경우에는, 예외가 발생하면 a() 메
소드의 예외발생 지점부터 그 후의 코드들은 실행이 중단되며, a() 메소드를
호출한 다른 메소드에게 예외가 던져집니다(throw). 만약 main() 메소드에서
a() 메소드를 호출했다면, 해당 예외는 main() 메소드에게로 전달되고, main()
메소드에서도 직접 처리하지 않고 예외를 던질경우 자바가상머신(JVM)이 해당
예외를 받아서 처리하게 됩니다. 즉, 이렇게 예외를 던질경우는 예외발생 즉시
코드의 실행은 중단되며, 결국 JVM에 의해 예외에 대한 레포트가 화면에 출력
되고 프로그램이 종료됩니다.

- 또한 다음과 같이 의도적으로 예외를 발생시켜서 던질 수도 있습니다.

method a() throws MyException {
  if (// 예외발생 조건이 만족되면..) {
    throw new MyException();
  }
}

위와 같이 의도적으로 예외를 발생시켜서 이를 try - catch 블록으로 처리 하던지
아니면 a() 메소드를 호출한 메소드로 던지던지 할 수 있습니다. 이 예제의 경우
위와 같이 하기 위해서는 다음과 같은 형태의 MyException 클래스가 정의되어 있
어야 합니다.

class MyException extends Exception {
  // MyException 클래스 정의 코드들..
}

위와 같이 예외를 던지기 위한 클래스 정의의 경우는 일반적으로 Exception
클래스를 상속받아서 작성하며, 이는 예외를 던지는 메카니즘을 구현하기 위한
방법입니다. 참고로 Exception 클래스는 Throwble 클래스의 하위 클래스이며
Throwble 클래스가 모든 예외나 에러 클래스들의 슈퍼클래스 이며, throws 메카
니즘의 출발점이 됩니다.

따라서 자바에서 모든 예외클래스 들은 Exception 클래스를 상속받고 있으며,
입출력(IO)에 관련되 예외 인스턴스를 정의한 클래스가 질문자 분께서 질문한
IOException 클래스 이며, java.io 패키지 내에 정의되어 있습니다. 따라서
코드내에 IOException 클래스에 대한 선언을 하기 위해서는 java.io 패키지를
import 해야 하며, 그렇지 않을 경우, 항상 java.io.IOException 과 같이 전체
경로를 명시해 줘야 JVM이 제대로 클래스를 찾아갈 수 있습니다.

- JFrame

JFrame 클래스는 윈도우 어플리케이션을 작성할 때 사용되는 클래스이며, 간단
히 말해서 윈도우에서 생성되는 창이라고 생각하시면 됩니다. 일반적으로 윈도
우 응용 프로그램들은 모두 사용자 인터페이스로 윈도우 창을 사용하고 있는
데, 자바에서 이런 윈도우 창을 만들경우 java.awt 패키지의 Frame 클래스를
상속받아서 작성합니다.

JFrame 클래스는 위에서 언급한 Frame 클래스를 확장한 클래스로써, 이는
javax.swing 패키지내에 정의되어 있습니다. 따라서 JFrame 클래스를 액세스
하기 위해서는 javax.swing 패키지를 import 해야 하며, 그렇지 않을 경우
javax.swing.JFrame 처럼 전체경로를 명시해 줘야 합니다.

참고로 말씀드리자면, java의 기본패키지는 모두 java. 으로 시작되면, java의
표준 확장 패키지는 javax. 로 시작됩니다. 윈도우 응용프로그램을 작성하는데
필요한 API들은 java.awt 패키지에 정의되어 있으며, 이를 좀더 확장하며 정의
된 패키지가 javax.swing 패키지 입니다.

출처 : Tong - sjhfeel님의 자바익히기 대작전!!통

'기억하자정보' 카테고리의 다른 글

[쿠키] 이전 페이지의 위치를 호출하는 스크립트  (0) 2008.01.18
자바 키보드 입력  (0) 2007.10.01
오브젝트에 대한 접근 - getElementById( )  (0) 2007.03.26
운영체제의 기능  (0) 2007.03.25
자바 this  (8) 2007.03.19
댓글
안내
궁금한 점을 댓글로 남겨주시면 답변해 드립니다.