의존 역전 원칙 - DIP (Dependency Inversion Principle)
어떤 Class를 참조해서 사용해야하는 상황이 생긴다면, 그 Class를 직접 참조하는 것이 아니라 그 대상의 상위 요소(추상 클래스 or 인터페이스)로 참조하라는 원칙
Stream이 데이터 처리, 컬렉션 프레임워크는 데이터저장에 초점을 두고 있다.
import java.util.*;
public class IteratorDemo {
public static void main(String[] args) {
/*SOLID의 원칙중 DIP (Dependency Inversion Principle)
을 지키지 않은 예 */
ArrayList<Integer> list = new ArrayList<>();
list.add(10);
list.add(20);
list.add(30); //ArrayList는 addFirst 없음
System.out.println(list); //[10, 20, 30]
만약 ArrayList를 linekdlist로 바꿔야한다면?
LinkedList<Integer> list1 = new LinkedList<>();
list1.addFirst(10);
list1.addFirst(20);
list1.addFirst(30);
System.out.println(list1); //[30,20,10]
만약 ArrayList로 했는데 LinkedList로 바꿔야한다면..
addFirst가 없으니까 안되므로 구체적인 객체에 의존하면 안된다는것
/*SOLID의 원칙중 DIP (Dependency Inversion Principle)
을 지킨 예 */
Collection<String> good = new LinkedList<>(); //new ArrayList로해도 됨
good.add("a");
good.add("b");
good.add("c");
System.out.println(good);
}
}
Collection 사용시 부모에도있고 자식에도 있는 공통된 메소드를 호출하기때문에
정책변경시 문제없음.
구체적인 클래스가 아니라 인터페이스에 의존하게 짜야한다.