[Java] 왜 List<String> list = new ArrayList<>(); 이렇게 선언할까?

G·2024년 6월 26일
0

Java

목록 보기
16/21
post-thumbnail

💡 Java에서 리스트를 선언할 때 흔히 List<String> list = new ArrayList<>(); 와 같은 방식을 많이 봅니다. 그렇다면 왜 이런 방식으로 선언할까요? 이번 블로그에서는 그 이유를 자세히 설명해보겠습니다.


✏️  인터페이스 & 구현체

  • 우선 이유를 보기 앞서 인터페이스와 구현체 내용에 대한 이유가 필요합니다.

    인터페이스와 구현체에 대한 자세한 설명
    👉 [Java] 인터페이스 & 구현체


🎨  인터페이스란?

  • 인터페이스는 특정 동작을 정의하고, 이를 구현한 클래스가 실제 동작을 수행합니다.
  • 여기서 List 는 인터페이스입니다.
    // 인터페이스로는 직접 객체를 생성할 수 없습니다.
    List<String> list = new List<>();

🎨  구현체란?

  • 구현체는 인터페이스를 구현한 클래스입니다.
  • ArrayListList 인터페이스의 구현체 중 하나입니다. 따라서 객체를 생성할 수 있습니다.
  • 여기서 List 는 인터페이스입니다.
    // 구현체인 ArrayList로는 객체를 생성할 수 있습니다.
    List<String> list = new ArrayList<>();

✍️ 코드의 유연성과 유지보수성

  • List 인터페이스로 변수를 선언하면 나중에 다른 리스트 구현체로 쉽게 바꿀 수 있습니다. 예를 들어, ArrayListLinkedListVector 로 변경하는 것이 가능합니다.
  • List 인터페이스를 사용하면 다양한 리스트 구현체를 한 번에 다룰 수 있습니다.
    // List 인터페이스를 사용한 변수 선언
    List<String> list = new ArrayList<>();
    
    // 나중에 필요에 따라 다른 구현체로 쉽게 변경 가능
    list = new LinkedList<>();
    list = new Vector<>();

🎨  개방-폐쇄 원칙 (Open/Closed Principle)

  • 개방-폐쇄 원칙에 따르면 소프트웨어 구성 요소는 확장에는 열려 있어야 하지만 수정에는 닫혀 있어야 합니다. 인터페이스를 사용하면 구현체 변경 시 최소한의 수정으로 다양한 요구사항을 반영할 수 있습니다.

✍️ 다형성(Polymorphism)

  • List 인터페이스를 사용하면 List 인터페이스의 모든 메서드를 사용할 수 있습니다.
  • 예를 들어, 동일한 메서드에서 List 인터페이스를 사용하는 경우, 다양한 리스트 구현체를 매개변수로 받을 수 있습니다.
    public void addElements(List<String> list) {
        list.add("element1");
        list.add("element2");
    }
    
    // 사용하는 측에서는 구현체에 상관없이 메서드를 호출할 수 있음
    List<String> arrayList = new ArrayList<>();
    addElements(arrayList);
    
    List<String> linkedList = new LinkedList<>();
    addElements(linkedList);
    
    List<String> vectorList = new Vector<>();
    addElements(vectorList);

✍️ API 설계의 유연성

  • API를 설계할 때 인터페이스를 사용하면 사용자에게 특정 구현체를 강제하지 않습니다. 이는 API의 유연성을 높이고 사용자의 선택권을 넓혀줍니다.
  • 예를 들어, 라이브러리를 설계할 때 List 인터페이스를 사용하면 라이브러리 사용자가 원하는 리스트 구현체를 선택하여 사용할 수 있습니다.


✍️ 결론

List<String> list = new ArrayList<>();로 선언하는 것은 코드의 유연성, 유지보수성, 다형성을 높이기 위한 좋은 방법입니다. 이는 특히 대규모 프로젝트나 협업 환경에서 매우 중요한 장점이 됩니다. 따라서, 인터페이스를 사용하여 변수를 선언하는 것이 권장됩니다.

profile
기!술! 블로그

0개의 댓글