개발/JAVA

[JAVA] 제네릭

mabb 2022. 5. 19. 10:43
반응형

 안녕하세요. 삶의 질을 높이고자 노력하는 영차영차입니다.
자바 기본기를 탄탄히 다지기 위한 공부 목적 포스팅입니다.
이것이자바다, HeadFirstJava 등의 교재와 구글링을 토대로 본인의 이해를 위해 작성하였으며
계속해서 살을 붙여나갈 계획입니다.
틀린 부분이 있을 경우 댓글 남겨주시면 감사하겠습니다.
---------------------------------------------------------------------------------------------------------

WHY
-  컴파일 시 강한 타입체크
- 불필요한 타입 변환 제거

 

모든 객체의 부모인 Object타입을 사용하면 모든 객체를 다 담을 수 있다. 하지만 해당 객체를 다시 꺼내어 사용할 때에는 타입변환을 해주어야하는데 이는 번거롭고 불안정한 것이다.

 

제네릭

타입의 파라미터, 타입을 명시하는 것.  <T> <E> <N> <V> <K> <S,U,V> 등으로 표기. < > 꺽쇠속의 알파벳에따라 기능이 달라지는 것은 아님. T는 Type, E는 Element, N은 Number, K는 Key 등. 관례적인 표기법. 제네릭은 클래스나 메소드에  선언 가능.

Object타입을 사용하면 모든유형의 객체 대입 가능(다형성).그러나 형변환 시 문제가 발생함. 모든 객체 타입을 대입할 수 있도록 만들어 둔 클래스나 메소드이지만 사용할 때는 객체타입을 확실하게 정해놓고 쓰도록 하는 것. 

 

ArrayList<E> 클래스를 사용할 때

ArrayList<Board> boardArrayList = new ArrayList<>();
ArrayList<String> stringArrayList = new ArrayList<>();
ArrayList<Integer> integerArrayList = new ArrayList<>();
ArrayList<Char> charArrayList = new ArrayList<>();

등으로 사용할 타입을 정한다.

 

와일드카드 WildCard

매개변수 타입등을 제네릭으로 선언한 경우, 제네릭으로 명시하는 타입은 정확하게 명시한 타입만 허용함. ArrayList<Object>인 경우 Object는 모든 클래스의 부모이지만  자식객체를 대입할 수 없고 Object 타입만 가능하다.
제네릭으로 선언하는 타입을 조금 더 유연하게 설정할 수 있는 방법은 와일드카드로 사용하는 것임.

<?>  제네릭으로 선언할 수 있는 타입에 제한이 없다.
<?extends T>  T타입과 T타입의 자식들만 가능하다.
<?super T> T타입과 T타입의 부모들만 가능하다.

 

 

 

반응형

'개발 > JAVA' 카테고리의 다른 글

[JAVA] 멀티스레드  (0) 2022.05.19
[JAVA] 람다식  (0) 2022.05.19
[JAVA] 예외처리  (0) 2022.05.19
[JAVA] 익명객체, 익명구현객체, 익명자식객체  (0) 2022.05.19
[JAVA] 자바의 구조_ 상속 및 구현, 오버라이드  (0) 2022.05.19