List<String> terms = new ArrayList<String>();
이렇게 선언해야 한다.
왜?
List는 인터페이스
ArrayList는 List의 구현체로 볼 수 있다.
그렇다면, 좀 더 큰 개념으로 선언해서 사용하는것인데...
그 이유는
다형성(polymorphism)의 개념으로 이해할 수 있다.
List 인터페이스는 여러가지 구현체로 변경될 수 있는 형태이고,
ArrayList는 List 인터페이스의 구현체 중 하나이다.
이 때, List로 선언해서 사용하면 차후에 다른 구현체로 변경하고자 할 때,
실제로 구현체를 이용하는 세부 코드(?)만 변경해 줄 수 있다.
(반대로, ArrayList = new ArrayList()로 선언했다면 ArrayList로 선언한 모든 부분을 찾아 변경해줘야 한다.)
이런 부분이 다형성의 특징이며,
List = new ArrayList()처럼 객체의 선언을 인터페이스로 하는 것도 그 특징을 이용한 한 사례이다.
참고:
2) http://stackoverflow.com/questions/18329311/reason-for-list-list-new-arraylist
3) 위키북스 : http://wikibook.co.kr/article/java-coding-with-pmd-loosecoupling/
1) okky : http://okky.kr/article/149819
2) spWony blog: http://xxwony.egloos.com/tb/33456
java api List : https://docs.oracle.com/javase/7/docs/api/index.html?java/util/List.html
java api ArrayList : https://docs.oracle.com/javase/7/docs/api/index.html?java/util/List.html