solid(3)
-
[SOLID] 인터페이스 분리 원칙(Interface segregation principle)
인터페이스 분리 원칙(Interface segregation principle) 인터페이스는 그 인터페이스를 사용하는 클라이언트를 기준으로 분리해야 한다. 예를 들어, ArticleWriteService, ArticleListService, ArticleDeleteService가 각각 상위클래스를 가진다면 ArticleService 하나가 아닌 각각의 상위클래스를 가져서 ISP에 부합하는 패턴입니다. 출처: 개발자가 반드시 정복해야 할 객체 지향과 디자인 패턴 - 최범균 저
2022.05.25 -
[SOLID] 리스코프 치환 원칙(Liskov substitution principle)
리스코프 치환 원칙(Liskov substitution principle) OCP를 받쳐 주는 다형성에 관한 원칙을 제공합니다. LSP는 다음과 같습니다. 상위 타입의 객체를 하위 타입의 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상적으로 작동해야 한다. public void someMethod(SuperClass sc) { sc.someMethod(); } SuperClass의 someMethod()에 하위 타입의 객체를 전달해도 정상적으로 동작해야 한다는 것이 LSP 입니다. someMethod( new SubClass() ); 코드로 예를 들어보면, Coupon 클래스에서 Item을 파라미터로 받아 할인 금액(할인율 * 가격)을 반환하는 메서드가 있습니다. 이 때 구현클래스 할인이 안되는 아..
2022.05.25 -
[SOLID] 개방 폐쇄 원칙(Open-closed principle)
개방 폐쇄 원칙(Open-closed principle) 확장에는 열려 있어야 하고, 변경에는 닫혀 있어야 합니다. 풀어 보면 다음과 같습니다. 기능을 변경하거나 확장할 수 있으면서 그 기능을 사용하는 코드는 수정하지 않는다. FlowController(사용하는 코드)에서 ByteSource(interface)를 사용한다면, 메모리에서 byte를 읽어 오는 기능을 추가해야 할 때 MemoryByteSource클래스를 구현해서 FlowController의 코드를 수정하지 않고 기능을 추가할 수 있습니다. 즉, 확장되는 부분을 ByteSource로 추상화했기 때문에 확장에는 열려있고 (기능을 사용하는 코드의) 변경에는 닫혀 있다고 표현한 것입니다. 개방 폐쇄 원칙이 깨질 대의 주요 증상 추상화와 다형성이 O..
2022.05.25