싱글톤(Singleton)

윤재열·2022년 1월 19일
0

Java

목록 보기
36/71
post-custom-banner

처음 시작할 때는 싱글톤이라는 개념이 너무 어려워서 그냥 이해만하고 지나쳤지만 이제 내것으로 만들어야 하기때문에 다시 제대로 공부해보자!

싱글톤이란?

가끔 전체 프로그램에서 단 하나의 객체를 만들도록 보장해야 하는 경우가 있습니다.
그렇게 해서 단 하나만 생성된다고 해서 이 객체를 싱글톤이라고 합니다.

  • 싱글톤을 만들려면 클래스 외부에서 new 연산자로 생성자를 호출할 수 없도록 막아야 한다.
    생성자를 호출한 만큼 객체가 생성되기 때문입니다.
    생성자 앞에 접근제어자 private를 붙여주면 된다.

  • 자신의 타입인 정적 필드를 하나 선언하고 자신의 객체를 생성해 초기화한다.
    참고로 클래스 내부에서는 new연산자로 생성자 호출이 가능하다.정적필드도 private 접근제한자를 붙여 외부에서 필드값을변경하지 못하도록 막는다.
    대신 외부에서 호출할 수 있는 정적 메서드인 getInstance()를 선언하고 정적 필드에서 참조하고 있는 자신의 객체를 리턴해준다!

public class 클래스 {
//정적 필드
private static 클래스 singleton = new 클래스();

//생성자
private 클래스(){}

//정적 메서드
static 클래스 getInstace(){
return singleton;
}
}
  • 외부에서 객체를 얻는 유일한 방법은 getInstance()메서드를 호출하는 방법입니다.
    getInstance()메서드는 단 하나의 객체만 리턴
package OOP;

public class Singleton {
    private static Singleton singleton = new Singleton();

    private Singleton() {
    }
    static Singleton getInstance(){
        return singleton;
    }
}
package OOP;

public class SingletonExample {
    public static void main(String[] args) {
Singleton obj1 = Singleton.getInstance();
Singleton obj2 = Singleton.getInstance();

if(obj1 ==obj2){
    System.out.println("같은 singleton 객체입니다.");
}else{
    System.out.println("다른 singletone 객체입니다.");
}
    }
}

싱글톤패턴

애플리케이션이 시작될 때 어떤 클래스가 최초 한번만 메모리를 할당하고(Static) 그 메모리에 인스턴스를 만들어 사용하는 디자인패턴.

생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나고 최초 생성 이후에 호출된 생성자는 최초에 생성한 객체를 반환한다.

싱글톤 패턴을 쓰는 이유

  • 고정된 메모리 영역을 얻으면서 한번의 new로 인스턴스를 사용하기 때문에 메모리 낭비를 방지할 수 있음

  • 또한 싱글톤으로 만들어진 클래스의 인스턴스는 전역 인스턴스이기 때문에 다른 클래스의 인스턴스들이 데이터를 공유하기 쉽다.

  • DBCP(DataBase Connection Pool)처럼 공통된 객체를 여러개 생성해서 사용해야하는 상황에서 많이 사용.

  • 인스턴스가 절대적으로 한개만 존재하는 것을 보증하고 싶을 경우 사용.

  • 두 번째 이용시부터는 객체 로딩 시간이 현저하게 줄어 성능이 좋아지는 장점!

profile
블로그 이전합니다! https://jyyoun1022.tistory.com/
post-custom-banner

0개의 댓글