https://www.yes24.com/Product/Goods/124821050
6주차(24.8.12- 8.18) Chapter 10 ~ 11
기본미션
▶ 확인문제 10-3 풀이(p.486)
Q3. 다음과 같은 메소드가 있을 때 예외를 잘못 처리한 것은 무엇입니까?
public void method1() throws NumberFormatException, ClassNotFoundException {...}
① try {
method1();
} catch(Exception e) {
}
② void method2() throws Exception {
method1();
}
③ try {
method1();
} catch(Exception e) {
} catch(ClassNotFoundException e) {
}
④ try {
method1();
} catch(ClassNotFoundException e) {
} catch(NumberFormatException e) {
}
정답 : 3번
③ catch(Exception e)가 ClassNotFoundException을 포함한 모든 예외를 잡기 때문에, catch(ClassNotFoundException e)는 사실상 도달할 수 없는 코드입니다. 일반적인 예외(Exception)가 더 구체적인 예외(ClassNotFoundException)를 포함하므로, 구체적인 예외는 일반적인 예외 이후에 올 수 없습니다.
따라서 이 코드는 비효율적입니다.
sol)
① catch(Exception e)는 모든 예외를 잡기 때문에 NumberFormatException과 ClassNotFoundException도 잡을 수 있습니다. 그러나 이 예외를 너무 일반적으로 처리하고 있기 때문에, 보다 구체적인 예외를 처리하지 않는다는 점에서 좋지 않습니다. 예외를 구체적으로 처리하는 것이 코드의 명확성과 유지보수성을 높입니다.
② method1()이 던질 수 있는 예외를 throws 절에 명시하지 않고 있습니다. method1()에서 NumberFormatException과 ClassNotFoundException을 던질 수 있기 때문에, method2()도 이 예외들을 선언하거나 처리해야 합니다. 예를 들어, throws NumberFormatException, ClassNotFoundException을 추가해야 합니다.
④ ClassNotFoundException을 먼저 잡고 NumberFormatException을 다음에 잡습니다. method1()이 던질 수 있는 예외를 적절히 처리하며, 구체적인 예외(NumberFormatException)는 그보다 더 일반적인 예외(ClassNotFoundException) 다음에 처리되므로, 올바른 예외 처리 방식입니다.
해설 도움 : ChatGPT 4o mini
선택미션
▶ java.lang 패키지에 속하는 주요 클래스와 용도 정리
1. Object
- 용도: 모든 클래스는 이 클래스를 상속받습니다. Object는 Java의 최상위 클래스이며, 객체 비교, 해시 코드 생성, 문자열 표현, 동기화 등 객체 관련 기본 메서드를 제공합니다.
- 주요 메서드: equals(), hashCode(), toString(), clone(), notify(), notifyAll(), wait()
2. Class
- 용도: 클래스와 관련된 메타데이터를 제공하는 클래스입니다. 런타임에 클래스 정보를 얻고, 클래스의 메서드와 필드를 조작하는 데 사용됩니다.
- 주요 메서드: getName(), getSuperclass(), getDeclaredMethods(), forName(), newInstance()
3. String
- 용도: 불변 문자열을 다루는 클래스입니다. 문자열 조작과 관련된 많은 메서드를 제공합니다.
- 주요 메서드: length(), charAt(), substring(), concat(), toUpperCase(), toLowerCase(), trim(), split()
4. StringBuilder
- 용도: 가변 문자열을 다루는 클래스입니다. 문자열을 효율적으로 수정하고 조작할 때 사용됩니다.
- 주요 메서드: append(), insert(), delete(), replace(), reverse(), toString()
5. StringBuffer
- 용도: StringBuilder와 유사하지만, StringBuffer는 스레드 안전성을 제공하며 동기화된 문자열 버퍼입니다.
- 주요 메서드: append(), insert(), delete(), replace(), reverse(), toString()
6. Math
- 용도: 수학적인 상수와 메서드를 제공하는 클래스입니다. 기본적인 수학 연산 및 수학 상수들을 제공합니다.
- 주요 메서드: abs(), sqrt(), pow(), max(), min(), random(), sin(), cos(), tan()
7. System
- 용도: 시스템 수준의 유틸리티를 제공하며, 표준 입력, 출력, 오류 스트림에 접근하고, 시스템 속성 및 환경 변수를 다룰 수 있습니다.
- 주요 메서드: currentTimeMillis(), exit(), getProperty(), setProperty(), gc(), getenv()
8. Thread
- 용도: 스레드를 생성하고 조작하는 클래스입니다. 멀티스레딩을 위한 기본적인 기능을 제공합니다.
- 주요 메서드: run(), start(), sleep(), join(), interrupt(), getState()
9. Runnable
- 용도: 스레드 실행을 위한 작업 단위를 정의하는 인터페이스입니다. Thread 클래스와 함께 사용하여 스레드를 실행할 수 있습니다.
- 주요 메서드: run()
10. Exception
- 용도: 일반적인 예외를 나타내는 클래스입니다. 모든 예외 클래스의 상위 클래스이며, 프로그램에서 발생할 수 있는 다양한 예외 상황을 처리합니다.
- 주요 메서드: getMessage(), printStackTrace()
11. RuntimeException
- 용도: 런타임 예외의 최상위 클래스입니다. 프로그래머의 실수로 인해 발생할 수 있는 예외를 나타냅니다.
- 주요 메서드: getMessage(), printStackTrace()
'혼공학습단' 카테고리의 다른 글
[혼공단] 혼공학습단 12기 활동 회고(24. 7. 1 ~ 24. 8. 18) (0) | 2024.08.17 |
---|---|
[혼공단12기] 혼자 공부하는 자바(개정판) 5주차(Chapter 08 ~ 09) (0) | 2024.07.28 |
[혼공단12기] 혼자 공부하는 자바(개정판) 4주차(Chapter 07) (0) | 2024.07.22 |
[혼공단12기] 혼자 공부하는 자바(개정판) 3주차(Chapter 06) (0) | 2024.07.20 |
[혼공단12기] 혼자 공부하는 자바(개정판) 2주차(Chapter 04-05) (0) | 2024.07.08 |