자바칩
[Spring] 객체 지향 설계 5원칙 (SOLID) 본문
728x90
- 단일 책임 원칙(SRP: Single Responsibility Principle)
- 정의: 어떤 클래스를 변경해야 하는 이유는 오직 하나뿐이어야 한다.
- 설명: 클래스는 하나의 기능 또는 역할만을 가져야 하며, 그 기능을 변경하는 이유는 하나뿐이어야 한다. 이를 통해 클래스의 복잡성을 줄이고, 코드의 가독성과 유지보수성을 높일 수 있다.
- 예시: 사용자의 정보를 관리하는 User 클래스와 사용자 인터페이스를 처리하는 UserInterface 클래스를 분리하여 각각의 책임을 명확히 한다.
- 개방-폐쇄 원칙 (OCP: Open-Closed Principle)
- 정의: 자신의 확장에는 열려있고, 주변의 변화에 대해서는 닫혀 있어야 한다.
- 설명: 새로운 기능을 추가할 때 기존 코드를 변경하지 않고 확장할 수 있어야 한다. 이를 통해 기존 코드의 안전성을 유지하고, 코드 변경으로 인한 오류를 줄일 수 있다.
- 예시: 새로운 기능을 추가할 때 기존 클래스의 코드를 수정하지 않고, 기존 클래스를 상속받거나 인터페이스를 구현하여 새로운 클래스를 작성한다.
- 리스코프 치환 원칙 (LSP: Liskov Substitution Principle)
- 정의: 서브 타입은 언제나 자신의 기반 타입(base type)으로 교체할 수 있어야 한다.
- 설명: 서브 클래스는 기본 클래스의 기능을 확장하거나 변경하더라도, 프로그램의 흐름을 깨뜨리지 않아야 한다. 즉, 서브 클래스는 기반 클래스의 계약(행동)을 준수해야 한다.
- 예시: Rectangle 클래스를 상속받은 Square 클래스가 Rectangle의 모든 메서드를 정상적으로 동작하게 해야 한다.
- 인터페이스 분리 원칙 (ISP: Interface Segregation Principle)
- 정의: 클라이언트는 자신이 사용하지 않는 메서드에 의존 관계를 맺으면 안 된다.
- 설명: 클라이언트는 자신이 사용하지 않는 메서드에 의존하지 않아야 한다. 여러개의 구체적인 인터페이스를 만들어 클라이언트가 필요한 기능만 사용할 수 있도록 한다.
- 예시: Printer 인터페이스를 Scanner 기능과 Copier 기능으로 나누어 각각의 클라이언트가 필요한 기능만 구현하도록 한다.
- 의존 역전 원칙 (DIP: Dependency Inversion Principle)
- 정의: 자신보다 변하기 쉬운 것에 의존하지 마라.
- 설명: 고수준 모듈은 저수준 모듈에 의존해서는 안 되며, 둘 다 추상화된 인터페이스에 의존해야 한다. 구체적인 구현이 아닌 추상화된 인터페이스에 의존함으로써, 모듈 간의 결합도를 낮추고 유연성을 높인다. 이를 통해 모듈을 쉽게 교체할 수 있다.
- 예시: Service 클래스가 Repository 클래스에 직접 의존하지 않고, Repository 인터페이스에 의존하게 하여 다양한 구현체를 주입할 수 있도록 한다.
'Study > Spring' 카테고리의 다른 글
[Spring] @RunWith/@ExtendWith 와 @WebMvcTest 의 차이점 (0) | 2024.07.19 |
---|---|
[Spring] @InjectMocks 와 @Mock 의 차이점 (0) | 2024.07.19 |
[Spring] 디자인 패턴 (0) | 2024.06.10 |
[Spring] 객체 지향의 4대 특성 => 캡상추다 (0) | 2024.06.10 |
[Spring] AOP 개념 (1) | 2024.06.02 |