본문 바로가기
나의 공부

디자인패턴-싱글톤패턴(SingleTon)

by 이숴 2023. 3. 23.
반응형

싱글톤 패턴은 개발자라고 한다면 숙지하고 있어야하는 패턴이라고 개인적으로 생각합니다. 데이터나 레포지토리 관리를 싱글톤 패턴하에 구현되기 때문입니다.

 

왜 꼭 알고 있어야하고, 동작방식은 어떻게 될까요?? 같이 확인해보겠습니다.

 

싱글톤 패턴?

싱글톤 패턴은  간단하게 '하나'의 객체만 생성해서 사용하는 디자인 패턴입니다.

싱글톤 클래스 다이어그램

 

정보처리기사-수제비에서는 이렇게 설명합니다.

- 전역 변수를 사용하지 않고 객체를 하나만 생성하도록 하며, 생성된 객체를 어디에서든지 참조할 수 있도록 하는 디자인 패턴

- 한 클래스에 한 객체만 존재하도록 제한

객체는 쉽게 여러개 생성할 수 있습니다. 그러나 왜 하나의 객체만을 생성해서 사용해야할까요? 한개로 사용하면 무슨 이점이 있을까요??


가장 빠르게 떠오를 것같은 장점으로는 메모리가 있을 것 같습니다. 한번의 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개이상이 생성될 수 있는 가능성이 생기게 된다고 합니다.

 

그래서 싱글톤 패턴은 남발하면 코드를 작성하기보다는 정말 필요한 경우에만 채용해서 객체를 생성하는 것이 바람직하다고 생각합니다.

반응형

댓글