Sting 은 불변객체이기 때문에 String끼리 더하면
새로운 String 객체를 생성한다.
그래서 for문 안에 들어있다면
for문 수행시마다 새로운 String 객체 를 생성한다.
이를 해결하기 위해 StringBuilder를 사용할 수 있다.
주어진 객체에 맞는 인터페이스가 있는지 확인해보고,
만일 인터페이스가 있다면 객체를 참조할 때 인터페이스를 사용하면
훨씬 유연한 프로그램을 만들 수 있다.
인터페이스가 없다면 필요한 기능을 제공하는 클래스 중 가장 일반적인 클래스를 이용하라
List<String> list1 = new ArrayList<>();
ArrayList<String> list2 = new ArrayList<>();위 두 List에는 어떤 차이가 있을까.
list1
list1 을 사용할 때는, List 인터페이스에 정의되어 있는 것들만 사용하기 때문에
구현체를 LinkedList 로 쉽게 바꿀 수 있다.
물론, 구현체의 특별한 기능을 사용하고 있었다면,
대체할 구현체도 그 기능을 제공해야 한다.
list2
list2는 ArrayList의 구현하는 메소드 까지 노출되어 있기 때문에
LinkedList로 바꾸어야 할 경우, 사이드 이펙트가 일어나지 않는다는 보장이 없다.
이렇게 유연한 코딩을 가능하게 해준다.
적당한 인터페이스가 없는 경우에는, 객체를 클래스로 참조한다.
String, Random 과 같은 클래스는
대체할만한 인터페이스가 없다.
이 경우에는 그냥 사용한다.