본문 바로가기
코딩 공부/web & Java

[JAVA] 싱글톤

by 현장 2022. 10. 11.

싱글톤(Singleton)

하나의 애플리케이션 내에서 단 하나만 생성되는 객체

public class Singleton {
	private static Singleton singleton = new Singleton();
	
	private Singleton() {}
	
	static Singleton getInstance() {
		return singleton;
	}
}

싱글톤을 만드는 방법

  • 외부에서 new 연산자로 생성자를 호출할 수 없도록 막기 (private 접근 제한자를 생성자 앞에 붙임)
  • 클래스 자신의 타입으로 정적 필드 선언 (자신의 객체를 생성해 초기화, private 접근 제한자 붙여 외부에서 필드 값 변경 불가하도록)
  • 외부에서 호출할 수 있는 정적 메소드인 getInstance() 선언 (정적 필드에서 참조하고 있는 자신의 객체 리턴)

싱글톤 얻는 방법

장점

싱글톤으로 딱 한번 클래스를 생성하여 재활용을 하게 되면 메모리 낭비를 방지할 수 있다는 장점을 가진다. 또한 싱글톤으로 만들어진 클래스는 인스턴스의 전역 인스턴스이기 때문에 다른 클래스의 인스턴스들이 데이터를 공유하기 쉽다.

단점

객체 지향 설계 원칙 중에 개방-폐쇄 원칙이란 것이 존재한다. 만약 싱글톤 인스턴스가 혼자 너무 많은 일을 하거나, 많은 데이터를 공유시키면 다른 클래스들 간의 결합도가 높아지게 되는데, 이때 개방-폐쇄 원칙이 위배된다. 결합도가 높아지게 되면, 유지보수가 힘들고 테스트도 원활하게 진행할 수 없는 문제점이 발생한다.

 

또한, 멀티 스레드 환경에서 동기화 처리를 하지 않았을 때, 인스턴스가 2개가 생성되는 문제도 발생할 수 있다. 따라서, 반드시 싱글톤이 필요한 상황이 아니면 지양하는 것이 좋다고 한다.

'코딩 공부 > web & Java' 카테고리의 다른 글

[Web] DAO, DTO, VO, Entity  (0) 2022.10.17
[JAVA] Wrapper Class  (0) 2022.10.11
[MySQL WorkBench] error 1175  (0) 2022.09.29
[JDBC] excute 종류  (0) 2022.09.28
[JDBC, MySQL] JDBC로 MySQL에 한글 입력시 깨짐 현상  (0) 2022.09.27