본문 바로가기
Design Pattern

[Design Pattern] 싱글톤 패턴

by 진꿈청 2024. 3. 25.

우리가 지금껏 문지기 객체를 여러개 생성할 수 있었다.

 

하지만, 우리가 이번에 알아볼 싱글톤 패턴을 사용하면

문지기 객체를 한개밖에 사용하지 못한다.

 

그렇다면 싱글톤 패턴의 장점이 뭘까?

 

싱글톤 패턴의 장점

 

싱글톤 패턴의 사용시 장점은 다음과 같다.

  • 메모리 절약
    • 싱글톤 패턴은 전체 시스템에서 단 하나의 인스턴스만을 생성한다.
    • 따라서, 동일한 리소스나 서비스에 대해 여러 인스턴스를 생성할 필요가 없다.
  • 공유 리소스 접근 용이
    • 싱글톤 리소스는 전역적으로 접근이 가능하다.
    • 따라서, 다양한 부분에서 손쉽게 해당 인스턴스를 공유하고 접근할 수 있다.
  • 인스턴스 제어
    • 생성자가 private으로 설정되어 있다.
    • 따라서, 인스턴스 생성을 엄격하게 제어하여 인스턴스가 무분별하게 생성되는 것을 방지한다.
  • 데이터 일관성
    • 싱글톤 인스턴스는 전체 애플리케이션에서 공유된다.
    • 따라서, 인스턴스를 통해 관리되는 데이터의 일관성을 유지하기 쉽다.

 

싱글톤 패턴의 사용시 단점은 다음과 같다.

  • 싱글톤 인스턴스가 과도하게 사용될 경우, 코드 간의 결합도가 높아진다.
  • 유지보수 및 테스트가 어려워질 수 있다.
  • 멀티스레드 환경에서 동기화 문제가 발생할 가능성도 있습니다.

 

 

 

그럼 코드를 통해 싱글톤 패턴에 관해 알아보자.

 

DoorMan

/*
 * 문지기를 딱 한명만 만들고 싶다.
 */
public class DoorMan {

    // 자바에서 static은 main 메서드를 호출하기 전에 JVM에 읽어서 메모리에 올라오는 친구
    private static DoorMan doorMan = new DoorMan();

    // static을 하지 않으면 DoorMan에 접근할 수 없다. 이유: 생성자가 private이기 때문.
    public static DoorMan getInstance(){  // heap이 관리하는 메서드
        return doorMan;
    }

    private DoorMan() {

    }

    public void 쫓아내(Animal a){
        System.out.println(a.getName() + " 쫓아내");
    }
}

 

자바에서 static은 main 메서드를 호출하기 이전 JVM이 읽어서 메모리에 올린다.

그리고 doorMan 변수를 private으로 선언했기 때문에 다른 곳에서 접근하지 못한다.

 

그리고 생성자 또한 private 이므로 외부에서 DoorMan을 생성하지 못하여

getInstance() 메소드를 통해야만 DoorMan 객체를 얻을 수 있다.

 

위의 결과로 모든 외부 클래스들은 단 하나의 DoorMan 객체만을 사용하게 된다.

 

 

이게 싱글톤 패턴이다.