Backend/Java

제네릭 (Generic)

개발자의 첫 걸음 2025. 7. 23. 18:00

 

 

안녕하세요.

 

이번 포스팅은 제네릭(Generic)에 대해 간단하게 알아볼게요.

 

 

 

제네릭(Generic)

 

제네릭은 데이터타입을 일반화(Generalize)하는 것으로

 

클래스나 메서드를 선언할 때, 구체적인 타입을 명시하지 않고,

 

사용 시점에 지정할 수 있도록 하는 기능이에요.

 

 

 

제네릭의 타입 매개변수

 

제네릭의 타입 매개변수는 총 네 가지 T, K, V, E 가있는데요. 작성되는 실실적인 타입을 전달해 줘요.

 

그럼 각각 의미와 사용 용도를 알아볼까요?

 

 

<T>: Type의 약자로 아무 타입이나 들어올 수 있어서 가장 흔하게 사용해요.

 

<K>: Key의 약자로 Map 구조에 주로 사용하면서 키타입을 표현할 때 사용해요.

 

<V>: Value의 약자로 Map 구조에 주로 사용하면서 값 타입을 표현할 때 사용해요.

 

** <K>와 <V>는  Map 구조에서  <K, V>로 같이 사용!

 

<E>: Element의 약자로 리스트 세트 등 주로 컬렉션에 주로 사용해요.

 

 

 

제네릭의 장점

 

첫 번째 타입의 안정성이 보장이 돼요.

 

그래서 컴파일 시 타입 체크가 가능하고, 타입 에러 방지가 된답니다.

 

 

두 번째는 코드 재사용성이 늘어나요.

 

하나의 코드를 이용해 다양한 타입으로 사용가능해요.

 

 

마지막 세 번째는 가독성이 증가해요.

 

제네릭을 사용하면 타입 명시로 코드 의도를 쉽게 파악이 가능해요.

 

다른 말로 코드의 명확성이 증가해요. 

 

 

 

제네릭의 단점

 

제네릭의 단점은 여러 가지가 있지만 크게 두 가지만 설명드릴게요!

 

 

첫 번째로 제네릭 타입의 경우 기본 타입(primitive type)을 직접적으로 사용할 수 없고,

 

Wrapper 클래스를 사용해야 하는 점이 있어요.

기본 타입 Wrapper 
int Integer
double Double
char Character

 

제네릭의 단점 두 번째는 런타임에 타입 정보 소실 (타입소거, Type Erasure)이에요.

 

Java(JVM 언어)에서 컴파일할 때 제네릭 타입이 제거되고  Object로 변환이 돼버려요.

 

public class Box<T> {
    // T item = new T(); // ❌ 컴파일 에러
}

예시를 보면서 설명을 드리면 런타임 정보를 알 수가 없어지기 때문에

 

T.class, newT() 같은 코드는 사용할 수가 없어요.

 

 

 

제네릭 사용방법

 

제네릭의 사용방법 총 네 가지가 있는데

 

제네릭 클래스, 제네릭 인터페이스, 제네릭 생성자, 제네릭 메서드가 있습니다.

 

그중 사용빈도가 높은 제네릭 클래스제네릭 메서드에 대해 알아볼까요?

 

 

1. 제네릭 클래스

 class 클래스명<타입매개변수> {
     // 타입 매개변수를 사용하는 필드, 생성자, 메서드 작성
    }

제네릭 클래스는 클래스 전체가 타입 매개변수를 받아서 그 타입을 사용하는 구조예요.

 

특히 컬렉션 등 데이터 구조 구현에 필수적으로 사용해서 사용빈도가 가장 높은 친구예요.

 

 

2. 제네릭 메서드

[접근제한자] <제네릭타입> 반환타입 메서드명(매개변수...) {구현부}

제네릭 메서드는 메서드 자체에서 제네릭 타입을 선언하고 사용하는 메서드로

 

반환타입, 매개변수, 내부 지역 변수 선언 등 다양하게 사용할 수 있어요.

 

static <T> void print(T value) { System.out.println(value); }

static 메서드는 제네릭 타입을 직접 선언을 해주셔야 사용이 가능하답니다.

 

 

 

 

 

여기까지 제네릭에 대한 기본적인 설명들을 알아봤는데요.

 

제네릭의 장단점을 참고로 잘 활용만 한다면 

 

훨씬 멋지고 깔끔한 코드가 완성될 것 같아요!

 

 

'Backend > Java' 카테고리의 다른 글

빌더(Builder)  (2) 2025.07.25
싱글톤 (Singleton)  (4) 2025.07.24
Java 기초 테스트  (4) 2025.07.23
Java의 기초 테스트 1편 - 코딩 해설  (7) 2025.07.22
Java의 기초 테스트 1편 - 코딩  (4) 2025.07.21