리스트는 왜 나뉘어져있을까?
JCF (Java Collection Framework)를 사용하다보면 종종 ArrayList와 LinkedList로 List에 주입하는데
왜 두가지 구현을 제공할까? 어떤 동작은 ArrayList가 빠르고 어떤 상황에서는 LinkedList가 더 효율적이다.
List와 같이 Interface는 메서드의 집합을 의미한다 아래 코드를 보자.
public class ExampleList {
private List list;
private ExampleList() {
list = new LinkedList();
}
private List getList() {
return list;
}
public static void main(String[] args) {
ExampleList ice = new ExampleList();
List list = ice.getList();
System.out.println(list);
}
}
ExampleList는 유용한 동작을 하진 않지만 List를 캡슐화하는 클래스의 필수요소를 가진다.
즉 List(Interface)형의 필드를 가진다.
생성자를 통해 LinkedList() 를 할당하지만 필요하다면 생성자만 바꿔 ArrayList를 할당할 수 도 있다.
이러한 스타일을 인터페이스 기반 프로그래밍이라하며 다형성을 가진다.
나중에 구현이 바뀌어도 인터페이스를 사용하는 코드는 그대로 유지가 가능하다.
특정구현에 의존하지말고 인터페이스만을 바라보는 설계를 하는게 중요하다.
'Java > Data Structures' 카테고리의 다른 글
4. 선택정렬 (0) | 2021.03.16 |
---|---|
3. 알고리즘 분석 (0) | 2021.03.16 |
1. 자료구조 왜? (0) | 2021.03.16 |