static 응용 - 싱글톤 패턴(singleton pattern)

kangsun lee·2023년 3월 22일
0

Java

목록 보기
44/44

싱글톤 패턴이란?


  • 프로그램에서 인스턴스가 단 한 개만 생성되어야 하는 경우 사용하는 디자인 패턴
  • static 변수, 메서드를 활용하여 구현 할 수 있음

객체지향 프로그래밍을 위한 23가지 패턴이있는데, 유지보수가 용이하고 객체지향적인 방법으로 찾아내 정리한 패턴. 그 중 하나가 싱글톤 패턴.
프로그램을 하다보면 여러개의 인스턴스가 생성되면 문제가 발생하는 경우가 생긴다. 보통 클래스 1개에 여러 인스턴스 생성.
그렇지 않은 경우 문제가 발생하는 케이스가 있다.
예를들어 날짜, 회사는 사원수가 여러명일 수 있지만 회사라는 객체는 하나여야함.
이럴 때 싱글톤 패턴을 사용한다.



싱글톤 패턴으로 회사 객체 구현하기


  • 생성자는 private으로 선언
private Company() {}
  • 클래스 내부에 유일한 private 인스턴스 생성
private static Company instance = new Company();
  • 외부에서 유일한 인스턴스를 참조할 수 있는 public 메서드 제공
public static Company getInstance() {
	if(instance == null) {
    	instance = new Company();
	}
	return instance;
}

package ch18;

public class Company {

	private static Company instance = new Company();
	
	// 기본 생성자를 작성하지않으면 컴파일러가 자동으로 기본생성자를 public으로 생성해줌.	
	// 이대로 두면 외부에서 여러 회사를 생성할 수 있음. 
	// 싱글톤 패턴에서는 기본생성자를 private으로 하나 생성해준다.
	private Company() {}
	
	// static으로 선언해줘야 외부에서 클래스이름으로 접근할 수 있다.
	public static Company getInstance() {
		if(instance == null) {
			instance = new Company();
		}
		return instance;
	}
}
package ch18;

import java.util.Calendar;

public class CompanyTest {

	public static void main(String[] args) {
		
		/* 일반 메서드라면 원래는 인스턴스를 하나 생성해줘야 한다.
		 * Company compny = new Company(); <- 이렇게 먼저 작성해줘야함.
		 * 하지만 인스턴스를 만들지 않고 바로 가져다 쓰는 것.
		 * 
		 * static의 경우는 클래스 이름을 가져다 사용해야 한다.
		 */
		Company compny1 = Company.getInstance();
		Company compny2 = Company.getInstance();
		
		// JVM이 할당해 준 힙메모리의 어드레스(주소)가 출력된다.
		System.out.println(compny1); 
		System.out.println(compny2);
		
		
		// 날짜 객체도 new로 제공되지 않는다 (빨간줄뜸)
		// Calendar calendar =  new Calendarl
		Calendar calendar = Calendar.getInstance();
	}

}
profile
코딩 공부 💻

0개의 댓글