List list = new ArrayList(); 라고 쓸까?
인스턴스 타입을 클래스 대신 인터페이스로 초기화 할까?
인터페이스를 구체클래스의 위에 타입으로 덧씌우는 것은 캡슐화와 낮은 결합도의 핵심이다.
나중에 테스트코드를 작성하기도 쉬워지고 변경사항이 생겨도 변화에 쉽게 대응 할 수 있기 때문이다.
List<Object> list = new ArrayList<Object>();
이렇게 정의되어 있는 것을 Stack으로 변경할 때
List<Object> list = new Stack<Object>();
클래스로 바꿔준다.
이렇게 될 경우 ArrayList, Stack 모두 List를 구현한 구체클래스여서 Counter.sizeOf(list) 같은 코드가 밑에 있더라도 변경하지 않을 수 있다.
즉 결합도를 낮추고 의존성을 분리한 것.
한 코드의 변화가 다른 코드의 변화를 만들어 내지 않을수록 생산성이 높아지기 때문이다.
그럼 이러한 List 프레임워크 종류를 알아보자.
Collection Framework(데이터들을 효과적으로 처리할 수 있는 방법을 제공하는 클래스의 집합)
- 컬렉션 프레임워크의 핵심 인터페이스
Note
List : 순서가 있는 데이터의 집합, 중복을 허용(ArrayList, LinkedList, Stack, Vector)
Set : 순서를 유지하지 않는 데이터의 집합, 중복 허용X(HashSet, TreeSet)
Map : Entry(Key, Value)로 이루어진 데이터의 집합, key 중복 허용 x(HashMap, TreeMap)
특징
- 배열기반
- 데이터의 추가와 삭제에 불리(순차적인 삭제는 빠르다)
- 임의의 요소에 대한 접근성이 뛰어나다.(index)
LinkedHashMap LinkedHashSet
ArrayList | 배열기반 데이터의 추가와 삭제에 불리( 순차적인 삭제는 제일 빠름) 임의의 요소에 대한 접근성이 뛰어남 (index) |
|||||||
LinkedList | 연결기반 데이터의 추가와 삭제에 유리 임의의 요소에 대한 접근성이 좋지 않음 |
|||||||
HashMap | 배열과 연결이 결합된 형태 추가 ,삭제, 검색, 접근성 모두 뛰어남 검색에 최고의 성능 |
|||||||
TreeMap | 연결기반 정렬과 검색( 특히 범위 검색)에 적합 검색성능은 HashMap보다 떨어짐 |
|||||||
Stack | Vector을 상속받아 구현 | |||||||
Queue | LinkedList가 Queue 인터페이스를 구현 | |||||||
Properties | HashTable을 상속받아 구현 | |||||||
HashSet | HashMap을 상속받아 구현 | |||||||
TreeSet | TreeMap을 이용해서 구현 | |||||||
LinkedHashMap LinkedHashSet |
HashMap과 HashSet에 저장순서유지기능을 추가 | |||||||
'기술 스텍 > Java' 카테고리의 다른 글
고유 락이란? -Java (0) | 2024.01.08 |
---|---|
[Java] 가비지 컬렉션이란? (0) | 2024.01.07 |
서블릿(survlet) (0) | 2023.06.23 |
java기초(7) 제네릭스 (0) | 2023.01.24 |
java 기초(6) (0) | 2023.01.23 |