Published:
Updated:

제너릭 프로그래밍

제너릭 프로그래밍은 다양한 자료형의 객체에 대해 작성한 코드를 재사용한다는 객체 지향 기법입니다.

// 정렬 알고리즘 예시
public class ss{
	public int[] superSort(int[] array){
		// ...sort...
		return array;
	}
}

위와 같은 정렬 알고리즘이 있다고 합시다. 이 정렬 함수를 int 외의 다른 자료형에 대해 사용하려면 어떻게 해야 할까요? 제너릭 프로그래밍이 없었다면 int를 String, Person 등 문자열, 원하는 객체로 바꿔야 했을 것입니다. 제너릭 프로그래밍의 목표는 1가지의 코드만 작성해서 이를 다른 자료형에 대해 재사용할 수 있게 만드는 겁니다.


매개변수화 타입

제너릭 프로그래밍을 구현하기 위한 방법으로 매개변수화 타입을 사용할 수 있습니다. 꺾쇠괄호<> 안에 Type Parameter를 넣어 컴파일 시 구체적인 타입이 결정되도록 하는 방법입니다.

이렇게 매개변수화 타입을 사용하려면 클래스, 함수를 정의할 때 아래와 같이 고쳐주어야 합니다. 다만, 생성자의 경우 예외적으로 E를 사용하지 않습니다.

// 클래스
public class LinkedList
public class LinkedLilst<E>

// 함수
public void addFirst(String S)
public void addFirst(E obj)

public String removeFirst()
public E removeFirst()


예시로, 매개변수화 타입을 사용하여 어떤 자료형이든 담을 수 있는 제너릭 노드를 만들면 다음과 같습니다. 아래 코드에서 E는 모두 같은 자료형을 의미합니다.

// 제너릭 노드
class Node<E>{
	E data;
	Node<E> next;
	public Node(E obj){
		data=obj;
		next=null;
	}
}


배열의 경우, 다음과 같이 정의합니다.

// 배열
E[] storage = (E[]) new Object[size];


아래 코드처럼 정의하면 컴파일이 되지 않습니다.

// 배열 (컴파일 X)
E[] storage = new E[size];


Source

Leave a comment