프로그래밍/JAVA

제네릭(Generics)

Cognivox 2025. 4. 22. 16:04
반응형

✅ 제네릭?

"자료형을 나중에 정하는 틀(도구)"
정확히 어떤 자료형(문자, 숫자 등)이 들어올지 미리 고정하지 않고,
쓸 때 정해서 쓰는 문법


📦 진짜 쉬운 예시

💡 "박스"를 떠올려봄!

  • 박스를 만들어 놓고
  • 어떤 걸 넣을지는 나중에 결정하는 것

🟫 일반 박스 (제너릭 X)

  • 그냥 박스 하나 있음
  • 사과 넣어도 되고, 책 넣어도 되고, 컵 넣어도 됨
  • 그런데 꺼낼 때 뭐가 들었는지 모르면? ❗ 위험함

✅ 제너릭 박스 (제너릭 O)

  • “이 박스엔 오직 사과만 넣을 수 있음” 이라고 정해놓고 쓰는 것 🍎
  • 또는 “이 박스는 숫자만!”
  • 그러면 꺼낼 때 무슨 타입인지 확실하니까
    👉 더 안전하고 실수도 없음!

🧠 왜 쓰냐?

이유설명
✅ 실수 방지 숫자에 글자 넣는 실수 방지
✅ 정리정돈 자료형 섞이지 않게 관리
✅ 재활용 같은 구조로 여러 자료형 처리 가능

🎯 현실 비유 하나 더!

📬 서랍 생각해봐.

  • 라벨 없는 서랍 = 아무거나 들어갈 수 있음 = 헷갈림
  • “속옷 서랍” “양말 서랍” = 타입이 정해져 있음 = 제너릭 느낌!
    → 절대 양말 서랍에 속옷 안 들어감 😆

✨ 한 줄 정리

제너릭은 "이 박스에는 어떤 자료만 들어가게 하자!"라고
타입을 제한하고, 더 안전하게 만드는 문법.

✅ 제너릭을 실제로 쓰는 경우는?

"같은 구조인데 자료형만 다를 때"
👉 제너릭을 쓰면 코드 재사용 + 실수 방지가 가능!


💡 예시 1. 자료를 여러 개 저장하는 리스트 만들 때

📦 상황:

  • 이름 목록은 문자열(String)으로 저장
  • 가격 목록은 숫자(Integer)로 저장

💥 제너릭 없이 쓰면?

  • 하나의 리스트에 여러 자료형이 섞임
  • 나중에 꺼낼 때 자료형 헷갈려서 오류 생김

✅ 제너릭 쓰면?

  • List<String> → 오직 문자열만
  • List<Integer> → 오직 숫자만

💡 예시 2. 박스 같은 자료 구조 만들 때

🛍 상황:

  • 어떤 박스 클래스 만들어놓고
  • 그 안에 사과, 바나나, 숫자 등 넣고 싶어

제너릭 없이?

  • 박스 만들 때마다 사과용, 바나나용, 숫자용 따로 만들어야 함
    → 비효율적

제너릭 쓰면?

  • Box<T> 하나만 만들어두면
    → Box<String>, Box<Integer>로 다양하게 재사용 가능!

💡 예시 3. 정렬할 때

  • Comparator<T>도 제너릭이야!
  • 어떤 객체든 비교 기준을 만들어줄 수 있음

예:

  • Comparator<Member> → 회원 비교
  • Comparator<Student> → 학생 비교
반응형