싱글톤 패턴

하나의 클래스에 하나의 인스턴스만 가지는 패턴

1. 장점 :
1-1. 고정된 메모리 영역을 사용하기 때문에 메모리 낭비를 방지할 수 있음.
1-2. 이미 만들어진 인스턴스를 사용하기 때문에 속도가 빠름
1-3. 전역으로 사용되는 인스턴스이기 때문에 데이터 공유가 쉬움

2. 단점:
2-1. 구체 클래스에 의존성이 높아짐
2-2. 멀티스레드 환경에서 호출하면 여러 객체가 생성될수도 있다 (동시성 문제)
2-3. 자원을 공유하고있기 때문에 테스트하기 어렵다.

  1. 멀티스레드 환경에서 동시성 문제를 해결하기 위한 방법
    3-1. sychronize 를 사용해서 한번에 한 스레드만 들어올수 있도록 해줌
    가장 간단한 방법. 하지만 get인스턴스를 사용할때마다 동기화 처리 작업때문에 성능의 저하가 발생

    3-2. 이른 초기화 (미리 만들어서 static 처리 해둠)
    단점은 인스턴스를 만드는 과정이 길고 메모리를 많이 차지한다면 사용하지 않는 경우 효율성이 떨어짐

    3-3 Double Checking Locking
    if문을 사용해 인스턴스가 null일때 sychronize를 동기화 시켜 인스턴스를 생성하는 방법
    3-1의 단점을 완화시킬 수 있음

    3-4 static inner(권장)
    private한 static 클래스를 하나 만들어 그 안에서 private static final 인스턴스를 생성하고
    public static get인스턴스에서 private static class를 호출

참고 유튜브 : https://www.youtube.com/watch?v=bHRETd1rFfc

Updated: