본문 바로가기

Java 공부/신용권의 이것이 자바다

자바 제네릭(Generic) 요약정리

반응형

제네릭(Generic)은 자바5부터 새롭게 추가된 기능으로, 컴파일시 타입을 강하게 체크해서 미리 에러가 일어나는 것을 방지해 준다.

또 타입변환을 꼭 해야 하는 상황일 때,  제네릭을 사용하면 타입변환을 해주지 않아도 된다.

위 코드는 제네릭을 사용하는 방식을 보여준다.

선언을 할 때, 클래스나 인터페이스 이름 뒤에 <> 부호를 붙인다.

<> 안에는 타입 파라미터가 위치한다.

<> 안에 타입 파라미터는 일반적으로 알파벳 대문자 한 글자로 쓴다.

개발 코드에서는 타입 파라미터 자리에 구체적인 타입을 지정해야 한다.

제네릭 타입은 두 개 이상의 멀티 타입 파라미터를 사용할 수 있는데, 이 경우 각 타입 파라미터를 콤마로 구분한다.

제네릭 메소드는 매개타입과 리턴타입으로 타입 파라미터를 갖는 메소드를 말한다.

제네릭 메소드를 선언하는 방법은 리턴타입 앞에 <> 기호를 추가하고 타입 파라미터를 기술한 다음, 리턴타입과 매개타입으로 타입 파라미터를 사용하면 된다. 

한편, 타입 파라미터에 지정되는 구체적인 타입을 제한할 때 제네릭을 사용하면 유용하다.

타입 파라미터에 지정되는 구체적인 타입은 상위 타입이거나 상위 타입의 하위, 또는 구현 클래스만 가능하다.

주의할 점은 메소드의 중괄화 {} 안에서 타입 파라미터 변수로 사용 가능한 것은 상위타입의 멤버(필드, 메소드)로 제한된다.

하위타입에만 있는 필드와 메소드는 사용할 수 없다.


코드에서 ?를 일반적으로 와일드카드(wildcard)라고 부른다.

제네릭 타입 매개값이나 리턴타입으로 사용할 때 구체적인 타입 대신에 와일드카드를 사용할 수 있다.

와일드카드는 크게 세 가지로 나뉜다.

1) 제네릭타입<?>: Unbounded WildCard(제한없음)

타입 파라미터를 대치하는 구체적인 타입으로 모든 클래스나 인터페이스 타입이 올 수 있다.

2) 제네릭타입<? extends 상위타입>: Upper Bounded WildCard(상위클래스 제한)

타입 파라미터를 대치하는 구체적인 타입으로 상위 타입이나 하위 타입만 올 수 있다.

3) 제네릭타입<? supper 하위타입>: Lower Bounded WildCard (하위클래스 제한)

타입 파라미터를 대치하는 구체적인 타입으로 하위타입이나 상위 타입이 올 수 있다.

제네릭 타입도 다른 타입과 마찬가지로 부모 클래스가 될 수 있다.

제네릭 타입을 부모 클래스로 사용할 경우, 타입 파라미터는 자식 클래스에도 기술해야 한다.

그 외에 추가적인 타입 파라미터를 가질 수도 있다.

또 제네릭 인터페이스를 구현할 경우, 타입 마라미터는 구현 클래스에도 기술해야 한다.



반응형