Java Generic - 필요성

대부분의 프로그래밍 언어에서 제네릭(Generic) 개념을 도입하였다.
처음 제네릭을 접한 경우 이해하기가 굉장히 어려운 개념으로 단계별로 학습해보도록 한다.

먼저 제네릭 사용하기 전 예제 코드를 살펴보자.

NumberBox.class

public class NumberBox {
    private Integer value;

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

    public Integer get() {
        return value;
    }
}
  • 숫자를 저장하고 꺼내는 클래스를 작성하였다.

StringBox.class

public class StringBox {
    private String str;

    public String get() {
        return str;
    }

    public void set(String str) {
        this.str = str;
    }
}
  • 문자열을 저장하고 꺼내는 클래스이다.

Main.class

public class Main {
    public static void main(String[] args) {
        NumberBox nb = new NumberBox();
        nb.set(100); // 기본형 int가 Integer 형으로 오토 박싱함
        Integer number = nb.get();
        System.out.println("number = " + number);

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

number = 100
str = Hello World

실행하면 객체로 숫자를 저장하거나 꺼내고 문자열을 객체로 저장하거나 꺼내 출력할 수 있다.

추가 요구사항

기존의 String, Integer 형으로 객체로 담을 수 있는 클래스를 만들었다. 추후에 다양한 데이터 타입을 지원하도록 Double, Boolean 다양한 타입을 담는 박스가 추가할 것을 요청이 왔다면 어떻게 개발해야 할까?

요구사항을 해결하는 방법은 다양한 타입 갯수만큼 클래스를 작성하는 방법이다.
또는 모든 객체를 담을 수 있는 Object 객체의 다형성을 사용하는 방법도 알아 볼 수 있다.