jujuwon
시크릿주주
jujuwon
전체 방문자
오늘
어제
  • 분류 전체보기 (106)
    • 🔠 프로그래밍언어 (35)
      • ☕️ Java (19)
      • 🐠 Python (15)
      • 🍠 Kotlin (1)
    • 🔙 Backend (16)
      • 🌿 Springboot (12)
      • 🐳 Docker (1)
      • ☁️ AWS (3)
    • 💼 CS (12)
      • 📶 Network (12)
    • 🕹 알고리즘 (14)
      • 📑 스터디 (2)
      • 💁🏻‍♂️ 백준 (9)
      • 👨🏼‍🔬 프로그래머스 (3)
    • 📚 Book (8)
      • 🔎 오브젝트 (4)
      • 🧪 TDD (2)
      • 📜 논문 (2)
    • 🔐 보안 (7)
      • 👾 Pwnable (7)
    • 📝 회고 (4)
    • 🧩 etc. (10)
      • ⚠️ issue (2)
      • 💡 꿀팁 (7)
      • ✏️ 끄적 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

인기 글

최근 글

hELLO · Designed By 정상우.
jujuwon

시크릿주주

Java :: 싱글톤(Singleton) 패턴
🔠 프로그래밍언어/☕️ Java

Java :: 싱글톤(Singleton) 패턴

2022. 12. 12. 16:15
반응형

 

싱글톤(Singleton) 패턴


  • 클래스의 인스턴스가 하나임을 보장하고, 접근할 수 있는 전역적인 접근점 제공 !

 

딱 하나의 인스턴스만 생성.

생성된 인스턴스를 어디서든 참조할 수 있게 한다.

실제로 생성되는 인스턴스는 하나 ! (객체 생성을 한번으로 제한)

생성자가 또 호출되어도 이미 생성된 인스턴스를 리턴해주는 방식.

 

장점

  • 메모리 낭비 방지
  • 싱글톤 인스턴스를 사용하면 다른 인스턴스 간에 데이터 공유가 쉬움
  • 오직 하나의 인스턴스가 존재하는 것을 보증하기에 개발 시 실수를 줄일 수 있음

단점

  • 전역변수보다 사용하기 불편
  • 싱글톤 역할이 커지면 결합도가 높아져 객체지향 설계원칙에서 어긋날 수 있음
  • 멀티쓰레드 환경에서 동기화 처리를 하지 않으면 컨트롤이 어려움
  • 인스턴스의 파괴 시점을 컨트롤 하기 어려움

 

예시 코드

  • 이른 초기화 방식 : 클래스 초기화 시점에 메모리에 등록해서 사용하는 방식
public class Singleton {
    private static Singleton uniqueInstance = new Singleton();

    private Singleton() {}

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

 

구현하기 가장 간단하지만, 처음부터 메모리를 잡고 들어가기 때문에 효율적이진 않음

예외 처리도 불가능.

 

  • 늦은 초기화 방식 : 필요할 때 객체를 생성하는 방식
public class Singleton {
    private static Singleton uniqueInstance;

    private Singleton() {}

    public static Singleton getInstance() {
        if (uniqueInstance == null)
            uniqueInstance = new Singleton();
        return uniqueInstance;
    }
}

 

메모리 점유의 단점을 보완할 수 있고 예외 처리도 가능.

하지만 멀티 쓰레드 환경에서 문제가 생길 수 있음.

두 쓰레드에서 동시에 생성한다면 ? → 다중 객체 생성 문제가 생길 수도 있음.

 

728x90
반응형
저작자표시 (새창열림)
    '🔠 프로그래밍언어/☕️ Java' 카테고리의 다른 글
    • Java :: 열거형 - Enumeration
    • Java :: 팩토리(Factory) 메소드 패턴
    • Java :: 디자인 패턴
    • Java :: 프로그램 개발 원칙
    jujuwon
    jujuwon

    티스토리툴바