[java] 싱글톤 패턴

이동엽·2023년 1월 21일
0

싱글톤

싱글톤 패턴은 소프트웨어 디자인 패턴이며, 생성자로 최초로 생성된 이후로 생성자가 여러 차례 호출해도 최초에 생성된 그 객체를 리턴한다(static)

즉, 객체가 여러개 생성되면 값이 변경될 위험이 있는 요청이 많은 곳에서 사용하면 효율적이다.

장점

  • 딱 한번의 new로 인스턴스 생성했기 때문에메모리 영역이 고정적이며,낭비가 없다.
  • static 키워드를 쓰기에 다른 클래스의 인스턴스들이 데이터 공유하기 쉽다.
  • 인스턴스가 무조건 한개만 존재하는걸 지정할때 쓰는거 같다.

단점

  • 이 싱글톤 인스턴스가 너무 많이 일하거나 많은 데이터를 공유시킬 경우 다른 클래스의 인스턴스들과 결합도가 높아진다
    -> 이건 객체 지향 설계 원칙이 어긋나기에 수정이 어려워지고, 유지보수의 비용이 높아진다.
  • 멀티 쓰레드 환경에서 동기화 처리안하면 인스턴스가 2개이상으로 생성될수도 있다.

예제)

하나의 프린터기를 여러 사원이 공유하면서 사용하는 경우에 쓰는 싱글턴패턴

public class Printer {
    	private static Printer printer = null;
    
    	private Printer(){}
    
    	public static Printer getInstance() {
    		if(printer == null) {
    			printer = new Printer();
    		}
    		return printer;
    	}
    
    	public void print(String input) {
    		System.out.println(input);
    	}
    }

싱글톤 패턴이 적용되는 예제이며, 기본 생성자를 private 키워드를 사용하여 생성을 못하게하고, getInstance()를 이용해 만약 생성되지않았다면(null), 생성하고, 인스턴스가 있으면 그 인스턴스를 리턴하는 형태이다.
메소드,인스턴스 변수 모두 statc이다.

왜? static이냐?

기본 생성자를 못쓰기때문에 외부에서 인스턴스에 접근할려면 클래스 변수,메소드에 접근을 시켜줘야하기 때문에 이 두가지는 정적타입으로 해야한다.

문제점

문제점은 좀더 공부하고 나중에...

참고

https://velog.io/@kyle/%EC%9E%90%EB%B0%94-%EC%8B%B1%EA%B8%80%ED%86%A4-%ED%8C%A8%ED%84%B4-Singleton-Pattern

profile
씨앗

0개의 댓글