본문 바로가기
프로그래밍/java

[java] 싱글톤 패턴(Singleton pattern) 정리 및 예제 사용이유

by 캘리포니아전자두뇌 2023. 3. 20.
728x90
300x250
싱글톤 패턴이란?

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

 

stack 영역 - 정적으로 할당된 메모리 영역 (Boolean, char, short, int, long, flat, double ···)

heap 영역 - 동적으로 할당된 메모리 영역 (모든 오브젝트 타입의 데이터가 할당, 생성된 객체가 저장됨)

class Connection { //클래스 Connection을 정의함.
	private static Connection _inst = null; //new 예약어가 없기 때문에 stack영역에 저장됨.
	private int count = 0; //stack영역에 저장됨.
	public static Connection get() {
		if(_inst == null) {
			_inst = new Connection(); //Connection 클래스 내용들이 heap영역에 할당됨.
			return _inst; // heap영역에 할당된 주소가 리턴됨.
		}
		return _inst;
	}
	public void count() { count++; } //반환값 없이 count+1 증가.
	public int getCount() { return count; }
}
public class Test {
	
	public static void main(String[] args) { //메인 함수.
		Connection conn1 = Connection.get(); //stack영역에 저장됨.
		conn1.count();
		Connection conn2 = Connection.get(); //stack영역에 저장됨.
		conn2.count();
		Connection conn3 = Connection.get(); //stack영역에 저장됨.
		conn3.count();
		System.out.println(conn1.getCount()); //3이 출력됨.
	}

}

=> 3이 출력된 이유?

conn1, conn2, conn3에는 결국 Connection 클래스가 저장된 heap영역의 주소를 가진 _inst를 가리킴.

_inst가 사용하는 메모리 공간을 conn1, conn2, conn3이 공유함으로써 메모리 낭비를 방지함.

 

※객체 변수를 생성한다는 것은 Connection _inst = new Connection()과 같이 객체 생성 예약어인 new를 통해 heap영역에 공간을 확보해 Connection 클래스의 내용을 저장한 후 그 주소를 객체 변수에 저장하는 것. 

 

 

 

 

https://ko.wikipedia.org/wiki/%EC%8B%B1%EA%B8%80%ED%84%B4_%ED%8C%A8%ED%84%B4

 

싱글턴 패턴 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전.

ko.wikipedia.org

 

728x90
반응형

'프로그래밍 > java' 카테고리의 다른 글

자바에서 많이 사용하는 맵(Map)의 모든것  (28) 2024.11.26

댓글