[디자인 패턴] 싱글톤 패턴

남현우·2022년 8월 9일
0

디자인 패턴

목록 보기
2/2

싱글톤 패턴

정의

싱글톤 패턴은 소프트웨어 디자인 패턴 중 사용빈도가 꽤 높은 패턴이다.
이를 따르는 클래스는 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나다.
최초 생성 이후에 호출된 생성자는 최초의 생성자가 생성한 객체를 리턴한다.
주로 공통된 객체를 여러개 생성해서 사용하는 DBCP(DataBase Connection Pool)와 같은 상황에서 많이 사용된다.

단점이 존재하기에 되도록 지양하는 것이 좋으나,
코딩을 진행하면 은근히 종종 필요로 해서 사용하게 되는 패턴이다.

장점

장점보다는 싱글톤 패턴을 사용하는 이유에 가깝지만, 해당 패턴을 사용하면 사용하지 않을
메모리를 사용하는 것을 막을 수 있다. 최초 생성자가 생성한 객체의 메모리만 사용하기에 메모리 낭비를
막고, 속도적 이점도 보일 수 있다. 또, 인스턴스를 통해 다른 클래스간의 데이터 공유가 가능하다.

외에도, 한 개의 인스턴스만 존재하도록 코딩하고싶을 때 사용한다.

단점

싱글톤 패턴은 SOLID원칙 중 OCP인 개방 폐쇠 원칙을 위배하는 디자인 패턴이다.
클래스간의 데이터 공유는 결합도를 높히고 이는 유지보수에 문제가 된다.

또, 멀티쓰레드 환경에서 동기화 처리를 통해 인스턴스가 두 개 생성되는 것을 막을 수 있지만,
그렇지 않으면 두 개의 인스턴스가 생성되어 원하는 방향의 테스트가 이루어지지 않을 수 있다.

코드 예시

자바코드예시

public class Singleton {

    private static final Singleton INSTANCE = new Singleton();

    private Singleton() {}	

    public static Singleton getInstance() {
        return INSTANCE;
    }
}

멀티쓰레드

위에서 언급한 멀티쓰레드를 간략하게 설명하자면, 하나의 프로세스에 하나의 쓰레드가
수행되는 일반적인 경우와 달리 하나의 프로세스에서 둘 이상의 쓰레드가 수행되는 것을 의미한다.
둘은 매우 비슷하지만, 각 스레드가 자신이 속한 프로세스의 메모리를 공유한다는 점이 다르다.

멀티 스레드는 각 스레드가 자신이 속한 프로세스의 메모리를 공유하므로, 시스템 자원의 낭비가 적다.
또, 하나의 스레드가 작업을 할 때 다른 스레드가 별도의 작업을 할 수 있어 사용자와의 응답성도 좋아진다.

동시성 문제

동시성 문제란, 멀티쓰레드 작업 중 저장된 데이터를 각각 읽고 쓰는 과정에서
시점 차이로 발생하는 문제를 의미한다.

실제 프로그램이 동작하는 CPU는 데이터를 처리할 때 RAM을 사용한다.
하지만 바로 읽거나 쓰는 과정을 하지 않고, 중간에 위치한 CPU Cache Memory라는 공간에서
데이터를 처리한 후 RAM에 읽어들인다. 문제는 이 과정이 연속적으로 이루어지는 것이 아니기에
시점이 맞지 않아 가시성 문제원자성(동시 접근)문제가 발생하는데 이를 동시성 문제라 한다.

profile
개발 관련 지식을 기록하는 블로그입니다.

0개의 댓글