java.util.AbstractList는 자바의 Collection Framework에서 제공하는 인터페이스 중 하나인 List 인터페이스를 구현하는 추상 클래스입니다. 이 클래스는 List 인터페이스를 구현하는 클래스에서 공통으로 사용되는 메서드들을 미리 구현해 놓음으로써, 구현 클래스에서 구현해야 할 코드 양을 줄여주는 역할을 합니다.
AbstractList 클래스는 다양한 List 구현체들이 공통으로 사용하는 메서드를 구현하고 있습니다. 예를 들어, get(int index), set(int index, E element), add(int index, E element), remove(int index) 등의 메서드는 모든 List 구현체에서 공통적으로 사용됩니다. AbstractList 클래스는 이러한 메서드들의 구현을 미리 해놓음으로써, 구현 클래스에서는 이러한 메서드들을 직접 구현할 필요가 없습니다.
또한 AbstractList 클래스는 List 인터페이스에서 제공하는 다양한 메서드들의 구현을 추상 메서드로 남겨둡니다. 이렇게 함으로써, 구현 클래스에서는 추상 메서드를 구현함으로써 자신만의 독특한 기능을 추가할 수 있습니다.
AbstractList 클래스는 자체적으로는 인스턴스를 생성할 수 없으며, 상속받아서 사용해야 합니다. 이 클래스를 상속받아 구현 클래스를 만들 경우, List 인터페이스를 구현하는데 필요한 기본적인 메서드들의 구현을 대부분 AbstractList 클래스에서 제공받을 수 있으므로, 구현 클래스에서는 이러한 메서드들의 구현에 집중할 필요가 없어져서, 코드 작성을 더 효율적으로 할 수 있습니다.
AbstractList 클래스는 List 인터페이스를 구현하는 클래스를 만들 때 유용하게 사용됩니다. 이 클래스는 List 인터페이스에서 제공하는 다양한 메서드들의 구현을 미리 해놓음으로써, 구현 클래스에서 코드 중복을 피하면서도 필요한 메서드를 간편하게 구현할 수 있도록 도와줍니다.AbstractList 클래스는 또한, ListIterator<E> 인터페이스를 구현하는 메서드를 구현하고 있습니다. ListIterator 인터페이스는 List에 저장된 요소들을 순차적으로 접근하며, 요소들을 추가하거나 삭제하는 등의 작업을 수행하는 메서드를 제공합니다. AbstractList 클래스는 ListIterator 인터페이스를 구현하는 메서드들을 구현함으로써, 구현 클래스에서 이러한 메서드들을 추가적으로 구현할 필요 없이 바로 사용할 수 있도록 해줍니다.
AbstractList 클래스는 또한, SubList 메서드를 제공합니다. 이 메서드는 List 인터페이스에서 제공하는 subList 메서드의 구현을 담당하며, List의 일부를 추출하여 새로운 List를 만들어 반환합니다. 이 메서드는 AbstractList 클래스에서 구현되어 있으므로, 구현 클래스에서 따로 구현할 필요가 없습니다.
마지막으로, AbstractList 클래스는 List 인터페이스에서 제공하는 size() 메서드의 구현을 제공합니다. 이 메서드는 List에 저장된 요소들의 개수를 반환합니다. AbstractList 클래스에서는 이 메서드를 추상 메서드로 남겨둘 수 있지만, 대부분의 List 구현체에서는 size() 메서드를 미리 구현해 놓는 것이 좋습니다.
요약하자면, java.util.AbstractList는 List 인터페이스를 구현하는 클래스에서 공통으로 사용되는 메서드들을 미리 구현해 놓음으로써, 구현 클래스에서 구현해야 할 코드 양을 줄여주는 역할을 합니다. AbstractList 클래스는 ListIterator 인터페이스를 구현하는 메서드들도 제공하며, SubList 메서드와 size() 메서드의 구현도 제공합니다. AbstractList 클래스를 상속받아서 List 인터페이스를 구현하는 클래스를 만들 경우, 이 클래스를 사용함으로써 코드 작성을 더 효율적으로 할 수 있습니다.물론입니다. 다음은 AbstractList 클래스를 상속받아서 List 인터페이스를 구현하는 예제 코드입니다.
import java.util.AbstractList;
public class MyList extends AbstractList<Integer> {
private int[] data;
public MyList(int[] data) {
this.data = data;
}
public Integer get(int index) {
return data[index];
}
public int size() {
return data.length;
}
public void add(int index, Integer element) {
throw new UnsupportedOperationException();
}
public Integer set(int index, Integer element) {
throw new UnsupportedOperationException();
}
public Integer remove(int index) {
throw new UnsupportedOperationException();
}
}
이 예제 코드에서 MyList 클래스는 int형 배열을 이용해서 List 인터페이스를 구현합니다. AbstractList 클래스를 상속받았기 때문에, MyList 클래스에서는 List 인터페이스에서 제공하는 메서드 중 일부를 구현할 필요가 없습니다. 예를 들어, size() 메서드는 AbstractList에서 구현되어 있으므로, MyList 클래스에서는 size() 메서드를 구현할 필요가 없습니다.
이 코드에서는 add(), set(), remove() 메서드를 UnsupportedOperationException을 던지는 방식으로 구현했습니다. 이는 MyList 클래스에서는 이러한 메서드를 지원하지 않기 때문입니다. 따라서, 이러한 메서드를 호출하면 예외가 발생합니다.
이 예제 코드를 실행해보면, 다음과 같은 결과를 얻을 수 있습니다.
int[] data = {1, 2, 3, 4, 5};
MyList myList = new MyList(data);
System.out.println(myList.get(2)); // 출력: 3
System.out.println(myList.size()); // 출력: 5
myList.add(3, 10); // 예외 발생: UnsupportedOperationException
myList.set(2, 20); // 예외 발생: UnsupportedOperationException
myList.remove(4); // 예외 발생: UnsupportedOperationException
이 예제 코드에서는 MyList 클래스를 사용해서 int형 배열을 List처럼 사용할 수 있습니다.
이 클래스를 상속받아서 List 인터페이스를 구현하면, 이와 유사한 클래스를 만들어서 사용할 수 있습니다.
'PT선생님의 코딩 강좌' 카테고리의 다른 글
[PT선생님][31]java.util.AbstractMap 알아보기 (0) | 2023.02.24 |
---|---|
[PT선생님][30]javax.swing.AbstractListModel 알아보기 (0) | 2023.02.23 |
[PT선생님][28]자바 javax.swing.tree.AbstractLayoutCache.NodeDimensions 알아보기 (0) | 2023.02.23 |
[PT선생님][27]자바 javax.swing.tree.AbstractLayoutCache 알아보기 (0) | 2023.02.22 |
[PT선생님][26]자바 java.nio.channels.spi.AbstractInterruptibleChannel 알아보기 (0) | 2023.02.22 |