본문 바로가기

복습용

18.제네릭

제네릭이란?

프로그램에서 변수를 선언할 떄 모든 변수는 자료형이 있습니다. 메소드에서 매개변수를 사용할 때도 자료형을 가지고 있습니다. 대부분은 하나의 자료형으로 구현하지만, 변수나 메소드의 자료형을 필요에 따라 여러 자료형으로 바꿀 수 있다면 프로그램이 훨씬 유연할 것입니다. 이와 같이 어떤 값이 하나의 참조 자료형이 아닌 여러 참조 자료형을 사용할 수 있도록 프로그래밍 하는 것을 '제네릭(Generic) 프로그래밍' 이라고 합니다. 제네릭 프로그램은 참조 자료형이 변환될 때 이에 대한 검증ㅇ르 컴파일러가 하므로 안정적입니다. 앞으로 학습할 '컬렉션 프레임워크'도 많은 부분이 제네릭으로 구현되어 있습니다.

 

제네릭의 필요성

3D 프린터를 예로 들어 제네릭에 대해 이해해 봅시다. 3D 프린터는 재료를 가지고 입체 모형을 만드는 일을 합니다. 프린터에 쓰이는 재료는 여러 가지가 있을 수 있는데, 쌓아 올려 입체 모형을 만드는 경우에 파우더나 플라스틱 액체를 사용합니다. 

 

제네릭 클래스 사용 예제

재료로 정의할 Powder와 Plastic 클래스를 먼저 정의 합니다.

 

 

 

파우더와 플라스틱 액체를 재료로 모형을 출력하는 프린터를 제네릭 클래스로 정의하면 다음과 같습니다.

 

GenericPrinter<T> 클래스의 인스턴스 변수 material은 자료형 매개변수 T로 선언했습니다.

그리고 10~12행의 getMaterial() 메소드는 T자료형 변수 materail을 반환합니다. 메소드 선언부나 메소드의 매개변수로 자료형 매개변수 T를 사용한 메소드를 '제네릭 메소드(generic method)'라고 합니다. 제네릭 메소드는 일반 메소드뿐 아니라 static 메소드에서도 활용할 수 있습니다.

 

5행과 11행처럼 사용할 참조 자료형을 지정하여 GenericPrinter 클래스를 생성합니다. 만약 새로운 재료가 추가되면 추가된 재료 클래스를 만들고 T 대신 해당 클래스를 대입하여 GenericPrinter를 생성하면 됩니다.

 

제네릭에서 대입된 자료형을 명시하지 않는 경우

명시하세요 그냥

 

T자료형에 사용할 자료형을 제한하는 <T extends 클래스>

 

상속을 위한 Material 추상클래스 생성

Material 클래스는 다음처럼 추상 클래스로 정의하였습니다. 상속받은 클래스는 doPrinting() 추상 메소드를 반드시 구현해야 합니다.

 

클래스 이름에 <T extends Material>이라고 명시하여 사용할 수 있는 자료형에 제한을 둡니다. 만약 Materail 클래스를 상속받지 않은 Water 클래스를 사용하면 오류가 발생합니다.

'복습용' 카테고리의 다른 글

20. List 인터페이스 ArrayList, LinkedList  (0) 2020.04.06
19. 컬렉션 프레임워크  (0) 2020.04.03
17-2.Class 클래스  (0) 2020.04.02
17-1.Wrapper 클래스  (0) 2020.04.02
17.String 클래스  (0) 2020.04.02