이상민
[혼공자바 6주차] Chapter 10~11 본문
10-1 예외 클래스
- 예외란?
- 실행 중 발생하는 오류를 객체로 표현한 것.
- 프로그램이 비정상 종료되지 않도록 예외 처리가 필요.
- 예외의 종류
- 일반 예외
- 컴파일 단계에서 예외 처리 강제
- 예: ClassNotFoundException, IOException, InterruptedException
- 실행 예외
- 실행 중 발생, 예외 처리 선택
- 예: NullPointerException, ArrayIndexOutOfBoundsException, NumberFormatException
- 일반 예외
- 대표 실행 예외
- NullPointerException → null 객체 접근 시 발생
- ArrayIndexOutOfBoundsException → 잘못된 배열 인덱스
- NumberFormatException → 잘못된 문자열 숫자 변환
- ClassCastException → 잘못된 타입 변환



10-2 예외 처리
1. 기본 구조
try {
// 예외가 발생할 가능성이 있는 코드
} catch (ExceptionType e) {
// 예외가 발생했을 때 실행할 코드
} finally {
// 예외 발생 여부와 관계없이 항상 실행되는 코드 (선택사항)
}
2. 다중 catch
try {
// 예외 발생 가능 코드
} catch (FileNotFoundException e) {
// 파일 관련 예외 처리
} catch (IOException e) {
// 입출력 관련 예외 처리
} catch (Exception e) {
// 그 외 모든 예외 처리 (가장 마지막에 위치해야 함)
}
3. 예외 처리 방법 2가지
1. 직접 처리 (try-catch-finally)
- 프로그램 내에서 예외를 직접 잡아서 처리합니다.
- try {
int result = 10 / 0;
} catch (ArithmeticException e) {
System.out.println("0으로 나눌 수 없습니다.");
}
- 예외가 발생해도 프로그램이 비정상 종료되지 않고 계속 실행됩니다.
2. 떠넘기기 (throws 키워드 사용)
- 예외를 메서드에서 처리하지 않고, 호출한 쪽으로 예외를 넘깁니다.
- public void readFile(String fileName) throws IOException {
FileReader reader = new FileReader(fileName);
}
- throws 뒤에 발생할 수 있는 예외 타입을 명시합니다.
- 이 메서드를 호출하는 곳에서는 반드시:
- 다시 예외를 처리하거나 (try-catch)
- 또 다른 메서드로 예외를 떠넘겨야 합니다.
-
public static void main(String[] args) throws IOException {
readFile("data.txt"); // IOException 발생 가능
}
- 예외를 떠넘기는 방식은 라이브러리 개발이나 일괄 예외 처리 시 유용합니다.
- 단, 반드시 예외가 처리될 곳이 최종적으로 있어야 프로그램이 정상 작동합니다.
| 직접 처리 | try-catch-finally로 예외 처리 | try { ... } catch { ... } |
| 떠넘기기 | throws로 호출자에게 예외 전달 | void foo() throws IOE |




11-1 java.lang 패키지
- Object
- 모든 클래스의 최상위 부모
- 주요 메서드: toString(), equals(), hashCode(), clone()
- Wrapper 클래스
- 기본 타입을 객체로 다룰 수 있게 해줌
- Integer, Double, Boolean 등
- 자동 박싱/언박싱 지원
- String / StringBuilder / StringBuffer
- String: 불변(immutable) 문자열
- StringBuilder: 가변(mutable), 동기화 X, 빠름
- StringBuffer: 가변, 동기화 O, 멀티스레드 환경 안전
- Math
- 수학 관련 유틸 클래스
- abs(), random(), pow(), round() 등
- System
- 시스템 관련 기능
- exit(), currentTimeMillis(), gc()


11-2 java.util 패키지 (자주 쓰는 유틸 모음)
- 컬렉션 프레임워크
- List : 순서 O, 중복 O (예: ArrayList, LinkedList)
- Set : 순서 X, 중복 X (예: HashSet, TreeSet)
- Map : key-value 쌍, key 중복 X (예: HashMap, TreeMap)
- Arrays
- 배열 관련 유틸
- sort(), binarySearch(), copyOf(), toString()
- Collections
- 컬렉션 관련 유틸
- sort(), max(), min(), shuffle()
- Date / Calendar
- Date: 날짜와 시간 표현 (구버전)
- Calendar: 날짜 계산 가능
- (실무에서는 java.time 패키지(LocalDate, LocalDateTime 등) 권장)
- Random
- 난수 생성기
- nextInt(), nextDouble()


