스프링은 EJB의 무겁고 복잡한 플랫폼에서 벗어나 POJO기반의 경량화된 개발 환경을 제공하는 오픈소스 프레임워크

 

좋은 객체 지향 설계의 5가지 원칙(SOLID)

 

SOLID

-SRP : 단일 책임원칙(Single Responsibility Principle)

한클래스는 하나의 책임만 가져야 한다.

중요한 기준은 변경! 변경이 있을때 파급효과 적으면 단일 책침 원칙을 잘 따른것!

 

-OCP: 개방-폐쇄의 원칙(Open/Closed Principle)

소프트웨어 요소는 확장에는 열려있고 변경에는 닫혀있어야 한다.

다형성 활용!

 

-LSP: 리스코프 치환 원칙(Liskov Substitution Principle)

프로그램의 객체는 프로그램의 정확성을 깨지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다

 

-ISP: 인터페이스 분리 원칙(Interface Segregation Principle)

특정 클라이언트를 위한 여러개의 인터페이스가 범용 인터페이스 하나보다 낫다

인터페이스가 명확해지고, 대체 가능성이 높아진다

 

-DIP: 의존관계 역전 원칙(Dependency Inversion Principle)

구현 클래스에 의존하지 말고, 인터페이스에 의존하라는 뜻

역할에 의존하게 해야한다


싱글톤 패턴이란?

객체의 인스턴스가 오직 1개만 생성되는 패턴을 의미한다.

 

그럼 싱글톤 패턴을 사용하는 이유는 무엇인가?

먼저 메모리 측면에서 이점을 가질 수있다.

최초 한번의 new 연산자를 통해서 고정된 메모리 영역을 사용하며 만약 다른 객체가 해당 객체에 접근 할 때 메모리 낭비를 방지 할 수 있다. 또 한 이미 생성된 인스턴스에 접근하기에 속도측면에서도 이점을 가질 수 있다.

또 클래스 간에 데이터 공유가 쉽다. 싱글톤 인스턴스는 전역에서 사용되는 인스턴스이기에 다른 클래스의 인스턴스들이 접근하여 사용이 가능하다. 하지만 동시에 여러 인스턴스가 접근 시 동시성 문제가 발생하기도 한다.

 

싱글턴패턴은 위처럼 좋은 이점이 많이 있지만 문제점 또 한 가지고 있다.

  1. 싱글톤 패턴을 구현하는 코드 자체가 많이 필요하다. 동시성 문제 해결을 위한 Syncronized 키워드 사용이 필요하다
  2. 테스트가 어렵다. 싱글톤은 자원을 공유하기 때문에 격리된 환경에서 테스트를 수행하려면 매번 인스턴스의 상태 초기화를 해야한다. 그렇지 않으면 전역에서 상태를 공유하기에 테스트가 정확하게 수행이 불가능하다.
  3. 의존 관계상 클라이언트가 구체 클래스에 의존한다. new키워드를 사용하여 클래스 안에서 객체를 생성하므로 이는 SOLID 법칙의 DIP를 위반하며, OCP 원칙 또한 위반할 가능성이 높다.
  4. 자식클래스를 만들 수 없다, 내부 상태 변경이 어렵다 등 여러 문제점 또한 가지고 있다. 

 

결과적으로 싱글톤 패턴은 유연성이 많이 떨어지는 패턴이다. 

하지만 단독사용이 아닌 스프링 컨테이너 같은 프레임워크의 도움을 받으며 싱글톤 패턴의 문제점을 보완하면서 장점을 사용 할 수 있다.

 

 

출처

https://tecoble.techcourse.co.kr/post/2020-11-07-singleton/

 

싱글톤(Singleton) 패턴이란?

이번 글에서는 디자인 패턴의 종류 중 하나인 싱글톤 패턴에 대해 알아보자. 싱글톤 패턴이 무엇인지, 패턴 구현 시 주의할 점은 무엇인지에 대해 알아보는 것만으로도 많은 도움이 될 것이라

tecoble.techcourse.co.kr

 

'Spring' 카테고리의 다른 글

[SpringBoot] @MappedSuperclass  (0) 2023.05.21
[Java] Stream이란?  (0) 2023.05.14
[java] Dependency Injection 개념  (0) 2023.05.11
[SpringSecurity] AccessDeniedHandler  (0) 2023.05.09
[SpringBoot] @Slf4j 와 @Log4j2  (0) 2023.05.08

+ Recent posts