본문 바로가기
JAVA

[JAVA 개념8] 제네릭

by 자유데이터 2018. 11. 13.
반응형

1.제네릭
프로그램을 일반화하기 위해 사용.

***제네릭 타입
:  (제네릭)타입 파라미터가 적용된 클래스와 인터페이스.
    클래스 또는 인터페이스 선언시에, 이름뒤에 <T>를 붙여준다.

***(제네릭) 타입 파라미터
: 타입(참조타입 또는 (또다른) 제네릭 타입)을 받는 매개변수.
 변수명을 영문 대문자 하나로 한다.

***제네릭 메소드
: (제네릭)타입 파라미터가 적용된 메소드.

***구체적인 타입(구체타입)
: 제네릭 타입 파라미터에 지정되는 실제 타입.


-제네릭 사용하는 이점: 타입변화 제거 가능
                          (1)일반                                                                                            (2)제네릭
    
    (1)의 단점 : list를 object 클래스에서 꺼내오기 때문에 강제 casting해야 한다. casting할수록 코드의 질이 떨어지며
                        코딩이 길어질때 타입을 착각하여 exception이 발생할 가능성이 높다.


제네릭 타입(또는 메소드)를 사용할 때, 타입 파라미터에 구체타입이 전달된다.  (선언할때와 사용할때 구분을 잘 해야한다.)

<T>의 형태로 제네릭 선언을 하고,
사용할때는 위의 오른쪽과 같이 <>안에 구체타입을 전달한다. (컴파일될 때 전달된다.)
일관성있게 타입을 한 번에 바꿀 수 있으며, 사용에 맞게 타입을 변경할 수 있다.

ex)


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

public <타입파라미터, ...> 리턴타입 메소드명(매개변수, ...) { ... }

-제네릭 메소드 호출하는 두 가지 방법
1)리턴타입 변수 = <구체적타입> 메소드명(매개값);
2)


3.제한된 타입 파라미터
: 아무 타입이나 지정할 수 없게 구체적인 타입을 제한할 수 있다.

public <T extends 상위타입 > 리턴타입 메소드(매개변수, ... ) { ... }
public <T implements 상위타입 > 리턴타입 메소드(매개변수, ... ) { ... }

위에서 보듯이 T는 상위타입 또는 상위타입의 자식까지만  사용할 수 있다. 인터페이스도 가능하다.


**와일드카드 타입
: 제네릭 타입이 메소드의 매개변수나 리턴타입으로 나올때만 사용할 수 있는 타입으로,
    <>안에 ?가 들어가며 제한하는데 사용하기도 한다.

  • <?>제한이 없다.

  • <? extends 상위타입>
                  :  상위타입 아래로 모두 가능하다.( 상위 클래스 제한)

  • <? super 하위타입>
                  :  하위타입의 위 타입 모두 가능하다. (하위 클래스 제한)






























반응형

댓글