‘소프트웨어 컴포넌트는 확장에 관해 열려 있어야 하고 수정에 관해서는 닫혀 있어야 한다.’
다른 개발자가 작업을 수행하기 위해 반드시 수정해야 하는 제약 사항을 클래스에 포함해서는 안 된다는 사실을 의미.
다른 개발자가 클래스를 확장하기만 하면 원하는 작업을 할 수 있도록 해야 한다.
다양하고 직관적이며 유해하지 않은 방식으로 소프트웨어 확장성을 유지하는 원칙입니다.
Shape 객체 리스트의 넓이를 구할 경우, 각 도형의 넓이를 구하는 경우를 if문으로 분기처리 하기 보다는 클래스 내부에 넓이에 대한 method를 구현하여 객체별로 .area()와 같이 접근하여 공통으로 처리할 수 있게하면 확장에는 열려있고, 수정 하더라도 다른 클래스에는 영향이 없도록 할 수 있다.
L: 리스코프 치환 원칙(Liskov Substitution Principle, LSP)
‘파생 타입은 반드시 기본 타입을 완벽하게 대체할 수 있어야 한다.’
‘서브클래스의 객체는 슈퍼클래스의 객체와 반드시 같은 방식으로 동작해야 한다.’
타입 변환 후에 뒤따라오는 런타임 타입 식별에 유용한 원칙입니다.
I: 인터페이스 분리 원칙(Interface Segregation Principle, ISP)
‘클라이언트가 사용하지 않을 불필요한 메서드를 강제로 구현하게 해서는 안 된다.’
클라이언트가 사용하지 않을 메서드를 강제로 구현하는 일이 없을 때까지 하나의 인터페이스를 2개 이상의 인터페이스로 분할하는 원칙입니다.