java - 싱글턴 패턴(singleton pattern)

imjingu·2023년 8월 29일
0

개발공부

목록 보기
427/481
  1. 싱글턴 패턴
    singleton pattern
    객체 지향 프로그램에서 인스턴스를 단 하나만 생성하는 디자인 패턴.
    커넥션 풀, 스레드 풀, 디바이스 설정 등과 같은 경우 인스턴스를 여러 개 만들게 되면 불필요한 자원을 사용 하게 되고,
    또 프로그램이 예상치 못하는 결과를 낳을 수 있음. 싱글턴 패턴은 오직 인스턴스를 하나만 만들고 그것을 계속해서 사용.
    싱글턴 패턴을 적용할 경우 의미상 두 개의 객체가 존재 할 수 없음.
    이를 구현하려면 객체 생성을 위한 new에 제약을 걸어야 하고, 만들어진 단일 객체를 반환할 수 있는 메서드가 필요.

다음 3가지가 필요.

  • new를 실행할 수 없도록 생성자에 private 접근 제어 자를 지정.
  • 유일한 단일 객체를 반환할 수 있는 정적 메서드가 필요.
  • 유일한 단일 객체를 참조할 정적 참조 변수가 필요.

싱글턴 패턴의 특징
1) private 생성자를 가짐.
2) 단일 객체 참조 변수를 정적 속성으로 가짐.
3) 단일 객체 참조 변수가 참조하는 단일 객체를 반환하 는 getInstance() 정적 메소드를 가짐.
4) 단일 객체는 쓰기 가능한 속성을 갖지 않는 것이 정 석.

package chapter20230829.Company;

public class Company {
	/*
	 1. 생성자를 private으로 구현하기
	 생성자의 접근제어자가 private이므로 외부 클래스에서 마음대로 Company 인스턴스를 생성 할 수 없음
	 즉 Company 클래스 내부에서만 이 클래스의 생성을 제어할 수 있음
	 */
	private Company() {}
	
	/*
	 2. 클래스 내부에 static으로 유일한 인스턴스 생성하기
	 private으로 선언하여 외부에서 이 인스턴스로 접근하지 못하도록 제한해야 인스턴스 오류를 방지할 수 있음
	 */
	private static Company instance = new Company(); // 유일하게 생성한 인스턴스
	
	/*
	 3. 외부에서 참조할 수 있는 public 메서드 만들기
	 인스턴스를 반환하는 메서드는 반드시 static으로 선언해야 함
	 getInstance() 메서드는 인스턴스 생성과 상관없이 호출할 수 있어야 하기 떄문
	 */
	public static Company getInstance() {
		if(instance == null) {
			instance = new Company();
		}
		return instance; // 유일하게 생성한 인스턴스 반환
	}
}


package chapter20230829.Company;

public class MySingleton_01 {
	public static void main(String[] args) {
		/*
		 4. 외부에서 사용하는 코드 만들기
		 외부 클래스에서 Company를 생성할 수 없으므로 static으로 제공되는 getInstance() 메서드를 호출
		 */
		Company company1 = Company.getInstance(); // 클래스 이름으로 getInstance() 호출하여 참조 변수에 대입
		Company company2 = Company.getInstance();
		// cCompany company = new Company();
		
		System.out.println(company1 == company2); // 두 변수가 같은 주소인지 확인
		System.out.println(company1); // chapter20230829.Company@72ea2f77
		System.out.println(company2); // chapter20230829.Company@72ea2f77
	}
}

0개의 댓글