Collection 인터페이스는 List와 Set 인터페이스의 공통된 부분을 뽑아 정의한 것이다. 이 Collection 인터페이스를 일부 구현한 게 추상 클래스인 AbstractCollection이고, 그 아래 AbstractList와 AbstractSet이 있다. 이들 또한 추상 클래스들이고 우리가 많이 사용하는 ArrayList, HashSet 등이 이들을 상속하여 사용하고 있다.
어찌됐건 내가 궁금했던 것은 List와 Set 인스턴스를 출력할 때 왜 변수만으로 객체 주소가 아니라 컬렉션의 내용이 출력되는지였다. 그 이유는 아래와 같이 이들의 조상인 AbstractCollection에서 toString() 메서드를 오버라이드했기 때문이다.
예제를 보면 쉽게 이해할 수 있다. 작성된 코드는 자바의 정석 예제를 일부 수정하였다. [참고:https://www.youtube.com/watch?v=JYcFX4O2kqM]
import java.util.*;
class Main {
public static void main(String[] args) {
Object[] objArr = {"1",new Integer(1),"2","2","3","3","4","4","4"};
Set set = new HashSet();
for(int i=0; i < objArr.length; i++) {
set.add(objArr[i]); // HashSet에 objArr의 요소들을 저장한다.
}
// HashSet에 저장된 요소들을 출력한다.
System.out.println(set); // [1, 1, 2, 3, 4]
List list = new ArrayList();
for(int i=0; i < objArr.length; i++) {
list.add(objArr[i]); // HashSet에 objArr의 요소들을 저장한다.
}
// ArrayList에 저장된 요소들을 출력한다.
System.out.println(list.toString()); // [1, 1, 2, 2, 3, 3, 4, 4, 4]
}
}
이들의 공식 문서를 참고해 보면 위처럼 AbstractCollection으로부터 상속받은 메서드라고 나오는 것을 알 수 있다.
'JAVA' 카테고리의 다른 글
[JAVA] 소수점 특정 자릿수까지 표현하기 (0) | 2025.01.02 |
---|---|
[JAVA] 천 단위마다 쉼표로 구분하기 - DecimalFormat, NumberFormat (1) | 2024.11.04 |
[JAVA] 열거형 enum (6) | 2024.10.09 |
[JAVA] 직렬화, 역직렬화 개념 (1) | 2024.10.02 |
[JAVA] 큐(Queue), 덱(Deque) 구현체, 메서드 정리 (0) | 2024.09.30 |