Skip to content

week-3-day-3-report주차 week-3-day-3-report일차 일일보고서

날짜: 2025년 07월 02일

컬렉션과 제네릭 - 타입 안전성 확보하기

ArrayList에 제네릭을 사용하지 않으면 어떤 문제가 생기는지 직접 경험하는 실습으로 시작했다. ArrayList list = new ArrayList()로 선언하고 String과 Integer를 섞어서 넣은 후, 꺼낼 때 ClassCastException이 발생하는 것을 목격했다.

“컴파일은 되는데 실행할 때 터진다”는 것이 얼마나 위험한지 학생들이 체감했다. 제네릭을 사용하면 컴파일 타임에 오류를 잡을 수 있다는 장점을 이해했다.

ArrayList를 사용해 Todo 객체만 저장할 수 있는 타입 세이프한 컬렉션을 만들었다. 이제 형변환 없이도 안전하게 객체를 꺼낼 수 있게 되었다.

주 강사가 컬렉션 프레임워크의 주요 인터페이스들을 소개하는 동안, 실습 강사로서 ArrayList의 주요 메서드들을 활용한 실습을 도왔다. forEach, removeIf 같은 Java 8의 기능도 간단히 소개했다.

프로그램이 점점 더 체계적이고 안전해지는 것을 학생들도 느끼는 것 같았다. “이제 진짜 프로그램 같다”는 평가가 나왔다.

  • 제네릭의 <> 문법이 이해가 안 된다는 질문. 타입 매개변수의 개념을 상자에 라벨을 붙이는 것으로 비유.
  • ArrayList에서 Todo 대신 다른 것을 넣으려고 하니 컴파일 에러. 이것이 바로 타입 안전성임을 설명.
  • 왜 List list = new ArrayList<>()로 선언하는지 질문. 인터페이스 타입으로 선언하는 장점 설명.
  • Java 7의 다이아몬드 연산자 <>가 뭔지 질문. 타입 추론 기능 설명.

제네릭은 Java의 중요한 기능이지만 초보자에게는 복잡해 보인다. 하지만 ClassCastException을 직접 경험한 후에는 필요성을 바로 이해했다.

“먼저 문제를 경험하고, 해결책을 배운다”는 접근법이 계속 효과적임을 확인했다. 이론만 설명했다면 이해가 어려웠을 것이다.

컬렉션 프레임워크는 방대하지만, 지금은 ArrayList만 잘 사용해도 충분하다. 나머지는 필요할 때 배우면 된다.

  • 제네릭의 상한/하한 와일드카드는 나중에 필요시 설명
  • Stream API는 기초가 탄탄해진 후 도입 예정
  • 다른 컬렉션 클래스(HashMap, HashSet) 소개 시기 검토