자바의 정석 복습하기(컬렉션,지네릭스)

bitna's study note·2022년 6월 11일
0

자바

목록 보기
106/119

6월 12일 복습하기

objects(객체),Arrays(배열),Collections(컬렉션) 각각 필요한 메서드를 제공한다.

1.Collections
컬렉션을 위한 메서드(static)를 제공
(1)synchronized
컬렉션을 동기화 하고 싶을때 쓰는 메서드
(2)unmodifiable
수정불가 컬렉션 만들기
(3)singleton
객체한개만 저장하는 할수 있는 컬렉션 만들기 메서드
(4)checked
한 종류의 객체만 저장하는 컬렉션 만들기

2.지네릭스 란?
타입을 지정해 줌으로써 컴파일러에게 타입에 대한 정보를 알려주는것
컴파일된 타입체크를 강화해주는 기능
객체의 타입 안전성을 높이고 형변환의 번거로움을 줄여줄수 있다.

ArrayList<TV> tv =new ArrayList<TV>(); //TV타입 객체만 저장가능

3.타입 변수
지네릭 클래스를 작성할때 Object타입 대신 타입변수(E)를 선언해서 사용
객체생성시 타입변수(E)대신 실제 타입(TV)을 지정
타입면수 대신 실제 타입이지정되면, 형변환 생략가능

public class ArrayList<E> extends AbstractList<E>{//클래스타입지정
  	<E> name; //변수타입지정 
    public <E> add(<E> a){...} //메서드 반환타입지정,매개변수타입지정 
  }
  
 ArrayList<TV> tv =new ArrayList<TV>();

객체생성시 지네릭스 타입을 정의 내려 주는데, 이때 타입을 TV로 지정했고
위에 ArrayList class의 타입변수가 TV타입으로 바뀐다.

4.지네릭스 특징
(1)참조변수와 생성자의 대입된 타입은 일치해야 된다.

ArrayList<TV> tv =new ArrayList<TV>(); //TV타입 을 맞춰줬음.

(2)지네릭 클래스간의 다형성은 성립(이때 대입된 지네릭타입은 일치해야된다.)

List<TV> list=new ArrayList<TV>();

(3)매개변수의 다형성도 성립

List<Product> list=new ArrayList<Product>();     
list.add(new Tv()); //Product타입의 자손객체인 Tv가 매개변수로 들어감
    list.add(new Audio()); //Product타입의 자손객체인 Audio가 매개변수로 들어감 
왜?? add(<E> a){...} ->add메서드의 타입변수가  Product로 바뀌고 Product의 자식 타입도 들어올수 있기 때문

(4)JDK1.7부터 지네릭스 생성자타입은 생략가능

ArrayList<TV> tv =new ArrayList<>();

5.지네릭 클래스
(1)Iterator
(2)HashMap<K,V>
여러개의 타입 변수가 필요한 경우, 콤마()를 구분자로 선언

6.제한된 지네릭클래스

extends로 대입할수 있는 타입을 제한함
    class FruitBox<T extends Fruit>{...} //Fruit을 상속받은 자손 타입만 대입가능함"
    FruitBox<Apple> a =new FruitBox<Apple>(); //가능"
    FruitBox<Toy> a =new FruitBox<Toy>(); //불가"

7.지네릭스의 제약사항
(1)static멤버에 타입변수 사용불가
왜?지네릭스는 인스턴스를 생성할때 지정 가능 하므로
(2)객체 생성할때 타입 변수 사용불가.타입 변수로 객체 선언은 가능
왜? new 연사자뒤에 타입은 확정이 되어야 하므로 타입변수는 못씀. 타입변수는 자체가 미확정 임.

profile
좋은개발자가 되기위한 삽질기록 노트

0개의 댓글

Powered by GraphCDN, the GraphQL CDN