제네릭스
필요한 타입으로 형변환을 해줘야 한다.
넣을 때, 꺼낼 때 무슨 타입인지 모르게 되는 경우가 있음.
애초에 타입을 넣어주는 방법으로 해결
타입 변수 : E, T 를 주로 사용함.
컴파일 과정에서 지네릭스가 모두 지워짐. object 로 변환됨. (하위호환을 위해)
버전 낮은 환경에서 오류가 날 수 있음. 형변환 코드를 get메서드 안에 넣어줌
도입된 취지 : 타입 안정성을 위함임.
심화되서 들어가면
- 아무거나 타입을 지정 못하게 제한 시킬 수 있음.
- 제한된 코드가 좋은 코드
public class Student<T extends String> {
}
* String 을 상속한 것만 들어올 수 있음.
지네릭스의 한계 :
List<?, extends Fruit> fruteList = new ArrayList<Apple>();
매개변수로 받을 때 fruitList 를 받고 싶을 때 사용
클래스 레벨에서 타입 지정할 땐 extends
매개변수에서는 super도 사용가능함.
메서드레벨에서 타입을 지정해줄 수도 있음.
public static <T> void adc(T value){
}
public static <T> void adc(List<?, extends T> value){
}
데이터를 모아두고 관리할 때 자료 구조가 다양해서
list / set / map
list
순서가 있는
set
순서가 없는
중복 불가능
map
interator : 반복자 -> 실제로 반복을 해줌 .
hasNext / Next 를 사용해서 자동으로 돌려주는 것임.
interable을 구현한 애는 반복할 수 있다는 것을 아려주는 것
아니면 반복문을 돌릴 수 없음
Enumeration 안씀. interator 사용함.
컬렉션의 하위 객체 list
컬렉션 상속 받음.
컬렉션에 없는 메서드를 상속 받기도 함. (리스트의 자체적인 리스트)
get / add(collection에도 있지만 이건 boolean으로 반환됨)
자료구조DS(자료구조) / 추상화 데이터 개념ADT(인터페이스)
list ADT순서가 있는 데이터의 집합이다.
자료구조 -> add()어디에 어떻게 집어 넣는지
arrayList / linkedList
arrayList -> 배열로 구현
linkedList -> 배열 없이 노드라는 개념을 사용
자신의 주소, 내 앞의 주소를 가짐.
elementDate 를 가지고 구현을 함. 데이터를 이 배열에 넣고, 삭제를 함.
array를 사용할 때 문제점. 단점 : 배열의 앞 쪽에서 데이터를 삭제하거나 삽입하면 다 옮겨야해서 속도가 느려짐.
그러나 끝에서 하는 것은 속도가 빠름.
따라서 앞쪽에서 데이터를 넣고 빼고 할때는 arrayList를 쓰는 게 좋음.
LinkedList
원래 내 노드는 다음 데이터의 노드의 주소값을 가지고 있음
맨 끝 노드를 찾으려면 처음부터 하나씩 이동해서 찾아야 함.
더블드링크드 리스트 (양방향)
서클러링크드 리스트
자바구현 LinkedList는 양방향임 . 더블드링크드리스트!!
가운데 값을 조회하려면 속도가 느릴 수 있음.
Set / ADT로서 설명하려면
HashSet
내부 구조를 알려면 HashMap을 알아야 함.
키와 벨류의 쌍을 entry라고 부름
map을 구현하려면 entry도 구현해야함.
map.entrySet(); -> k,v둘다 가져올 수 있음.
map.keySet();
HashMap
'👩💻 BackEnd > ☕️ 자바 [Java]' 카테고리의 다른 글
[자바의 정석] 12-2 ~ 12-5. 타입변수, 대입, 지네릭스 용어, 지네릭스 타입과 다형성 (0) | 2024.01.04 |
---|---|
[자바의 정석] 12-1. 지네릭스란? (0) | 2024.01.04 |
[JAVA] StringBuilder (0) | 2023.04.29 |
[JAVA] 자바 IO (0) | 2023.04.24 |
[JAVA] 사용자 정의 Exception (0) | 2023.04.18 |