제네릭이 필요한 이유

SungMin·2026년 6월 4일

자바 심화 정리

목록 보기
28/34

대부분의 프로그래밍 언어는 제네릭(Generic)을 제공한다.

먼저 제네릭이 왜 필요한지 예제를 통해 알아보자.

package generic.ex1;

public class BoxMain1 {
    public static void main(String[] args) {
        IntegerBox integerBox = new IntegerBox();
        integerBox.set(10); // 오토박싱

        Integer integer = integerBox.get();
        System.out.println("integer = " + integer);

        StringBox stringBox = new StringBox();
        stringBox.set("hello");
        String str = stringBox.get();
        System.out.println("str = " + str);
    }


}
package generic.ex1;

public class IntegerBox {
    private Integer value;

    public void set(Integer value) {
        this.value = value;
    }

    public Integer get() {
        return value;
    }
}

package generic.ex1;

public class StringBox {
    private String value;

    public void set(String value) {
        this.value = value;
    }

    public String get() {
        return value;
    }
}

코드를 보면 숫자를 보관하는 IntegerBox를 만들고 그곳에 값을 보관했다.
또, 문자를 보관하는 StringBox를 만들고 문자열을 보관하였다.

하지만 새로운 타입을 저장하려면 그에 맞는 박스를 계속 만들어야 한다.

예를 들어 다음과 같은 클래스들이 필요할 수 있다.

실제로 각 클래스의 코드를 살펴보면 타입만 다를 뿐 대부분의 로직은 동일하다.

만약 담아야 하는 타입이 수십개라도 한다면, 그 것들을 일일히 만들 수 없다.
그렇다면 이러한 문제를 해결하기 위해 어떻게 해야할까?

자바는 이러한 문제를 해결하기 위해 제네릭(Generic) 을 제공한다.
그 내용에 관해서는 하나하나 알아보도록 하자.


[정리]

  • Object는 모든 객체를 저장할 수 있지만 값을 꺼낼 때 다운캐스팅이 필요하며 타입 안전성을 보장할 수 없다.
  • 제네릭은 타입 매개변수를 사용하여 컴파일 시점에 타입을 결정하므로 다운캐스팅 없이 타입 안전성과 코드 재사용성을 모두 확보할 수 있다.
profile
오늘도 한 걸음씩 나아가

0개의 댓글