본문 바로가기

신입 개발자 면접 기초

제네릭(Generic)에 대한 모든 것(제네릭에 대해서 설명해주세요)

반응형

제네릭(Generic)

제네릭 타입을 이용해서 컴파일 과정에서 타입 체크를 할 수 있다.

제네릭은 클래스와 인터페이스, 메소드를 정의할 때 타입 파라미터로 사용한다.

* 제네릭을 사용하는 이유(=장점)

1. 컴파일할 때 타입을 체크해서 에러를 사전에 잡을 수 있다.

2. 컴파일러가 타입캐스팅을 해주기 때문에 개발자가 편리하다.

3. 타입만 다르고 코드의 내용이 대부분 일치할 때, 코드의 재사용성이 좋아진다.


1
2
3
public class className<T>{...}
 
public interface interfaceName<T>{...}


* 클래스, 인터페이스에서 제네릭 타입파라미터 사용법

실제 사용할 시에는 타입 파라미터에 구체적인 타입을 지정해야 함.

1
ArrayList<String> list = new ArrayList<String>();


ArrayList에 String 값만 저장할 수 있도록 구체적인 타입을 지정했음.


* 멀티 타입 파라미터

1
HashMap<String,Object> map = new HashMap<String,Object>();


제네릭 타입을 2개 이상 만들 수 있음.

해시맵도 <K,V>로 제네릭 타입을 사용하고 있음.


* 제네릭 메소드

매개변수 타입과 리턴 타입으로 타입파라미터를 갖는 메소드.

제네릭 클래스가 아니여도 메소드만 제네릭 메소드일 수 있음.

1
public <T> Product<T> boxing(T t){...}



* 제한된 타입 파라미터

<T extends 타입>

타입 파라미터에 지정되는 구체적인 타입을 제한할 필요가 있을 때가 있다.

ex) 숫자 연산 제네릭 메소드는 Byte, Short, Integer, Long, Double 인스턴스만 가져야 한다. 이럴 때 Number타입으로 제한한다. <T extends Number>

Number타입 또는 Number타입의 하위 클래스 타입만 올 수 있음.

<T super 타입> 으로 상위클래스도 표현가능하지만 <T implements 타입>같은 표현은 없음.

만약 인터페이스로 제한하고 싶다할지라도 "extends" 를 사용해야 함.

반응형