싱글톤을 사용하면서 궁금한 사항이 생겼는데 싱글톤 패턴을 생성하면 SOLID에 위배되는 거 아냐??
일단 SOLID 정리하자.
1. Single Responsibility Principle (SRP)
단일 책임 원칙은 클래스나 모듈이 하나의 책임만 가져야 한다는 원칙이다. 이를 통해 변경 이유가 하나로 제한되고
코드의 응집도가 높아진다.
2. Open/Closed Principle (OCP)
개방/폐쇄 원칙은 소프트웨어 개체(클래스, 모듈, 함수 등)가 확장에는 열려 있어야 하고, 수정에는 닫혀 있어야 한다는
원칙이다. 즉, 기존 코드를 변경하지 않고 기능을 추가할 수 있어야 한다.
3. Liskov Substitution Principle (LSP)
리스코프 치환 원칙은 서브타입은 언제나 자신의 기반 타입으로 교체할 수 있어야 한다는 원칙이다. 즉, 프로그램의
객체는 기반 타입의 객체로 대체해도 그 객체의 동작이 바뀌지 않아야 한다.
4. Interface Segregation Principle (ISP)
인터페이스 분리 원칙은 특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다는 원칙이다. 이를 통해 클라이언트가 자신이 사용하지 않는 메서드에 의존하지 않도록 할 수 있다.
5. Dependency Inversion Principle (DIP)
의존성 역전 원칙은 고수준 모듈은 저수준 모듈에 의존해서는 안 되며, 둘 다 추상화에 의존해야 한다는 원칙이다. 즉,
구체적인 클래스에 의존하지 말고 인터페이스나 추상 클래스에 의존하라는 의미이다.
→ 나의 생각
1) 클래스를 만들고 싱글톤 패턴을 사용해서 다른 클래스를 가져와서 쓰면 단일 책임 원칙이 아니라 다른 객체까지
가져와서 책임이 늘어나는 것 같다.
2) 만약 싱글톤 패턴의 객체가 수정되거나 변경되면 기존 클래스에 대해 영향을 받을 수도 있는 상황이 발생할 수 있을
것 같다.
결론 : 외부에서 가져오는 싱글톤 패턴 객체를 사용하면서도 생성된 객체를 독립적인 흐름을 가지도록 설계해야 할 것
같다.
'Spring_SpringBoot > 이론' 카테고리의 다른 글
[ WEB ] [ WAS ] (0) | 2024.07.07 |
---|---|
[ URI 요청(GET) ] (0) | 2024.07.06 |
[ 세션 클러스터링(Session Clustering) ] (0) | 2024.07.05 |
@Autowired, @Inject, @Resource (0) | 2024.06.28 |
[ AccessDeniedHandler ] VS [ AuthenticationEntryPoint ] Spring Security (0) | 2024.06.28 |