본문 바로가기
개발공부/Java

[Java] 10. static 응용 - 싱글톤 패턴(Singleton Pattern)

by sangyeon 2021. 11. 27.
728x90

1. 싱글톤 패턴이란?

 

- 프로그램에서 인스턴스가 단 한 개만 생성되어야 하는 경우 사용하는 디자인 패턴

- static 변수, 메서드를 활용하여 구현할 수 있음

ex) 날짜 시간(시/분/초), 회사(삼성전자)

 

아래 클래스 다이어그램을 보면 위에서 부터 

클래스 이름(Singleton)

변수(instance)

생성자와 메서드(Singleton, getInstance)

(-는 private, +는 public을 의미)

 

클래스 다이어그램

 

2. 싱글톤 패턴 예제

package ch18;

public class Company {

private static Company instance = new Company(); // 유일한 객체(인스턴스) 생성


private Company() {}  // 여러 개의 객체를 생성하지 못하도록 private으로 설정


public static Company getInstance() { // 외부에서 클래스이름으로 메서드를 호출 할 때, static으로 선언해주어야 한다.

if(instance == null) {
instance = new Company();
}

return instance;
}
}

> 위의 다이어그램에서 보는바와 같이 Company라는 클래스에서 private static 변수로 멤버 변수를 선언하고

private으로 Company 생성자를 만들고, public으로 getInstance 메서드를 만드는 것이 일반적인 싱글톤 패턴이다.

 

저렇게 코딩을 하면 Client 코드에서 생성자를 의미로 생성할 수 없다. 오로지 하나의 인스턴스만 바라보게 된다.

package ch18;

import java.util.Calendar;

public class CompanyTest {

public static void main(String[] args) {

Company company1 = Company.getInstance();
Company company2 = Company.getInstance();

System.out.println(company1);
System.out.println(company2);

Calendar calendar = Calendar.getInstance();

}

}

=======

출력결과

=======

: 주소가 동일하다. (같은 인스턴스임)

ch18.Company@1c4af82c
ch18.Company@1c4af82c

728x90