2021.11.11_싱글톤패턴1-싱글톤패턴을가장단순히구현하는방법
본문 바로가기
CS Study/디자인패턴

2021.11.11_싱글톤패턴1-싱글톤패턴을가장단순히구현하는방법

by KyeongMin 2021. 11. 11.
728x90
반응형

싱글톤 패턴

  • 어떤 클래스의 인스턴스를 오직 하나만
  • 그하나만 존재하는 인스턴스에 접근할 수 있는 글로벌하게 액세스할 수있는 방법 제공해야함
Settings settings = new Settings();
settings settings1 = new Settings();
  • 두개를 비교하면 다르다
  • 싱글톤을 사용하려면 new를 사용하면 안된다.
  • 그렇게 하려면 아래와 같이 한다.
public class Settings{
  private Settings(){}
}
  • 이러면 클래스 밖에서 사용 못함
  • 밖에서 인스턴스 못만들어서 Settings안에서 글로벌 접근 가능하게 함
public class Settings{
  private Settings(){ }
      public static Settings getInstance(){
      return new Settings();
  }
}

// main문에서 선언
public static void main(String[] args){
	Settings settings = Settings.getInstance();
  Settings settings1 = Settings.getInstance();
  System.out.println(settings ==settings1);
}

// 결과
false
  • 이렇게 하더라도 new를 썼기때문에 이전과 같은 결과가 나온다 두개가 다르다가 아님 같다가 나와야함
public class Settings{
private static Setttings instance ;

  private Settings(){ }
      public static Settings getInstance(){
        if(instance == null){
     			 instance = new Settings();
       }
        return instance ;
  }
}

// main문에서 선언
public static void main(String[] args){
	Settings settings = Settings.getInstance();
  Settings settings1 = Settings.getInstance();
  System.out.println(settings ==settings1);
}

// 결과
true
  • 이렇게 하면 매번 같은 인스턴스가 나오게 된다.
  • 이방법이 나이브하게 구현한 방법
    • 심각한 문제가 있는데
      • 웹앱을 예로 들면 멀티 쓰레드로 만들게 되는데 멀티 쓰레드에서 코드가 안전한지에 대해서
        • 안전하지 않음

원본

https://github.com/3DPIT/android/blob/master/05.%EC%BD%94%EB%94%A9%EC%9C%BC%EB%A1%9C%ED%95%99%EC%8A%B5%ED%95%98%EB%8A%94GoF%EC%9D%98%EB%94%94%EC%9E%90%EC%9D%B8%ED%8C%A8%ED%84%B4/01.%EA%B0%9D%EC%B2%B4%EC%83%9D%EC%84%B1%EA%B4%80%EB%A0%A8%EB%94%94%EC%9E%90%EC%9D%B8%ED%8C%A8%ED%84%B4/2021/11/1111/01.%EC%8B%B1%EA%B8%80%ED%86%A4%ED%8C%A8%ED%84%B4/01.%EC%8B%B1%EA%B8%80%ED%86%A4%ED%8C%A8%ED%84%B4%EC%9D%84%EA%B0%80%EC%9E%A5%EB%8B%A8%EC%88%9C%ED%9E%88%EA%B5%AC%ED%98%84%ED%95%98%EB%8A%94%EB%B0%A9%EB%B2%95/2021.11.11_%EC%8B%B1%EA%B8%80%ED%86%A4%ED%8C%A8%ED%84%B41-%EC%8B%B1%EA%B8%80%ED%86%A4%ED%8C%A8%ED%84%B4%EC%9D%84%EA%B0%80%EC%9E%A5%EB%8B%A8%EC%88%9C%ED%9E%88%EA%B5%AC%ED%98%84%ED%95%98%EB%8A%94%EB%B0%A9%EB%B2%95.md

 

GitHub - 3DPIT/android

Contribute to 3DPIT/android development by creating an account on GitHub.

github.com

 

728x90
반응형

댓글