JAVA
[JAVA] List, Set은 선언된 변수만으로 컬렉션의 내용이 찍힌다
hail2y
2025. 1. 11. 19:32
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으로부터 상속받은 메서드라고 나오는 것을 알 수 있다.