이글은 백기선님 스터디 할래? 스터디를 뒤늦게 따라간 기록입니다.
스터디할래 링크 >> https://github.com/whiteship/live-study
이필기를 시작으로 공부했습니다 >>https://sujl95.tistory.com/73 , https://docs.oracle.com/javase/tutorial/java/generics/types.html
여기 없는내용은 스터디 할래 강의 내용 혹은 제가 java Doc보고작성하거나 예제를 만들어 추가했습니다.
그외는 같이 출처가 써있습니다.
제네릭 | data type을 클래스, 메소드에서 내부 데이터 타입을 제네릭으로 지정, "컴파일과정에서 문제제거" - jdk1.5 부터 도입 - jdk 1.7 Diamond <>: 타입안에 안써도됨, 타입추론 - 클래스나 메소드 내부에서 사용되는 객체의 타입을 컴파일과정에서 문제제거 - 반환값에 대한 타입변환 및 타입 검사에 들어가는 노력줄인다. - 타입국한 효과로 타입변환이 불필요해져 성능향상효과 A generic type is a generic class or interface that is parameterized over types. 제네릭 타입은 타입에서 매개변수로 사용되는 클래스나 인터페이스 https://docs.oracle.com/javase/tutorial/java/generics/types.html |
제네릭 컴파일 | ----- .java List<Integer> numbers = new ArrayList<>(); numbers.add(3); ------.class List<Integer> numbers = new ArrayList(); numbers.add(3); 컴파일할때 소거자에 대해 타입정보가 사라지는것 > 구체화타입ex) List |
제네릭 사용법 제네릭 메소드 만들기 |
interface fruit<K,V>{ //클래스 public default K getKey() {return null;} public default V getValue() {return null;} } class Banana<K,V> implements fruit<K,V>{ // 상속시 public <T> boolean isBTime(List<T> list, T addvlaue) { //메서드 T value = list.get(0); V[] vArray =(V[]) new Object[2]; // 배열 선언 if (value == addvlaue) return true; return false; } } |
와일드 카드 | wild card -Unbounded WildCard : List<?> :모든클래스 -Upper Bounded wildcard : List<? extends Number>:특정타입자식클래스 -Lower Bounded Wildcard : List<? super Number>: 특정타입 부모클래스 아무이름 컴파일은 문제없음 클래스, 메소드매개변수,반환값 가능 매개변수 명명 규약 E - Element (used extensively by the Java Collections Framework) K - Key N - Number T - Type V - Value S,U,V etc. - 2nd, 3rd, 4th types |
Erasure | Generics Type Erasure List<Object> list = new ArrayList<Integer>(); >> 컴파일에러. 메서드 수준 |
제네릭 특이점 | - 원시타입 사용불가. 타입 파라메터 자리에 원시타입 사용안함>> 타입소거(Erasure)발생때문.. 명시안되면 Object로 >> Object클래스를 상속받으면서 하위호환성이지켜진다. >> Wrapper 클래스 사용. - 배열선언은 캐스팅이용 V[] vArray =(V[]) new Object[2]; new 연산자 동적메모리 할당영역 heap 영역에 생성한 객체 할당. 제네릭은 컴파일타임동작. Object 생성후 캐스팅하여 사용. - static 으로 사용불가. static 내부에선 제네릭사용가능 https://blog.naver.com/hsm622/222251602836 |
브리지 메서드 | 매개변수가 반환타입소거시 가끔 브리지메서드를 생성하는데 stackTrace에 가끔 나타나니 알아두기 public class A extends ArrayList<String>{ public boolean add(String e){ return super.add(e) } } A a = new A(); a.add("text"); https://rockintuna.tistory.com/102 |
Erasure 이레이저 삭제 말소
Conventions 규약
Unbounded 무한한
추천책 : 클라우드 네이티브 자바
리플렉션으로 볼수 있음.
- 제네릭 사용법
- 제네릭 주요 개념 (바운디드 타입, 와일드 카드)
- 제네릭 메소드 만들기
- Erasure
'JAVA > Basic' 카테고리의 다른 글
[스터디할래? Java] 목차 (0) | 2021.05.17 |
---|---|
[스터디할래? Java 15]lambda 람다 (0) | 2021.05.15 |
[스터디할래? Java 13]I/O (0) | 2021.05.15 |
[스터디할래? Java 12]애노테이션 (0) | 2021.05.15 |
[스터디할래? Java 11]enum (0) | 2021.05.15 |