싱글톤 패턴은 개발자라고 한다면 숙지하고 있어야하는 패턴이라고 개인적으로 생각합니다. 데이터나 레포지토리 관리를 싱글톤 패턴하에 구현되기 때문입니다.
왜 꼭 알고 있어야하고, 동작방식은 어떻게 될까요?? 같이 확인해보겠습니다.
싱글톤 패턴?
싱글톤 패턴은 간단하게 '하나'의 객체만 생성해서 사용하는 디자인 패턴입니다.
정보처리기사-수제비에서는 이렇게 설명합니다.
- 전역 변수를 사용하지 않고 객체를 하나만 생성하도록 하며, 생성된 객체를 어디에서든지 참조할 수 있도록 하는 디자인 패턴
- 한 클래스에 한 객체만 존재하도록 제한
객체는 쉽게 여러개 생성할 수 있습니다. 그러나 왜 하나의 객체만을 생성해서 사용해야할까요? 한개로 사용하면 무슨 이점이 있을까요??
가장 빠르게 떠오를 것같은 장점으로는 메모리가 있을 것 같습니다. 한번의 new 연산자를 통해서 객체를 사용하고 수정하고 등등을 하기 때문에 불필요한 메모리 낭비를 방지할 수 있습니다. 한번의 객체만 생성하기 때문에 재사용성이 좋고 속도적 이점도 있다고 봐야하겠죠.
예시
예시를 통해 확인해보겠습니다.
public class Car {
}
보시다시피 Car 객체가 존재합니다.
이클래스에는 아무도 접근하지 못하는 접근제어자가 private인 생성자가 존재합니다.
private Car() {}
그런데 private는 아무도 접근하지 못하는게 맞습니다. 그렇다면 우리는 어떻게 해당 객체에 접근해서 객체를 생성해야 할까요??
클래스내에서 객체를 선언하고 그 객체에 간접접근을 할 수 있도록 메소드를 하나 구성하는 것입니다.
public class Car {
private static Car car = new Car();
private Car() {}
public static Car getInstance() {
return car;
}
}
이렇게 구성한다면 객체를 생성하지 않고도 객체에 접근이 가능해집니다.
이렇게되면 객체는 생성자가 없어 클래스 하나의 객체만 생성할 수 있고, 하나의 객체에서만 데이터를 공유가 간단하게 이루어질 수 있게 됩니다. 이렇게 때문에 싱글톤 패턴으로 객체를 생성하곤 하는데요.
단점
그러나 싱글톤 패턴은 장점만이 존재하지 않습니다. 이 싱글톤 인스턴스 객체가 너무 많은 일을 하거나 방대한 데이터를 공유시킬 경우에는 객체간의 결합도가 높아져서 OCP를 위반하게 됩니다.
그렇기에 수정이 어려울 수 있고, 유지보수가 힘들어질 수도 있습니다.
또한, 멀티스레드 환경에서는 동기화 처리가 중요한데, 이과정이 제대로 안되어있다면 인스턴스 객체가 1개이상이 생성될 수 있는 가능성이 생기게 된다고 합니다.
그래서 싱글톤 패턴은 남발하면 코드를 작성하기보다는 정말 필요한 경우에만 채용해서 객체를 생성하는 것이 바람직하다고 생각합니다.
'나의 공부' 카테고리의 다른 글
프로세스, 스레드, 멀티 스레드? (0) | 2023.04.06 |
---|---|
정규화는 뭘까? 정규화의 예시 (0) | 2023.03.30 |
디자인패턴-빌더 패턴(Builder) (0) | 2023.03.23 |
JSON 파일 쓰기/저장 (json-simple) (0) | 2023.03.02 |
TDD(테스트 주도 개발) 소개, TDD의 중요성 (0) | 2023.02.27 |
댓글