List<Object> list = new ArrayList<Object>();
위와 같이 ArrayList와 같은 구현체 클래스가 아닌 List라는 인터페이스로 ArrayList를 업캐스팅해서 선언하는지 알아보았다.
1. 나중에 데이터의 용도가 바뀌어 삽입/삭제가 유리한 LinkedList 자료구조로 변경해야 할 때
ArrayList<Object> list = new ArrayList<>();
이렇게 ArrayList라는 인스턴스로 선언해두었다면 ArrayList로 선언된 모든 부분을 LinkedList로 변경해 주어야 하지만 List라는 인터페이스로 선언했다면 선언부 외에 다른 부분을 변경할 필요가 없는 유연함을 가지고 있다.
2. 대부분 ArrayList만이 제공하는 기능을 쓰지 않는다. 그렇기에 List로 선언해야 List에서 제공하는 메소드까지 사용이 가능하기 때문에 List로 선언한다.
결국 객체는 인터페이스를 사용해 선언하는게 좋다는게 결론이다.