본문 바로가기

Java

LinkedList 와 List 선언 차이

습관적으로 자바 Collection Framework의 자료구조를 사용할 때 

public static void main(String[] args) {
    LinkedList<String> linkedList = new LinkedList<>();
}

위와 같이 사용을 했었다.

 

자료구조를 직접 만들며 공부하던 중 한가지 의문이 생겼다.

왜 List<String> 으로 선언을 하면 안되는건가?

대부분의 예제 설명에서 LinkedList로 선언을 하고 있고 List로는 선언을 하고 있지 않다.

 

과연 LinkedList 와 List 중 어떤걸 선언하는게 더 바람직한 사용법일까?

결론 부터 말하자면 List로 선언하는게 더 바람직한 사용법이다.

 

왜냐하면 SOLID 원칙 중 D 의존 역전 원칙 - DIP (Dependency Inversion Principle)에 의해 인터페이스를 의존하는 방법이 옳기 때문이다.

 

만약 위와 같은 코드에서 LinkedList 구현체가 아닌 ArrayList 구현체를 사용하기 위한다면 리턴 타입 과 같은 소스코드 전반적인 수정 할 필요가 생기게 됩니다. 

하지만 

public static void main(String[] args) {
	List<String> list = new LinkedList<>();
}

위와 같은 코드에서는 LinkedList를 ArrayList로 수정하게 된다면 소스 코드를 그대로 사용 할 수 있기 때문이다.

 

위와 같은 방식으로 사용하는 것을 업스케일링이라고 합니다.

업스케일링이란 상위 개념(부모)을 생성하고 하위 개념(자식)을 할당하는 것을 의미 합니다.