목차

    불편함을 코드로 지웁니다.

    개발 공부 노트, 개발 도구와 문제를 해결한 과정, AI 프롬프트와 Obsidian 활용법을 정리합니다.

      ⏳ Time Log/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>)