SOLID 다섯 가지 설계 원칙
단일 책임 원칙(SRP: Single Responsibility Principle)
한 클래스는 하나의 책임만 가져야 한다.
책임 영역이 확실해지고, 한 클래스의 변경이 다른 클래스의 영향을 미치지 않습니다. 그리고 책임을 적절하게 분배함으로써 코드의 가독성이 향상되고 유지보수가 용이하다는 장점이 있습니다.
개방-폐쇄 원칙(OCP: Open Close Principle)
소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다.
소프트웨어 구성요소인 컴포넌트, 클래스, 모듈, 함수는 확장에는 열려있고, 변경에는 닫혀있어야 합니다. 이것은 변경을 위한 비용을 줄이고, 확장을 위한 비용은 극대화 해야한다는 의미입니다. 즉 요구사항이 변경되거나 추가사항이 발생하더라도 기존 구성요소는 수정이 일어나지 않고 확장하여 재사용할 수 있어야 한다는 의미입니다. OCP를 가능하게 하는 중요 메커니즘은 '추상화'와 '다형성' 입니다.
리스코프 치환 원칙(LSP: Listov Substitution Principle)
프로그램의 객체는 프로그램의 정확성을 깨트리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다.
서브 타입은 언제나 기반 타입과 호환될 수 있어야합니다. 즉 서브 타입은 기반 타입이 약속한 규약을 지켜야 합니다. 다형성을 통한 확장성을 보장해야 합니다. 다형성과 확장성을 보장하기 위해서 하위 클래스 보다 상위의 클래스를 사용하는 것이 더 좋습니다.
인터페이스 분리 원칙(ISP: Interface Segregation Principle)
특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나 보다 더 좋다.
어떤 클래스가 다른 클래스에 종속될 때에는 가능한 최소한의 인터페이스만을 사용해야 합니다. 예를 들어 어떤 클래스를 이용하는 클라이언트가 여러 개이고 모든 클라이언트들이 해당 클래스의 특정 하나의 메서드 만을 사용한다고 하면 그 메서드를 따로 인터페이스로 빼내어 클라이언트가 기대하는 바를 제공할 수 있습니다.
의존관계 역전 원칙(DIP: Dependency Inversion Principle)
프로그래머는 구체화에 의존하면 안되고(Impl), 추상화(Interface)에 의존해야한다.
변화가 없는 추상화된 인터페이스나 상위 클래스를 만들어 변화에 영향받지 않게 하는 것이 의곤관계 역전 원칙입니다. 상위 클래스 -> 인터페이스 -> 추상 클래스 순으로 변하지 않을 가능성이 높기 때문에 하위 클래스나 구체 클래스가 아닌 상위 클래스, 인터페이스, 추상 클래스를 통해 의존하라는 것입니다.
[참고]
'Spring' 카테고리의 다른 글
[Spring] Netty 개념 (0) | 2022.08.11 |
---|---|
[Spring] 관습적인 추상화 (2) | 2022.08.09 |
[Spring] @ComponentScan @Autowired 의존관계 자동 주입 (0) | 2022.07.12 |
[Spring] @Configuration과 Singleton By CGLIB (0) | 2022.07.11 |
[Spring] Singleton 사용 시 필드 변수 사용 주의❗ (0) | 2022.07.11 |