제네릭이란 ? 

자바(Java)와 같은 프로그래밍 언어에서 코드의 재사용성과 타입 안전성을 높이기 위해 사용하는 템플릿

데이터 형식에 의존하지 않고, 하나의 값이 여러 다른 데이터 타입들을 가질 수 있도록 한다

컴파일 시점에 데이터 타입을 명확히 지정할 수 있어, 코드의 유연성안전성을 동시에 확보

 

 

제네릭의 주요 특징 

1. 타입 안정성(Type Safety)

제네릭을 사용하면 컴파일 시점에 타입이 결정되므로, 잘못된 타입 사용으로 인한 오류를 방지

예: List<String>은 문자열만 저장 가능하며, 컴파일 시점에 다른 타입을 넣으려 하면 에러가 발생

2. 코드 재사용성

제네릭을 사용하면 다양한 데이터 타입에 대해 하나의 코드로 처리 가능 

예: List<T>는 문자열, 숫자, 사용자 정의 객체 등 어떤 타입이든 처리

3. 형변환(Downcasting) 제거

제네릭을 사용하면 형변환(casting)이 필요 없어 코드가 간결하고 안전

예: List<String>에서 값을 꺼낼 때는 문자열(String)로 자동 처리

 

제네릭의 사용법

1. 클래스에서 제네릭 사용

// 제네릭 클래스를 정의
public class Box<T> { 
    private T value;

    public void setValue(T value) { 
        this.value = value; 
    }
    
    public T getValue() { 
        return value; 
    }
}

// 사용하는 예제
Box<String> stringBox = new Box<>();
stringBox.setValue("Hello");
System.out.println(stringBox.getValue()); // 출력: Hello

Box<Integer> intBox = new Box<>();
intBox.setValue(123);
System.out.println(intBox.getValue()); // 출력: 123

2. 메서드에서 제네릭 사용

// 제네릭 메서드
public static <T> void printArray(T[] array) {
    for (T element : array) {
        System.out.println(element);
    }
}

// 사용하는 예제
String[] stringArray = { "A", "B", "C" };
printArray(stringArray);

Integer[] intArray = { 1, 2, 3 };
printArray(intArray);

3. 제네릭 인터페이스

// 제네릭 인터페이스 정의
public interface Repository<T> {
    void save(T entity);
    T findById(int id);
}

// 구현 클래스
public class UserRepository implements Repository<User> {
    @Override
    public void save(User user) {
        System.out.println("Saving user: " + user.getName());
    }
    
    @Override
    public User findById(int id) {
        return new User(id, "Sample User");
    }
}

 

참고: 

https://inpa.tistory.com/entry/JAVA-☕-제네릭Generics-개념-문법-정복하기

https://st-lab.tistory.com/153

'Java' 카테고리의 다른 글

Try With Resource  (2) 2025.01.22
불변 객체(Immutable Object)  (0) 2025.01.18
Record Class (불변 데이터 클래스)  (2) 2025.01.17