JAVA

[자바] 싱글톤 패턴(Singleton pattern)

yujin0517 2021. 7. 14. 16:38

싱글톤 패턴이란?

-> 하나의 객체를 생성하여, 이 객체를 어디든 참조하여 사용할 수 있게 하는 패턴이다.

  • 생성자는 private로 선언하여 다른 클래스에서 생성하지 못하게 한다. 
  • 메소드는 static(정적) 메소드로 선언하여 사용한다. 
  • 생성자가 여러 번 호출되더라도 실제로 생성되는 객체는 하나고, 최초 생성 이후 호출된 생성자는 최초에 생성한 객체를 반환한다. 

 

싱글톤 패턴을 사용하는 이유

  1. 고정된 메모리 영역을 얻을 수 있다.
  2. 한 번의 new로 인스턴스를 사용할 수 있기 때문에 메모리 낭비를 방지한다.
  3. 싱글톤 패턴으로 만들어진 클래스의 인스턴스는 전역 인스턴스 이므로 다른 클래스에 데이터를 공유할 수 있다.

 

싱글톤 패턴의 문제점

너무 많은 데이터를 공유시킬 경우, 다른 클래스의 인스턴스들 간에 결합도가 높아지게 된다. 결론적으로 수정이 어려워지고 테스트하기 어려워질 수 있다. 

 

연습문제 

객체를 하나만 사용하여 사원 1,2를 출력하는 프로그램 만들기 (방법 1, 2은 성능 차이만 있음)

 

방법 1)

class Company{
	
	String name;  //필드
	
	private static Company instance; //타입은 Company, 변수이름은 instance
	
	private Company() {  //생성자
		
	}
	
	public static Company getInstance() {  //메소드
    	if(instance == null){
        	instance = new Company3();
        }
		return instance;
	}
}

public class MainTest {
	public static void main(String[] args) {
		Company company1 = Company.getInstance();
		Company company2 = Company.getInstance();
		
		company1.name = "사원1";
		System.out.println(company1.name);
		
		company2.name = "사원2";
		System.out.println(company2.name);
        
		System.out.println("===============");
		System.out.println(company1.name);  //왜 "사원1"이라고 출력되지 않는가??
	}
}

MainTest 콘솔창

=> 마지막에 company1.name을 출력했지만 "사원 1"이 아닌 "사원 2"가 생성된 이유는 객체를 1개만 생성하여 공유하고 있기 때문입니다. 객체를 하나만 생성하여 변수를 선언하고 필요시 선언하여 사용하기 때문에 가장 마지막에 선언하여 대입한 값이 들어있게 됩니다. 

 

 

감사합니다!

 

2021.07.14

 

'JAVA' 카테고리의 다른 글

[Java] 추상 클래스(abstract)  (0) 2022.08.19
[Java] 오름차순, 내림차순 정렬  (0) 2022.08.17
예외 처리  (0) 2021.07.13
[자바] 공격 프로그램 구현해보기  (0) 2021.07.11
[자바] 상속  (0) 2021.07.09