클래스는 단 한개의 책임을 가져야 함
클래스가 여러 책임을 갖게 되면 그 클래스는 각 책임마다 변경되는 이유가 발생하기 때문에 유지보수가 힘듦
클래스는 확장에는 개방적이고 변경에는 폐쇄적이어야 함
기능을 변경하거나 확장할 수 있으면서 그 기능을 사용하는 코드는 수정하지 않아야 함
자바 어플리케이션에서 JDBC Driver Manager를 사용하기 위해서 설계된 구조
Mysql, Oracle는 모두 변화에는 확장적이지만, 자바 어플리케이션은 수정에 폐쇄적 → 즉 Oracle DB의 변화가 발생해도 자바 어플리케이션에서는 수정할 코드가 없음
개방 폐쇄 원칙의 핵심은 변화하는 부분을 추상화하는 것
상위 타입의 객체를 하위 타입의 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상적으로 동작해야 함
즉, 특정 메소드가 상위 타입을 인자로 사용한다고 할 때, 그 타입의 하위 타입으로 사용해도 문제없이 동작해야 함
public int calculate(final Item item) {
return item.calculate();
}
상위 타입인 Item이 있고, 하위 타입인 computer가 있을 때 파라미터로 computer 타입을 넘겨도 정상적으로 동작해야 함
클라이언트는 자신이 사용하는 메소드에만 의존해야 함