Study

제네릭(Generics)

Clearing 2022. 7. 10. 11:06
728x90

제네릭이란 다양한 타입의 객체들을 다루는 메서드나 클래스에 컴파일 시의 타입 체크를 해주는

기능을 의미한다. 예를 들어 문자열만을 받을 수 있는 배열에 정수나, 실수와 같은 의도하지 않은

타입이 들어오는 것을 막아주는 것을 말한다. 제네릭이 없을 때에는 원하지 않는 타입이 들어와

의도하지 않은 결과가 나올 수 있기 때문에 제네릭을 통하여 이러한 경우를 방지해준다.

 

이렇게 타입 체크를 해주게 되면 객체의 타입 안정성을 높이고 형 변환의 번거로움이

줄어들게 된다. 제네릭은 클래스명 뒤에 <>를 붙여 작성될 수 있으며,

그 안에 원하는 타입을 지정하여 사용하게 되는데 이를 사용할 때에는 참조 변수와

생성자에 대입된 타입이 일치해야 한다.

ex)
포켓몬<피카츄> 노멀상자 = new 포켓몬<피카츄>(); // 가능
포켓몬<구구> 비행상자 = new 포켓몬<구구>(); // 가능
포켓몬<피카츄> 전기상자 = new 포켓몬<라이츄>(); // 불가능
				라이츄가 피카츄를 상속받아도 불가능

 

단, 제네릭 클래스가 상속 관계일 때에는 사용이 가능하다.

ex)
포켓몬<피카츄> 노멀상자 = new 전기포켓몬<피카츄>(); // 가능
포켓몬<피카츄> 전기상자 = new 전기포켓몬<라이츄>(); // 불가능
				 단, 여전히 대입되는 타입은 같아야 함

클래스를 생성하여 제네릭에 타입을 인자로 받아 사용 중에 제네릭 안에 들어오는 타입에

포켓몬만 들어오도록 제한을 두고 싶다면 <타입 extends 포켓몬>을 통해 포켓몬을 상속하는

타입만 들어오도록 제한할 수 있다.

 

메서드에서도 사용할 수 있으며 public <타입> 리턴 타입 메서드명(매개변수 <타입> 타입명){ }과

같은 형태로 사용된다. 클래스와 같이 타입의 범위를 제한하고 싶다면 메서드명 뒤쪽이 아닌

앞쪽의 타입에 제한을 주어야 한다.

 

 

출처)

https://www.youtube.com/watch?v=n28M8iryFPw 

 

728x90

'Study' 카테고리의 다른 글

정규 표현식  (0) 2022.07.24
OOP(객체지향 프로그래밍) (2)  (0) 2022.07.11
애자일 소프트웨어 개발(Agile Software Development)  (0) 2022.07.09
시스템 설계와 프로그램 구현  (0) 2022.07.08
MVC 패턴(2)  (0) 2022.07.07