본문 바로가기
혼공학습단

[혼공단12기] 혼자 공부하는 자바(개정판) 6주차(Chapter 10 ~ 11)

by #FF0000 2024. 8. 13.

 

 

 

 

혼자 공부하는 자바 - 예스24

혼자 해도 충분하다! 1:1 과외하듯 배우는 자바 프로그래밍 자습서(자바 21 최신 버전 반영)26명의 베타리더 검증으로, ‘함께 만든’ 입문자 맞춤형 도서『혼자 공부하는 자바』가 더욱 풍성한

www.yes24.com

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()