목차

    ⏳ Time Log/1. One Day (Daily · TIL)

    [TIL] Day 14 — Java 예외처리 + 제네릭 + 컬렉션

    this.Serena 2026. 2. 19. 00:01

    [TIL] Day 14 — Java 예외처리 + 제네릭 + 컬렉션

    날짜: 2025-11-06
    기술 스택: Java 예외처리 Generics Collections
    부트캠프: 풀스택 개발자 부트캠프 3주차


    예외처리 (Exception Handling)

    try {
        int result = 10 / 0; // ArithmeticException
    } catch (ArithmeticException e) {
        System.err.println("0으로 나눌 수 없음: " + e.getMessage());
    } catch (Exception e) {
        e.printStackTrace(); // 스택 트레이스 전체 출력
    } finally {
        System.out.println("항상 실행");
    }
    에러 종류 설명
    컴파일 에러 실행 전 발생
    런타임 에러 실행 중 발생 (NullPointerException 등)
    논리적 에러 실행은 되지만 의도와 다르게 동작

    주요 예외 클래스

    예외 발생 상황
    NullPointerException null 객체 접근
    ArithmeticException 0으로 나누기
    ArrayIndexOutOfBoundsException 배열 범위 초과
    ClassCastException 잘못된 형변환

    throws 위임

    public void readFile(String path) throws IOException {
        FileReader reader = new FileReader(path);
        // 호출한 쪽에서 예외 처리
    }

    제네릭 (Generics)

    class Box<T> { // T: 타입 매개변수
        T item;
        void setItem(T item) { this.item = item; }
        T getItem() { return item; }
    }
    
    Box<String> strBox = new Box<>();
    strBox.setItem("hello");
    String s = strBox.getItem(); // 캐스팅 불필요
    
    Box<Integer> intBox = new Box<>();
    intBox.setItem(42);
    • 컴파일 시점에 타입 체크 → 런타임 ClassCastException 방지
    • 타입 매개변수 관례: <T> Type, <E> Element, <K> Key, <V> Value

    Collections Framework

    인터페이스 주요 클래스 특징
    List ArrayList, LinkedList 순서 유지, 중복 허용
    Set HashSet, TreeSet 중복 불허
    Map HashMap, TreeMap 키-값 쌍
    // ArrayList
    List<String> list = new ArrayList<>();
    list.add("Java");
    list.add("Spring");
    System.out.println(list.get(0)); // Java
    list.remove(0);
    System.out.println(list.size()); // 1
    
    // HashMap
    Map<String, Integer> map = new HashMap<>();
    map.put("a", 1);
    map.put("b", 2);
    System.out.println(map.get("a")); // 1
    map.remove("b");
    
    // HashSet
    Set<Integer> set = new HashSet<>();
    set.add(1); set.add(1); set.add(2);
    System.out.println(set.size()); // 2 — 중복 제거

    트러블슈팅

    catch 순서

    • 자식 예외를 먼저, 부모를 나중에. Exception이 먼저면 모든 예외를 잡아서 이후 catch 블록 실행 안 됨

    ArrayList vs Array 선택

    • 크기 고정이면 배열, 동적 크기 필요하면 ArrayList

    더 알아볼 것

    • Checked vs Unchecked Exception 실무 활용 기준
    • try-with-resources 문법 (Java 7+)
    • HashMap 내부 해시 코드 연산 원리
    • TreeMap / TreeSet 정렬 기준 (Comparable vs Comparator)
    • 제네릭 와일드카드 (<?>, <? extends T>, <? super T>)