[Java] Generics은 무엇이고 왜 사용할까?

2025. 4. 22. 16:42·JAVA

자바에서 제네릭은 클래스, 인터페이스, 메소드에서 사용할 데이터 타입을 코드 작성 시점이 아닌, 실제 사용할 때 지정할 수 있도록 해주는 기능입니다. -> 타입을 변수처럼 다루는 기능

 

예전에 다운 캐스팅과 업캐스팅을 공부할 때 캐스팅 개념이 너무 어려웠는데, 제네릭을 사용하면 이러한 명시적인 형변환(casting)을 하지 않아도 되기 때문에 훨씬 편리합니다.

 

캐스팅(casting)은 한 타입을 다른 타입으로 변환하는 과정입니다.
예를 들어, Object 타입을 String 타입으로 변환하려면 명시적으로 캐스팅을 해야 합니다.

 

제네릭은 타입을 미리 지정해주는 기능이기 때문에, 컴파일 시점에 타입을 결정할 수 있습니다. 그래서 캐스팅을 하지 않아도 되며 타입 안전성을 보장해줄 수 있습니다.

 

예를 들어 List<Object>처럼 Object로 처리하게 되면 데이터를 꺼낼 때마다 (String)과 같은 형변환이 필요하지만,
List<String>과 같이 제네릭을 사용하면 형변환 없이도 타입이 자동으로 보장되므로 코드가 더 안전하고 깔끔해집니다.

또한, 제네릭은 컴파일 시점에 타입 오류를 미리 확인할 수 있도록 도와주기 때문에 런타임 오류를 방지하는 데에도 큰 장점이 있습니다.

 

예제를 보여드리겠습니다.

MessageBox라는 클래스는 제네릭을 사용하고 있습니다. 이 클래스에서는 <T>를 사용하여 타입 파라미터를 선언하고,

getter와 setter 메소드를 구현합니다.

메인 클래스에서는 제네릭 부분이 T가 아닌 String으로 바뀌어 있습니다.  
그 이유는 제네릭을 사용했기 때문입니다. (보통 제네릭 타입 파라미터는 T로 정하는 것이 일반적입니다.)

제네릭을 사용하면, T와 같은 타입 파라미터를 선언하고, 이를 객체 생성 시점에 원하는 타입으로 지정할 수 있습니다.  
예를 들어, MessageBox<String>으로 선언하면, T는 String으로 대체되어 "Hello Generics"라는 문자열을 setMessage 메소드를 통해 설정할 수 있습니다.

또한, msg라는 String 변수를 선언하여, setMessage로 설정한 "Hello Generics" 문자열을 그 변수로 사용할 수 있습니다.

 

그렇다면 제네릭을 왜 사용할까?

1. 타입 안정성 확보

제네릭을 사용하지 않으면, 모든 타입을 Object로 처리해야 하므로 형변환(캐스팅)을 자주 하게 됩니다. 이 과정에서 타입 오류가 발생할 가능성이 있습니다. 제네릭을 사용하면 컴파일 시점에 타입을 체크하기 때문에 타입 안전성이 보장됩니다.

 

2. 코드 재사용성 증대

제네릭을 사용하면 하나의 클래스, 메소드를 다양한 타입에 대해 재사용할 수 있습니다. 제네릭을 통해 타입을 매개변수처럼 사용할 수 있어, 같은 클래스를 다양한 데이터 타입에 대해 사용할 수 있습니다.

 

3. 컴파일 타임에 오류 검출

제네릭은 컴파일 타임에 타입을 체크합니다. 그래서 잘못된 타입을 사용할 경우 컴파일 시점에서 오류가 발생합니다. 이를 통해 런타임 오류를 줄일 수 있습니다.

 

4. 더 깔끔하고 간결한 코드 작성

제네릭을 사용하면 타입을 명시적으로 정의할 수 있어, 캐스팅을 하지 않아도 되고 불필요한 중복 코드를 줄일 수 있습니다. 또한, 제네릭은 타입 정보를 클래스 외부에서 지정할 수 있기 때문에 코드가 더 간결하고 명확해집니다.

 

'JAVA' 카테고리의 다른 글

[Java] Java 에서는 객체 복제를 어떻게 할까?  (0) 2025.04.26
[Java] Jave 의 컬렉션 프레임워크는 무엇일까?  (2) 2025.04.23
[Java] 인터페이스를 사용하는 이유는 무엇일까?  (0) 2025.04.21
[Java] GC(가비지 컬렉션)이란?  (1) 2025.04.21
[Java] Java 의 주요 특징  (2) 2025.04.17
'JAVA' 카테고리의 다른 글
  • [Java] Java 에서는 객체 복제를 어떻게 할까?
  • [Java] Jave 의 컬렉션 프레임워크는 무엇일까?
  • [Java] 인터페이스를 사용하는 이유는 무엇일까?
  • [Java] GC(가비지 컬렉션)이란?
동준1234
동준1234
공부 기록
  • 동준1234
    dongjundev
    동준1234
  • 전체
    오늘
    어제
  • GitHub
    • 분류 전체보기 (150)
      • 일상 (1)
      • 복습 및 회고록 (26)
      • Spring (17)
      • JAVA (32)
      • kubernetes (1)
      • Front-End (13)
      • Server (11)
      • SQL (20)
        • JDBC (1)
      • 자격증 (7)
        • 정보처리기사 필기 준비 (6)
        • 정보처리기사 실기 준비 (0)
        • SQLD (1)
      • project (18)
        • 백준 및 코딩테스트 공부 (6)
        • 대학교 캡스톤 디자인 (6)
        • 4학년 캡스톤 디자인 및 전시회 (3)
      • 네트워크 (3)
      • AI 머신러닝 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    react
    jQuery
    개발자
    JavaScript
    프론트
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
동준1234
[Java] Generics은 무엇이고 왜 사용할까?
상단으로

티스토리툴바