[java] 제네릭을 활용한 자료구조 구현

제네릭(Generics)은 자바에서 컬렉션 클래스나 메서드 매개변수에 사용되는 자료형을 일반화하는데 활용되는 기능입니다.

제네릭 클래스

우리는 제네릭을 사용하여 자료구조를 구현해볼 수 있습니다. 예를 들어, 제네릭을 사용하여 스택(Stack)을 구현해보겠습니다.

public class Stack<T> {
    private T[] elements;
    private int size;

    public Stack(int capacity) {
        elements = (T[]) new Object[capacity];
        size = 0;
    }

    public void push(T element) {
        elements[size] = element;
        size++;
    }

    public T pop() {
        if (size == 0) {
            throw new EmptyStackException();
        }
        T element = elements[size - 1];
        size--;
        return element;
    }
}

위의 코드에서 Stack 클래스는 제네릭 타입 T를 받아들여서 사용합니다. 따라서 Stack 클래스를 생성할 때 어떤 자료형의 요소를 사용할 것인지를 지정할 수 있습니다.

제네릭 메서드

제네릭 메서드를 활용하면, 메서드 내에서 다양한 자료형을 처리할 수 있습니다.

public class ArrayUtil {
    public static <T> T getLastElement(T[] array) {
        if (array == null || array.length == 0) {
            return null;
        }
        return array[array.length - 1];
    }
}

위의 코드에서 getLastElement 메서드는 제네릭 타입 T를 받아서 배열의 마지막 요소를 반환합니다.

제네릭을 활용한 자료구조 구현은 코드의 재사용성을 높여주고, 타입 안정성을 보장해줍니다. 따라서, 자료구조를 구현할 때에는 가능하다면 제네릭을 활용하여 구현하는 것이 좋습니다.

결론

제네릭을 활용하면 자료구조를 보다 유연하게 구현할 수 있으며, 일반화된 타입을 활용하여 무결성을 보장할 수 있습니다. 이를 통해 안정적이고 확장 가능한 코드를 작성할 수 있습니다.

Oracle Java Generics 에서 더 많은 정보를 확인할 수 있습니다.