인생을 코딩하다.

[Java] 디자인패턴(DesignPattern) -> 싱글톤 패턴(singleton Pattern)(1) 본문

Java

[Java] 디자인패턴(DesignPattern) -> 싱글톤 패턴(singleton Pattern)(1)

Hyung1 2020. 11. 10. 20:09
728x90
반응형

static 관련해서 응용할 수 있는 singleton pattern은 디자인 패턴의 일종이다.

 

디자인 패턴... 우리가 시스템을 만들때, 객체 지향 프로그램으로 설계할 때, 어떻게 하면 효율적이고 유지보수 하기 좋게 만들 수 있는가를 일종의 패턴으로 만들어 놓은 23가지 패턴

 

그 중 싱글톤 패턴이란? (아주 기본적인 틀만 설명)

 

회사가믄 프로그램에서 많이 쓰는데, 새로 만들 때도 있고, 이미 구현된 것을 가져다 쓰는 경우도 많다.

그래서 가져다 쓸 때, new해서 갖다쓰지 않고 인스턴스로 가져다 쓴다. 그럴때 이게 싱글톤 패턴이구나? 라고 이해하면 좋겠죠?

 

단 하나만 존재하는 인스턴스 - sigleton pattern

 

생성자는 private으로, static으로 유일한 객체 생성

외부에서 유일한 객체를 참조할 수 있는 public static ger() 메서드 구현

 

어떤 객체가 new 되었을 때, 이 객체가 여러번 new 됨으로써 여러가지 인스턴스 변수를 갖게 되었을 경우 문제가 발생할 수도 있을때.. 음 예를들면 우리는 지금 타임존에 의해서 서울 중심의 시간대를 쓰고 있다. 그런데 여러 시간이 생성될 수도 있게 되면 문제가 발생 할 수 있다. 이럴때 어떻게 해결해야 하는가?

 

public class Skhu {

    private static Skhu instance = new Skhu();
    // 자기 자신의 타입을 가진 변수를 만든다. skhu가 내부에서 쓸 수 있는 생성자이기 떄문에

    private Skhu() {}
    //private라 외부에서 쓸 수가 없다.

    public static Skhu getInstance() {

        if(instance == null) {
            instance = new Skhu();
        }

        return instance;
    }


}
public class SkhuTest {

    public static void main(String[] args) {

        Skhu skhu1 = Skhu.getInstance();

        Skhu skhu2 = Skhu.getInstance();

        System.out.println(skhu1);
        System.out.println(skhu2);
        
       }
 }

 

동일한 adress가 출력되는 것을 볼 수 있다.

 

java.util에 있는 class중  Calendar도 싱글톤 패턴으로 만들어진 예 이다. 

 Calendar calendar = Calendar.getInstance() {
}
// 자바 유틸에 있는 class
// 싱글톤 패턴으로 구현되어 있다. new로 생성 불가
 // .getInstance()로만 가져 올 수 있다. 가져 올 수 있는것이 단 하나이기 때문에

 

728x90
반응형
Comments