java/공부

java에서 List와 ArrayList 차이점

sungin95 2023. 7. 19. 20:09

java공부를 하다가 이상한 코드를 만나게 되었습니다.

private List<QueryString> queryStrings = new ArrayList<>();

앞에서는 List 뒤에서는 ArrayList를 사용하고 있었습니다. 그리고 한쪽은 QueryString을 받고 한쪽은 없었습니다.

찾아 보니 그렇게 쉬운 내용은 아니라서 정리를 해 보았습니다.

 

요약

List는 인터페이스라서 인스턴스를 생성하지 못함. 

ArrayList는 클래스로 인터페이스의 구체적인 구현 가능. 

구현은 ArrayList 말고도 Vector, LinkedList로 할 수 있다. 

 

ArrayList특징

ArrayList는 크기가 가변적으로 변합니다.

내부적으로 저장이 가능한 메모리 용량(Capacity)이 있으며 현재 사용 중인 공간의 크기(Size)가 있습니다.

만약 현재 가용량(Capacity) 이상을 저장하려고 할 때 더 큰 공간의 메모리를 새롭게 할당합니다.

 

 

 

interface와 class의 차이

정의 및 목적

  • 클래스: Java의 클래스는 개체를 만들기 위한 청사진 또는 템플릿입니다. 해당 클래스에 속하는 개체의 구조, 동작 및 상태를 정의합니다. 클래스는 개체의 동작을 정의하는 필드(변수) 및 메서드(함수)를 가질 수 있습니다. 생성하는 동안 개체의 상태를 초기화하는 생성자를 가질 수도 있습니다.
  • 인터페이스: Java의 인터페이스는 해당 인터페이스를 고수하려는 경우 클래스가 구현해야 하는 일련의 메서드를 정의하는 계약입니다. 메소드 구현을 포함하지 않습니다. 대신 메서드 구현 방법을 지정하지 않고 메서드 서명(이름, 반환 유형 및 매개 변수)을 선언합니다. 인터페이스는 추상화를 달성하고 다양한 클래스에 대한 공통 동작을 정의하는 방법을 제공하는 데 사용됩니다.

인스턴스화

  • 클래스: 개체는 클래스의 인스턴스입니다. new 키워드를 사용하여 클래스에서 객체를 생성하면 해당 객체에 메모리가 할당되고 자체 데이터를 보유하고 메서드를 실행할 수 있습니다.
  • 인터페이스: 인터페이스 자체는 인스턴스화할 수 없습니다. 클래스가 구현하도록 선택할 수 있는 계약만 제공합니다. 해당 인터페이스를 구현하는 클래스의 객체를 가리키는 인터페이스 유형의 참조를 가질 수 있습니다. 이를 통해 다형성 및 동적 메서드 바인딩이 가능합니다.

상속

  • 클래스: Java에서 클래스는 단일 상속에 참여할 수 있습니다. 즉, 클래스는 다른 하나의 클래스만 확장(상속)할 수 있습니다. 이렇게 하면 자식 클래스와 부모 클래스 사이에 "is-a" 관계가 설정됩니다.
  • 인터페이스: 인터페이스는 다중 상속을 지원합니다. 즉, 클래스가 여러 인터페이스를 구현할 수 있습니다. 이를 통해 클래스는 여러 소스에서 동작을 상속할 수 있습니다.

 

결국

private List<QueryString> queryStrings = new ArrayList<>();

List<QueryString> 을 통해 타입을 지정하고 ArrayList와 같은 특징을 가진 리스트 인스턴스를 queryStrings에  만들었다고 할 수 있을거 같다. 

참고로 구지 인터페이스를 통해 타입을 지정하는 이유는 클래스는 단일 상속만 가능하지만 인터페이스는 다중상속을 지원하기 때문이라고 한다. 

 

 

 

 

참고자료:

https://www.geeksforgeeks.org/difference-between-list-and-arraylist-in-java/

 

Difference between List and ArrayList in Java - GeeksforGeeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org

 

GPT 에게 물어본 "java에서 class와 interface의 차이점"

 

https://psychoria.tistory.com/765

 

[Java] 자바 ArrayList 사용 방법

ArrayList는 자바에서 기본적으로 많이 사용되는 클래스입니다. ArrayList는 자바의 List 인터페이스를 상속받은 여러 클래스 중 하나입니다. 일반 배열과 동일하게 연속된 메모리 공간을 사용하며 인

psychoria.tistory.com

http://www.tcpschool.com/java/java_polymorphism_interface

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com