본문 바로가기
디자인 패턴

[디자인 패턴] 1. 싱글턴 패턴

글: Song hyun 2024. 4. 30.
728x90
반응형

[디자인 패턴] 1. 싱글턴 패턴

 

1. 싱글턴 패턴(Singleton Pattern)이란?

: 싱글턴 패턴이란, 특정 객체가 단 하나만 존재해야 할 때 사용되는 디자인 패턴이다.

이 패턴을 따르는 클래스는 생성자가 여러번 호출되더라도, 실제로 생성되는 객체는 오직 하나이다.

이후로 호출된 생성자는 최초로 생성된 객체 하나를 리턴한다. 

 

*Java에서는 생성자를 private으로 선언하여, 다른 곳에서 생성하지 못하게 만든다.

대신 값을 반아와야 할 때는 getInstance 메서드를 생성해 구현한다.

 

*공통된 객체를 여러개 생성해서 사용하는 DBCP(DataBase Connection Pool)에서 많이 사용된다.

 

 

2. 왜 싱글턴 패턴을 사용할까?

싱글턴 패턴을 따르는 클래스들은 객체를 하나만 생성할 수 있기 때문에, 메모리 낭비를 방지할 수 있다.

또한 해당 인스턴스는 전역(static)이므로, 다른 클래스들이 공유할 수 있다는 장점이 있다.

 

*다만 싱글턴 인스턴스가 여러 클래스에서 호출되거나, 많은 데이터를 공유하면 결합도가 높아지게 된다.

package useful.ch04;

/*
 * 디자인 패턴 살펴보기
 * 1. 싱글톤 패턴이 뭘까?
 * (1) 생성자를 프라이빗으로 만든다.
 * (2) static 변수를 활용해서 내부에서 객체를 생성하고, 주소값을 할당한다.
 * (3) 외부에서 유일하게 참조 할 수 있는 public 메서드를 제공한다.
 */
public class Company {

	// 2. static 변수 활용 데이터 타입 선언
	private static Company company;

	// 1. 생성자의 접근 제어 지시자를 프라이빗으로 변경하면
	// 외부에서 기본 생성자를 호출 할 수 없다.
	private Company() {
	}

	// 3. 외부에서 접근 가능한 메서드를 만들어준다.
	public static Company getInstance() {
		if (company == null) {
			company = new Company();
		}
		return company;
	}

}
package useful.ch04;

public class CompanyTest {

	public static void main(String[] args) {
		// 생성 불가
		// Company company = new Company();
		
		// 고민! Company 객체에 어떻게 접근할 수 있을까?
		
		// A 클래스에서 활용
		Company company=Company.getInstance();
		System.out.println(company);

		// B 클래스에서 활용
		Company company2=Company.getInstance();
		System.out.println(company);
	} // end of main

} // end of class
728x90
반응형

'디자인 패턴' 카테고리의 다른 글

[디자인 패턴] 2. 템플릿 메서드 패턴  (0) 2024.04.30