[Java] List

jinsung·약 23시간 전

Java

목록 보기
7/8
post-thumbnail

1. 인터페이스 도입

자료구조에서 다형성과 OCP 원칙을 잘 활용할 수 있다.

List 자료구조

  • 순서가 있고, 중복을 허용하는 자료 구조를 List라 한다.

  • ArrayListLinkedList의 공통 기능을 인터페이스로 뽑아서 추상화하면 다형성을 활용한 다양한 이득을 얻을 수 있다.


2. 의존관계 주입

public class Processor {

	private final MyList<Integer> list;
    
    public Processor(MyList<integer> list) {
    	this.list = list;
    }
    
    public void logic(int size) {
    	for (int i = 0; i < size; i++) {
        	list.add(0, i);
        }
    }
}

main() {
	new Processor(new MyArrayList()); //ArrayList 사용하고 싶을 때 사용
    new Processor(new MyLinkedList()); // LinkedList 사용하고 싶을 때 사용
}
  • ProcessorMyArrayList() , MyLinkedList() 에 직접 의존하는게 아니라 MyList() 인터페이스에 의존해 원하는 클래스를 원할 떄 꺼내서 사용하면 된다.

  • 이렇게 인터페이스에 의존하면 Processor 의 코드를 전혀 변경하지 않고, 원하는 리스트 전략을 런타임에 지정할 수 있다.

생성자 주입

public Processor(MyList<integer> list) {
	this.list = list;
}
  • Processor 생성자를 통해 런타임 의존관계를 주입하는 것을 생성자 주입이라 한다.

3. Java의 List

1. Collection 인터페이스

  • Collection 인터페이스는 java.util 패키지의 컬렉션 프레임워크의 핵심 인터페이스 중 하나이다.

  • List, Set, Queue 와 같은 다양한 하위 인터페이스와 함꼐 사용되며, 데이터를 각 형태에 맞게 관리할 수 있다.

2. List 인터페이스

  • List 인터페이스는 java.util 패키지에 있는 컬렉션 프레임워크의 일부이다.

  • Collection 인터페이스에게 상속받는다.

  • 객체들의 순서가 있는 컬렉션을 나타내며, 같은 객체의 중복 저장을 허용한다.

  • 배열과 비슷하지만, 크기가 동적으로 변화하는 컬렉션을 다룰 때 유연하게 사용가능 하다.

List 실제 성능

이론적으로 LinkedList 의 중간 삽입 연산은 ArrayList 보다 빠르다.
그러나 실제 성능은 데이터 순차적 접근 속도, 메모리 할당 및 해제 비용, CPU 캐시 활용도 등 다양한 요소에 영향을 받는다.

또한 자바의 ArrayList 는 데이터를 한 칸씩 이동시키지 않고, 메모리 고속 복사 연산을 사용한다.

따라서 여러가지 요소에 의해 ArrayList 가 실제 사용 환경에서 더 나은 성능을 보여주는 경우가 많다.

  • 실무에서는 주로 ArrayList 를 사용한다.

  • 만약 많은 데이터를 반복적으로 추가 / 삭제 하는 일이 많을 때만 LinkedList 를 고려한다.

profile
Backend Engineer

0개의 댓글