본 게시글은 대학 전공수업을 들으며 노션에 정리한 내용을 블로그로 옮긴 것으로, 노션 웹을 통해 최적화된 형태로 읽으시길 권장드립니다.(➡️ 노션 링크)
7강 - 패키지와 예외처리
패키지
: 관련있는 클래스와 인터페이스의 묶음.
패키지는 계층구조로, 클래스를
- 쉽게 찾고,
- 이름 충돌을 피하기 위해,
접근 범위를 제어하기 위함
시스템 패키지
JDK가 제공하는 클래스 라이브러리
- JDK와 함께 설치 됨.
- 클래스 파일들은 기능에따라 패키지에 묶여 분류됨.
- JDK₩lib₩src.zip에서 확인 가능.
최상위 패키지는 ‘java’ 패키지로 ‘.’로 상위/하위 패키지를 구분함.
- ex)
java.lang
,java.io
java.nio
,java.util
java.util.stream
…
사용자 패키지
package com.vehicle;
public class Car {
String szType =
"승용차"
;
}
위 코드를 실행시,
- 컴파일 결과 → Car.class 생성
- com.vehicle 패키지에 Car.class 저장
- com.vehicle은 컴파일 할 때
-d
옵션으로 지정함.>javac [Car.java](http://Car.java) -d D:₩javaStudy
- 작업공간₩프로젝트₩bin₩com₩vehicle₩Car.class 로 저장.
패키지 사용
Scanner클래스를 사용하려고 한다면
java.util.Scanner s = new java.util.Scanner(System.in);
여러번 사용한다면? 코드 맨 앞에 import문을 추가!
import java.util.Scanner;
... { Scanner s = new Scanner(System.in); }...
클래스 찾기
컴파일러는 환경변수 CLASSPATH에 지정된 경로에서 사용자 클래스를 찾을 수 있음.
- CLASSPATH의 경로는 jar파일을 포함할 수 있음
- CLASSPATH₩패키지₩클래스 또는, .jar₩패키지₩클래스
예외와 에러
에러
: 실행 중 발생하는 심각한 오류로 더 이상의 실행이 불가함.
예외
: 경미한 오류로 복구가 가능
예외처리
예외 발생시, JVM이 예외처리 코드에 예외 객체를 생성해 던짐(throw)
→ 예외처리 코드(Exception Handler)가 있으면, 예외 객체를 잡아(catch) 처리한 뒤 프로그램이 계속 수행됨.
- 예외 객체는 Exception클래스로 표현되며, 예외 발생 정보를 갖고있음.
더 자세하게 살펴보자면,
- Exception 클래스는 Throwable 클래스의 자식 클래스.
- Throwable클래스에서 toString, printStackTrace() 메소드 등을 상속해줌.
- ‘checked Exception’에 대해 예외가 발생 가능성이 있으면 반드시 예외처리를 해주어야 함.
- RuntimeException의 경우 예외처리를 안해도 됨 → 프로그램이 정확하게 작성되지 않은 경우.(Arithmetic / NullPointer /IndexOutOfBounds Exception 등)
직접처리
예외가 발생한 곳에서 try-catch 또는 try-catch-finally 구문을 사용해 예외 처리
try { ... }
catch (ExceptionType1 ex1) { ... }
catch (ExceptionType2 ex2) { ... }
finally { ... }
try 블록
- 예외 객체를 throw하는 문장, 예외 발생 가능성이 있는 메소드의 호출 부분
- 예외가 발생시 즉시 종료되며 catch 블록이 실행
catch 블록
- 처리하려는 예외 종류에 따라 작성 → 여러 예외 유형일 경우 여러 블록
- 예외 발생시 예외 객체와 catch블록의 매개변수를 비교, 적합한 하나만 실행됨.
finally 블록
예외 발생 여부와 무관하게 항상 실행됨.
필요에 따라 작성, 생략 가능.
ex ) try블록에서 open()했다면 finally에서 close()
예시 코드
package lecture07; public class ExceptionHandler { public static void main(String[] args) { try { // 예외가 발생할 수 있는 코드 블록 int[] numbers = {1, 2, 3}; System.out.println(numbers[4]); // 배열 인덱스 범위를 초과하여 예외 발생 int result = 10 / 0; // ArithmeticException 발생 System.out.println("결과: " + result); } catch (ArrayIndexOutOfBoundsException e) { // ArrayIndexOutOfBoundsException 처리 System.out.println("배열 인덱스가 잘못되었습니다."); } catch (ArithmeticException e) { // ArithmeticException 처리 System.out.println("0으로 나눌 수 없습니다."); } System.out.println("프로그램이 정상 종료됩니다."); } }
try-with-resources 구문
: 리소스 객체의 선언이 있는 try블록을 가짐
⇒ 리소스의 자동 반환을 보장함.
리소스 유형은 AutoCloseable 인터페이스를 구현한 클래스.
- 리소스는 사용후 close()호출을 통해 반환되어야 함.(File, Network, DB연결 등의 외부자원 사용)
간접처리
예외 발생 가능성이 있는 메소드의 선언에서, 괄호 다음에 throws 예외클래스
를 사용.
—> 그 메소드를 호출한 메소드에게 예외처리를 전달 / 위임. (=전파)
코드
class CharInput { int nInput; public char getInput() **throws IOException** { nInput = System.in .read(); //예외 발생 가능 return (char) nInput; } }
사용자 정의 예외
Exception 클래스를 상속받아 직접 예외 클래스를 작성할 수 있음.
코드
package lecture07; import java.util.Scanner; class MyException extends Exception { public MyException() { super(); } public String toString() { return "내가만든 예외~"; } } class MyExceptionTest { public void testFunc(int x) throws MyException { if (x > 10) { throw new MyException(); } System.out.println(x); } } public class CustomException { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int x = sc.nextInt(); try { new MyExceptionTest().testFunc(x); } catch (MyException ex) {t System.out.println(ex.toString() + " 너무 부드러우니"); ex.printStackTrace(); } } }
'Back-End > Java' 카테고리의 다른 글
(전공 정리) 11강 - 컬렉션 : JCF, Iterator, 자료구조, HashSet, ArrayList, LinkedList, HashMap (0) | 2024.06.22 |
---|---|
(전공 정리) 9강 - Java.io : 입출력스트림, 파일 입출력 (0) | 2024.06.22 |
(전공 정리) 8강 - java.lang 패키지: Object, String, StringBuffer (0) | 2024.06.22 |
(전공 정리) 6강 - 제네릭, 람다식 (0) | 2024.06.22 |
(전공정리) 5강 - 추상 클래스, 인터페이스, 다형성, enum, 익명클래스, 중첩클래스 (0) | 2024.06.22 |
(전공 정리)4강 - static, final, 오버로딩/오버라이딩, 상속, this, super, 메소드체이닝 (0) | 2024.06.22 |