Notice
Recent Posts
Recent Comments
Link
«   2026/04   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
Archives
Today
Total
관리 메뉴

이상민

[혼공자바 6주차] Chapter 10~11 본문

혼공

[혼공자바 6주차] Chapter 10~11

sm1118sm 2025. 8. 16. 16:56

 

10-1 예외 클래스

  1. 예외란?
    • 실행 중 발생하는 오류를 객체로 표현한 것.
    • 프로그램이 비정상 종료되지 않도록 예외 처리가 필요.
  2. 예외의 종류
    • 일반 예외
      • 컴파일 단계에서 예외 처리 강제
      • 예: ClassNotFoundException, IOException, InterruptedException
    • 실행 예외
      • 실행 중 발생, 예외 처리 선택
      • 예: NullPointerException, ArrayIndexOutOfBoundsException, NumberFormatException
  3. 대표 실행 예외
    • 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 패키지

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

 

11-2 java.util 패키지 (자주 쓰는 유틸 모음)

  1. 컬렉션 프레임워크
    • List : 순서 O, 중복 O (예: ArrayList, LinkedList)
    • Set : 순서 X, 중복 X (예: HashSet, TreeSet)
    • Map : key-value 쌍, key 중복 X (예: HashMap, TreeMap)
  2. Arrays
    • 배열 관련 유틸
    • sort(), binarySearch(), copyOf(), toString()
  3. Collections
    • 컬렉션 관련 유틸
    • sort(), max(), min(), shuffle()
  4. Date / Calendar
    • Date: 날짜와 시간 표현 (구버전)
    • Calendar: 날짜 계산 가능
    • (실무에서는 java.time 패키지(LocalDate, LocalDateTime 등) 권장)
  5. 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