ABOUT ME

-

  • JAVA) List 와 ArrayList 차이
    Java 2020. 7. 13. 17:28

     

     

    문득 ListArrayList차이점이 궁금해서 검색을 해봤습니다.

     

    • List = 인터페이스
    • ArrayList = 클래스

     

    List는 interface다. interface는 공통되는 메서드를 추출해 놓은 클래스로 생각하면 된다. 

    즉 범위로 생각하면 List 안에 ArrayList, LinkenList...등이 포함되어 있다.

     

    대부분 이런식으로 차이점을 소개한 글이어서, 뭔가 궁금한 부분을 확실히 해소해주지 못하는 느낌이었습니다.

    그래서 List와 ArrayList의 차이점이 뭔데!?

     

    • ArrayList <Object> list = new ArrayList <>();
    • List <Object> list = new ArrayList <>();  

    위의 두 코드의 차이는 무엇일까요.

     

    2가지 모두 같은 결과를 도출합니다. 하지만 List를 사용해 ArrayList를 생성하는 것은 유연성에서 효과를 볼 수 있습니다.

    -> The reason why you'd ever want to do such a thing is for flexibility

     

    여기서 Generic(제너릭)에 대한 개념이 나옵니다.

     

    만약에 우리가 어떤 자료구조를 만들어 배포하려고 합니다.

     

    그런데 String 타입도 지원하고 싶고 Integer타입도 지원하고 싶고 많은 타입을 지원하고 싶습니다.

    그러면 String에 대한 클래스, Integer에 대한 클래스 등 하나하나 타입에 따라 만들 것인가요?

     

    그건 너무 비효율적이게 됩니다. 이러한 문제를 해결하기 위해 우리는 Generic(제너릭)이라는 것을 사용합니다.

     

    Generic클래스 내부에서 지정하는 것이 아닌 외부에서 사용자에 의해 지정되는 것을 의미합니다.

    한마디로 특정 타입을 미리 지정해주는 것이 아닌 필요에 의해 지정할 수 있도록 하는 일반(Generic) 타입입니다.

     

    즉, 저런 인스턴스의 형 변환을 통해 내부 디테일과 메모리 함축에서 이점과 성능을 개선시킬 수 있습니다.

     

    데이터의 용도에 따라 빠른 탐색을 위해서 ArrayList를 사용할 때도 있고, 삽입/삭제를 위해 LinkedList를 사용해야 하는 경우도 있습니다.

     

    (유연성의 예)

    List <Object> list = new List <>();

    List <Object> list = new LinkedList <>();

     

     

    - 자바의 다형성 관련 - 

     

    클래스를 생성할 때 도형 타입으로 생성하게 되면 정사각형이 아닌

    다른 직사각형, 삼각형 등 도형 인터페이스를 구현한 클래스에서 사용될 수 있습니다.

    하지만 정사각형 클래스로 생성하게 되면 직사각형, 삼각형 등 에서는 사용할 수 없습니다.

     

    도형에 비유하여 풀어보면,

     

    List list = new ArrayList();

    -> 도형 list = new 정사각형();

     

    ArrayList list = new ArrayList();

    -> 정사각형 list = new 정사각형();

     

    • 데이터의 삽입이나 삭제가 필요한 상황에서 List로 선언한 인스턴스를 LinkedList로 바꾸게 되면 아무런 문제 없이 LinkedList의 장점을 취할 수 있습니다.

     



    반응형

    댓글

Designed by Me.