안녕하세요. 개발감자입니다.
오늘은 싱글톤 패턴에 대해서 이야기해보겠습니다.
1. 싱글톤 패턴
1-1. 싱글톤 패턴이란?
하나의 클래스에서 오직 하나의 인스턴스만 가지는 패턴입니다.
1-2. 싱글톤 패턴 코드
1) 코드 1
class Singleton {
private static class SingleInstanceHolder {
private static final Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance() {
return SingleInstanceHolder.INSTANCE;
}
}
public class HelloWorld {
public static void main(String[] args) {
Singleton a = Singleton.getInstance();
Singleton b = Singleton.getInstance();
System.out.println(a.hashCode());
System.out.println(b.hashCode());
if (a == b) {
System.out.println("a == b");
}
}
}
private static은 정적으로 1개만 할당해준다는 의미를 가지고 있습니다.
그래서 a,b에 싱글톤에 대한 객체를 생성해도 똑같은 인스턴스를 가르킵니다.
2) 코드 2
class Singleton{
private singleton () {};
private static Singleton singleton = null;
public static Singleton getSingleton(){
if (singleton == null){
singleton = new Singleton();
}
return singleton;
}
}
이 코드는 일단 singleton 객체를 Null로 생성합니다. 어떤 부분에서 이미 싱글톤 객체를 한 번 생성했다면, 나중에 불러올 때에는 생성한 객체를 사용하게 되는 코드입니다. singleton == null 이 객체 생성을 확인하는 부분입니다.
2. 싱글톤 패턴의 사용 사례
앱이나 프로젝트를 하다보면 하나의 객체만 생성되어야 할 때가 있습니다.
예를 들면, 다크 모드 설정이 있습니다. 어떤 페이지에 있든 다크 모드 설정을 하면 모든 페이지에서 다크모드가 설정되어야 합니다. 또한, 데이터 베이스 연결 모듈에 많이 사용됩니다.
3. 싱글톤 패턴의 장단점
3-1. 싱글톤 패턴의 장점
1) 싱글톤 패턴은 사용하기가 쉽고 굉장히 실용적입니다.
2) 인스턴스를 생성할 때에 드는 비용이 줄어듭니다. 하나의 인스턴스를 만든 다음에 다른 모듈들이 공유해서 사용하면 되기 때문입니다.
3-2. 싱글톤 패턴의 단점
1) 하나의 인스턴스만 사용하기 때문에 의존성이 높아진다는 단점이 있습니다.
또한, TDD(Test Driven Development)를 할 때 문제가 됩니다. TDD는 단위 테스트를 주로 하며, 이 때 테스트가 서로 독립적어야 합니다. 하지만, 싱글톤 패턴은 하나의 인스턴스를 공유하며 사용하기 때문에 독립적일 수가 없습니다.
2) 모듈 간의 결합을 강하게 만들 수 있습니다.
이는 의존성 주입 (DI)를 통해 모듈 간의 결합을 조금 더 느슨하게 만들어 해결할 수 있습니다.
오랜만에 자바를 보니 재미있는데요. 다른 패턴을 이해하기 위해서 싱글톤 패턴의 이해는 필수적이라고 생각합니다.
코드를 뜯어보며 왜 이런 패턴을 가질 수 있게 되는지 이해해보는 시간을 가져보시길 바랍니다.
그럼 더 유익한 이야기로 돌아올게요. 개발감자였습니다 :)
'CS' 카테고리의 다른 글
[CS / 네트워크] 2.4 IP 주소 (0) | 2024.05.18 |
---|---|
[CS / 네트워크] 2.3 네트워크 기기 (0) | 2024.05.17 |
[CS / 네트워크] 2.2 TCP/IP 4계층 모델 (0) | 2024.05.15 |
[CS / 네트워크] 2.1 네트워크의 기초 (0) | 2024.05.07 |
[CS] 1. 디자인 패턴 (feat. 라이브러리, 프레임워크) (0) | 2024.01.10 |