기본 숙제(필수) : 10-2 확인 문제 2번 문제 풀고 과정 설명하기

① 생성자나 메소드의 선언 끝 부분에 사용되어 내부에서 발생된 예외를 떠넘긴다.
맞는 설명입니다.
throws는 메소드 또는 생성자 선언부에서 사용되며, 해당 메소드에서 발생할 수 있는 예외를 호출한 쪽으로 떠넘기겠다는 의미입니다.
② throws 뒤에는 떠넘겨야 할 예외를 쉼표(,)로 구분해서 기술한다.
맞는 설명입니다.
throws IOException, SQLException처럼 여러 개의 예외를 쉼표로 구분하여 나열할 수 있습니다.
③ 모든 예외를 떠넘기기 위해 간단하게 throws Exception으로 작성할 수 있다.
맞는 설명입니다.
예외를 포괄적으로 처리하고 싶을 때 throws Exception으로 모든 예외를 떠넘길 수 있습니다. 다만 좋은 방식은 아니지만, 설명은 맞습니다.
④ 새로운 예외를 발생시키기 위해 사용된다.
틀린 설명입니다.
throws는 예외를 발생시키는 것이 아니라 예외를 떠넘기는 데 사용됩니다.
새로운 예외를 발생시킬 때는 throw 키워드를 사용합니다.
예: throw new IOException("오류 발생")
추가 숙제(필수) : java.lang 패키지에 속하는 주요 클래스와 용도를 정리해서 포스팅하기
1. Object
- 모든 클래스의 최상위 부모 클래스입니다.
- 자바의 모든 클래스는 Object를 자동으로 상속받습니다.
- 주요 메서드:
- toString() – 객체 정보를 문자열로 반환
- equals() – 객체 비교
- hashCode() – 해시코드 반환
- clone() – 객체 복사 등
2. String
- 문자열을 다루기 위한 클래스 (불변, immutable).
- 한 번 생성된 문자열은 변경되지 않습니다.
- "문자열" 리터럴은 내부적으로 String 객체입니다.
- 주요 메서드: length(), charAt(), substring(), equals(), concat() 등
3. Math
- 수학 연산을 위한 메서드 제공 클래스 (static 메서드만 존재)
- 주요 메서드:
- abs(), sqrt(), pow(), max(), min(), random()
4. System
- 시스템 관련 기능을 제공하는 클래스
- 주요 기능:
- System.out.println() – 출력
- System.currentTimeMillis() – 현재 시간
- System.exit(0) – 프로그램 종료
- 환경 변수 접근 등
5. Wrapper 클래스
| int | Integer | 숫자형 데이터를 객체로 다룸 |
| double | Double | 실수형 객체 |
| boolean | Boolean | 논리값 객체 |
| char | Character | 문자형 객체 |
| byte | Byte | 바이트 객체 |
| short | Short | 작은 정수형 객체 |
| long | Long | 긴 정수형 객체 |
| float | Float | 단정도 실수 객체 |
- 주요 기능:
- 박싱(Boxing), 언박싱(Unboxing)
- parseInt(), valueOf(), toString()
6. Class
- 클래스 정보를 표현하는 클래스
- 리플렉션(reflection) 기능을 제공하여 클래스 이름, 메서드, 필드 등을 동적으로 접근 가능
Class<?> clazz = String.class; System.out.println(clazz.getName());
'혼공' 카테고리의 다른 글
| [혼공자바 5주차] Chapter 08~09 (4) | 2025.08.08 |
|---|---|
| [혼공자바 4주차] Chapter 07 (4) | 2025.07.27 |
| [혼공자바 3주차] Chapter 06 (1) | 2025.07.20 |
| [혼공자바 2주차] Chapter 04 ~ 05 (1) | 2025.07.07 |
| [혼공자바 1주차] Chapter 01 ~ 03 (1) | 2025.07.01 |