패키지란, 관련이 있는 클래스와 인터페이스 묶음을 뜻한다.
.class 파일이 저장된 폴더JDK가 제공하는 클래스 라이브러리
jar 파일로 압축되어 있었음C:\Program Files\Java\jdk-21\lib\src.zip에서 소스 확인⭕java 패키지. 사용java.lang 패키지에 존재java.io.IOExeption과 같이 완전한 이름으로 표현package com.vehicle;
public class Car {
String szType = "승용차";
}
Car.class가 만들어짐com.vehicle 패키지에 저장됨-d 옵션 사용하여 저장함javac Car.java -d // D:\javaClasses
// 이 경우, D:\javaClasses\com\vehicle\Car.class
// 1) 직접 작성하는 방법 (패키지 경로 포함한 완전한 클래스 이름 사용)
java.util.Scanner s = new java.util.Scanner(System.in);
// 2) import 구문 사용 방법
import java.util.Scanner;
Scanner s = new Scanner(System.in);
import 문import 패키지이름.*;
import 패키지이름.클래스이름;
※ Java 프로그램에서 import java.lang.*; 구문은 자동 포함됨
Car 클래스를 사용할 수 없음//package com.vehicle;
import com.vehicle.*;
class MyCar extends Car {} //오류
class MyBus extends Bus {}
package com.vehicle;
class Car {} // default, 같은 패키지에서만 사용 가능
package com.vehicle;
public class Bus extends Car {} // public, 모든 곳에서 사용 가능
A.class가 위치한 경로 또는 A.class를 포함하고 있는 jar 파일의 존재를 알아야 함CLASSPATH에 지정된 경로에서 사용자 클래스를 찾을 수 있음💡 환경변수
CLASSPATH
- CLASSPATH의 경로는
jar파일을 포함할 수 있음- 프로그램에서
graphics.Circle클래스를 사용하는 경우
CLASSPATH=경로;a.jar라고 가정- 이때,
경로\graphics\Circle.class혹은a.jar에서\graphics\Circle.class가 있어야 함
(Exception)란?💡 에러
Error와 예외Exception의 차이
- 에러: 실행 중 발생하는 심각한 오류로 더 이상 실행 불가
- 예외: 경미한 오류로 복구 가능 (예외적 사건이 발생한 것 뿐)
throw-catch
// 프로그램 실행 중 예외 상황 발생했을 때 과정
// 1. 예외처리 코드에 *예외 객체*를 생성하여 던짐 (throw)
// 2. 예외처리 코드(exception handler)가 있으면
// 예외 객체를 잡아(catch) 처리한 뒤, 프로그램을 계속 실행한다.
→ 오류 메시지 출력 후 프로그램이 즉시 비정상적으로 종료됨
💡 예외객체는
Exception클래스(또는 하위 클래스)로 표현되며 예외 발생 정보를 가지고 있음
Exception 클래스는 Throwable 클래스의 자식 클래스toString(), printStackTrace() 메소드 등을 상속 받음
checked Exception: 반드시 명시적인 예외처리가 필요함RuntimeException: 예외처리를 안 해도 됨ArithmeticException, NullpointerException, IndexOutOfBoundsException 등예외가 발생한 곳에서 예외 객체를 잡아서 처리
try-catch | try-catch-finally
// try-catch-finally 구문
try {}
catch (ExceptionType1 ex1) {}
catch (ExceptionType2 ex2) {}
finally {}
// 실행 중 예외 발생 → catch 구문으로 이동
// try 구문에서 예외 발생하지 않음 → catch구문 실행X
// finally 구문은 예외 발생 여부와 무관하게 항상 실행됨
일반 코드와 예외 처리 분리 → 가독성↑
예외 발생 가능성이 있는 문장을 가진 메소드의 선언에서 괄호 다음에 throws 예외클래스를 사용
class CharInput {
int nInput;
public char getInput() throws IOException {
nInput = System.in.read(); //예외 발생 가능
return (char) nInput;
}
}
그 메소드를 호출한 메소드에게 예외 처리를 전달 또는 위임하는 것
// 메소드 선언에서 throws 절이 표시된 메소드의 호출은 예외 처리가 필요함
try {
c = obj.getInput();
} catch (IOException ex) {
...
}
(checked Exception)을 발생시킬 수 있는 메소드FileInputStream(String name) throws FileNotFoundExceptionread() throws IOExceptiontry-with-resources 구문try(리소스 생성 구문) {
} catch {
} finally {
}
try 블록close() 메소드 호출을 finally 블록에 넣어야 함try-with-resourcs에서는 자동 반환 보장