Skip to content

Latest commit

 

History

History
77 lines (39 loc) · 1.73 KB

File metadata and controls

77 lines (39 loc) · 1.73 KB

Item 52 : 객체를 참조할 때는 그 인터페이스를 사용하라

   

Sting 은 불변객체이기 때문에 String끼리 더하면

새로운 String 객체를 생성한다.

그래서 for문 안에 들어있다면

for문 수행시마다 새로운 String 객체 를 생성한다.

이를 해결하기 위해 StringBuilder를 사용할 수 있다.

 

요약

주어진 객체에 맞는 인터페이스가 있는지 확인해보고,

만일 인터페이스가 있다면 객체를 참조할 때 인터페이스를 사용하면

훨씬 유연한 프로그램을 만들 수 있다.

인터페이스가 없다면 필요한 기능을 제공하는 클래스 중 가장 일반적인 클래스를 이용하라

   

인터페이스 vs 클래스

List<String> list1 = new ArrayList<>();

ArrayList<String> list2 = new ArrayList<>();

위 두 List에는 어떤 차이가 있을까.

list1

list1 을 사용할 때는, List 인터페이스에 정의되어 있는 것들만 사용하기 때문에

구현체를 LinkedList 로 쉽게 바꿀 수 있다.

물론, 구현체의 특별한 기능을 사용하고 있었다면,

대체할 구현체도 그 기능을 제공해야 한다.

list2

list2는 ArrayList의 구현하는 메소드 까지 노출되어 있기 때문에

LinkedList로 바꾸어야 할 경우, 사이드 이펙트가 일어나지 않는다는 보장이 없다.

 

이렇게 유연한 코딩을 가능하게 해준다.

   

인터페이스가 없다면?

적당한 인터페이스가 없는 경우에는, 객체를 클래스로 참조한다.

String, Random 과 같은 클래스는

대체할만한 인터페이스가 없다.

이 경우에는 그냥 사용한다.