Programming/JAVA

디자인 패턴 - SOLID

긍정왕웹서퍼 2022. 10. 22. 12:32
728x90

SOLID 원칙이란? 

SRP (Single responsibility principle) : 단일 책임 원칙이라 하며, 클래스는 단 한개의 책임만을 가져야 한다  는 뜻입니다 

예를 들어 Add Class 가 있고 이 클래스는 사칙연산 중 더하기에 해당하는 책임만을 져야합니다. 빼기, 나누기, 곱하기 등 다른 연산의 책임을 가지지 않아야 하는 원칙인데, 복잡한 요구사항을 필요로 하는 프로그램에서 단 한가지의 책임만을 지키기는 어렵습니다. 이 원칙을 무조건 지켜야하는 강제적인 룰이 아닌, 되도록이면 최대한 지키면서 설계를 해야하는 것이 올바른 접근방식이라고 생각합니다. 

 

OCP (Open closed priciple) : 개방 폐쇄 원칙이라 하며, '개방' 이란 확장성과 관련된 엔티티, 모듈, 함수등에는 열려 있어야 한다는 뜻이며, 반대로 폐쇄는 수정, 변경에 대해서는 닫혀 있어야 하며 이를 추상화를 통해 구현하여 해결해야 합니다. 

 

LSP (Liskov substitution principle) : 리스코프 치환 원칙은 쉽게 설명하면 부모객체는 자식객체로 치환되거나 변경되어도 동일하게 수행되어야 한다고 되어 있습니다. 이는 곧 부모 자식객체(타입)간에 행위가 일치해야 합니다. 예를 들자면 선생님과 학생이 있고 학생은 선생님이라는 객체에게 질문을 요청할 수 있습니다. 여기서 선생님이 부모객체라면 자식객체인 Harry 라는 선생님에게 직접 질문을 요청해도 동일한 질문이라는 기능을 수행해야 하는 것 입니다.

 

ISP (Interface segregation principle) : 인터페이스 분리 원칙은 해당 인터페이스를 사용하는 클라이언트를 기준으로 분리되어 있어야합니다. 즉 클라이언트는 사용하고 있는 특정 인터페이스 외에는 다른 인터페이스에 의존하면 안된다는 원칙입니다.

 

DIP (Dependency inversion priciple) : 의존성 역전 원칙 , 구체적인 구현화에 의존하는것이 아닌 추상화에 의존해야 합니다 이 의미를 예를 들자면 학생과 선생님이 있습니다. 학생은 선생님인 A에게 질문을 하고싶습니다. 이때 프로그래밍에선 A에게 직접 의존하여 질문을 요청하는 것이 아닌, 선생님이라는 추상화에게 요청을 전달하며 선생님이 과목이 바뀌어 다음과목인 B라는 선생님에게도 질문을 요청할 수 있어야 한다는 의미입니다. 이 원칙을 가장 잘 지킨 패턴이 *전략패턴 이라고 합니다. 

 

 

 

* 전략패턴

디자인패턴에서 전략패턴이란 추상화, 캡슐화된 전략들을 사용해 비슷한 동작을 하는 전략들을 묶어 동적으로 변경이 가능하도록 바꾼것이라 할 수 있습니다. 이는 위에 SOLID 원칙에서 DIP, 의존성 역전 원칙과 거의 유사한 개념입니다. 세부사항을 명령하기 위해 추상화된 명령을 실행하고 원하는 직접적인 명령을 파라미터로 전달하는 구조이며, 흔히 프로그래밍에서 동적으로 데이터를 처리할 때 많이 사용되는 전략입니다.