다형성, OCP, DIP의 차이점
비슷한 생각이 들어서 고민해봤는데 Collection Framework에서 LinkedList를 생각해보면 좋을 것 같습니다. (짧은 식견이라 부족한 답변일 거 같은데 양해 부탁드립니다.)LinkedList는 Node라는 객체로 이루어진 자료구조인데, OCP의 원칙을 위해서는 Node의 값을 수정할 때 직접 수정하지 못하게 폐쇄하면서도, 연관관계를 맺어주는 설정자를 구성해야 합니다. 따라서private E item;private Node next;private int size;로 외부에서 Node의 값에 접근하지 못하도록 private 접근 제어자를 사용하고, 각각의 변수에 대해 setter와 getter를 설정해서 외부에서 Node의 내부 값을 변경하거나 출력하도록 하는 거죠. 그러면서도 LinkedList는 List라는 추상적인 인터페이스에 의존하고 있고, 실제 구현 내에서 LinkedList를 사용하는 자리에 ArrayList를 사용해도 상관없습니다.그런데 여기서 private을 public으로 바꾸면 외부에서 Node의 item, next, size에 접근 가능하므로 OCP 원칙에 어긋납니다. 그러나 LinkedList를 사용하는 구현체 내에서 ArrayList로 바꾼다 한들 add, remove 등의 메서드는 전부 추상적인 List라는 인터페이스에 의존하므로 DIP는 지켜지겠죠.두 관계가 쉽게 떼어내기가 애매한 부분이 확실히 있는 것 같은데, 어쨌거나 확실히 다른 개념이라는 생각이 들어서 이렇게 답변 남겨드려요.