본문 바로가기
✨ Java/디자인 패턴(Design pattern)

자바(JAVA) - 싱글톤 패턴(Singleton)

by 환풍 2023. 7. 13.
728x90
반응형

 

싱글톤 패턴

생성자를 private 접근 제한해서 외부에서  new 연산자로 생성자를 호출할 수 없도록 막는 것.

즉,  하나의 클래스에 하나의 객체 인스턴스가 오직 1개만 생성되는 패턴이다.

 

Singleton 클래스

위 코드는 싱글톤 패턴을 사용하는 예제 코드이다.

Singleton 클래스의 생성자가 private로 선언되어 외부에서 직접 인스턴스를 생성하는 걸 방지한다.

대신, 정적 메서드인 getInstance()를 통해 인스턴스를 얻을 수 있다.

 

NoSingleton 클래스

예시로 객체 생성시 메모리 영역에 대해서만 알아볼 것이라 비워두었다.

 

Main 클래스

위 코드를 보면, 싱글톤을 이용하여 생성된 객체는 같은 주소를 가지는 반면에

싱글톤을 쓰지 않고 new를 통해 새로 생성된 객체들은 각각 주소값을 가진다.

따라서 싱글톤 패턴 코드를 이용하여 코드를 만들게 되면, 어디서든 같은 인스턴스에 접근할 수 있다.

 

하지만, 이 코드는 아주 기본적인 싱글톤 패턴의 코드일 뿐,

Initializaion, block, lazy, thread safe 등을 이용해서 제대로 써야한다.

 

장점

  • static을 사용해 최초 한번의 new 연산자를 통해 고정된 메모리 영역을 사용하기 때문에, 메모리 낭비를 방지할 수 있다.
  • 하나의 (전역)인스턴스를 만들고, 해당 인스턴스를 다른 모듈들이 어디에서나 공유하기 쉽고, 사용할 수 있다.
  • 인스턴스가 하나기 때문에 인스턴스를 생성할 때 드는 비용이 줄어든다.

 

단점

  • 싱글톤 인스턴스를 여러 곳에서 공유하여 사용할 경우 다른 클래스의 인스턴스 간 의존성이 높아질 수 있다.
  • 멀티스레드 환경에서 객체가 1개이상 생성되 오류 발생의 여지가 있다.
  • 많은 데이터를 공유할 경우 다른 클래스의 인스턴스 간에 결합도가 높아져 "개방-폐쇄 원칙"을 위배한다.

 

728x90
반응형

댓글