Java/Java 객체지향 디자인 패턴

[Java 객체 지향 디자인 패턴] 6. 싱글턴 패턴 - Singleton Pattern : 단하나! 비동기 시 주의

디벨로펄 2022. 2. 23.
반응형

안녕하세요~ 이 패턴은 회사에서도 자주 접해서 꽤나 친숙한 패턴입니다. 좀 빨리 넘어갈 수 있지 않을까 생각해봅니다. ㅎ.ㅎ

 

6. 싱글턴 패턴 - Singleton Pattern 

싱글턴 패턴은 인스턴스가 오직 하나만 생성되는 것을 보장하고, 어디서든 이 인스턴스에 접근할 수 있도록 하는 디자인 패턴입니다. 

싱글턴 패턴 컬레보레이션

 - Singleton : 하나의 인스턴스만을 생성하는 책임이 있고, getInstance메서드를 통해 모든 클라이언트에게 동일한 인스턴스를 반환하는 작업을 수행한다.

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

* 경합조건(race Condition) : 메모리와 같은 동일한 자원을 2개 이상의 스레드가 이용하려고 경합하는 현상.

= 다중 스레드에서 싱글턴 패턴 사용 시 발생할 수 있다.

 

두 가지 해결법

1. 정적 변수에 인스턴스를 만들어 바로 초기화하는 방법 =( instance = new Singleton())

2. 인스턴스를 만드는 메서드에 동기화하는 방법 = synchronized

public class Singleton{
    private static Singleton instance=null;
    public static synchronized Singleton getInstance(){
    	if(instance==null) instance=new Singleton();
        return instance;
    }
}

--> 여기서 만약 동시에 처리하지 말아야할 method가 있다면 해당 method도 synchronized로 처리해주셔야합니다~!

 

6.1 싱글턴 패턴과 정적 클래스

  싱글턴 패턴을 사용하지 않고 정적 메서드만으로 이루어진 정적 클래스(static class)를 사용해도 동일한 효과를 얻을 수 있다. 싱글턴 패턴과 정적 클래스의 가장 큰 차이점은, 정적 클래스에서는 객체를 전혀 생성하지 않고 메서드를 사용한다는 점이다. 다른 곳에서는 아무 문제없이 사용 가능하지만, 인터페이스 구현 시에는 정적 메서드를 사용할 수 없다.

 

  인터페이스는 대체 구현이 필요한 경우 주로 사용한다. 책에서는 프린트를 예로 들었다. 실제 프린트로 테스트를 하기에는 부담스러우니, 가짜 프린트 객체를 만들어 테스트에만 활용을 하는 것이다. 여기서 이 객체가 모의 객체~이다. 

모의 객체 : 테스트용 대역 객체 정도...

단위 테스트 : 빠르게 실행되어야 한다.

 

싱글턴 패턴은 멀티 스레드 환경고려해서 synchronized만 적절하게 활용한다면 큰 어려움 없는 패턴인 것 같습니다. 굳~!~

 

 

연습문제

5번은 Factory Pattern으로 해결하는듯.. -> 추후 예고편 느낌 ㅋㅋ 팩토리패턴 배우겠다~뭐 이런느낌

 

JAVA 객체지향 디자인 패턴 - 교보문고

UML과 GoF 디자인 패턴 핵심 10가지로 배우는 | 이 책이 제시하는 핵심 내용객체지향 이론과 UML을 통해 GoF 디자인 패턴의 핵심 10가지를 배운다.이 책의 특징과 장점5단계 학습법으로 디자인 패턴을

www.kyobobook.co.kr

 

반응형

댓글