안녕하세요~ 이 패턴은 회사에서도 자주 접해서 꽤나 친숙한 패턴입니다. 좀 빨리 넘어갈 수 있지 않을까 생각해봅니다. ㅎ.ㅎ
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 > Java 객체지향 디자인 패턴' 카테고리의 다른 글
[Java 객체 지향 디자인 패턴] 8. 커맨드 패턴 - Command Pattern : 기능의 캡슐화 (0) | 2022.03.17 |
---|---|
[Java 객체 지향 디자인 패턴] 7. 스테이트 패턴 - State Pattern : 상태의 캡슐화 (0) | 2022.03.14 |
[Java 객체 지향 디자인 패턴] 5. 스트래티지 패턴 - Strategy Pattern~! 전략 패턴~! (0) | 2022.02.23 |
[Java 객체 지향 디자인 패턴] 4. 디자인 패턴 - 바퀴를 다시 발명하지 말라~! (0) | 2022.02.16 |
[Java 객체 지향 디자인 패턴] 3. SOLID 원칙(SRP, OCP, LSP, DIP, ISP) (0) | 2022.02.08 |
댓글