Singleton Pattern 이란?
싱글턴 패턴은 객체의 인스턴스가 오직 1개만 생성되도록 보장하는 디자인 패턴입니다. 싱글톤 패턴을 사용하면 객체의 인스턴스를 공유할 수 있고, 객체의 생성 및 소멸을 제어할 수 있습니다.
Singleton Pattern의 장점
- 객체를 단 한 번만 생성하여 메모리 낭비를 방지할 수 있습니다.
- 객체를 프로그램 전체에서 공유할 수 있으므로 코드의 재사용성이 높아집니다.
- 객체의 상태를 쉽게 관리할 수 있습니다.
- 객체의 동기화를 쉽게 구현할 수 있습니다.
Singleton Pattern의 단점
- 객체의 확장성이 떨어질 수 있습니다.
- 객체의 테스트가 어려울 수 있습니다.
- 객체의 모듈성이 떨어질 수 있습니다.
이렇게 장단점이 있어서 Singleton Pattern을 사용할 때는 장점과 단점을 모두 고려하여 신중하게 선택해야 합니다.
Singleton Pattern의 사용
- 객체를 단 한 번만 생성하여 메모리 낭비를 방지해야 하는 경우
- 객체를 프로그램 전체에서 공유해야 하는 경우
- 객체의 상태를 쉽게 관리해야 하는 경우
- 객체의 동기화를 쉽게 구현해야 하는 경우
사용 예시로는
- 데이터베이스 연결
- 프린터
- 파일 시스템
- 로그 시스템
이러한 것들이 있습니다.
Singleton Pattern 사용 비추천
- 객체의 확장성이 중요한 경우
- 객체의 테스트가 중요한 경우
- 객체의 모듈성이 중요한 경우
Singleton Pattern 사용 방법
public class Singleton {
private static Singleton instance;
private Singleton() {
}
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
1. private static으로 자기 자신을 멤버변수로 선언합니다.
2. 생성자를 private으로 선언합니다.
3. 자기 자신이 없으면 자기 자신을 생성하고 돌려주는 함수를 생성합니다.(getInstance())
이렇게 하면 프로그램이 실행되고 해당 class 내부에 있는 함수를 실행할 때 해당 class에 대한 객체를 한 번만 생성하고 그 이후에 삭제가 되지 않는 이상 생성되지 않습니다.
이전 같은 경우에는
Singleton s1 = new Singleton();
Singleton s2 = new Singleton();
Singleton s2 = new Singleton();
이런 식으로 계속 객체를 생산하여 메모리에 부하를 주었다면
이제는
Singleton.getInstance()
이 코드로 class 내부에 있는 메서드나 변숫값을 가져올 수 있습니다. static 변수에 저장되어 있고 객체를 하나만 생성하기 때문에 메모리의 부하를 낮춰줍니다.
Singleton 객체 소멸방법
public class Singleton {
private static Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
public static void atexitHandler() {
delete instance;
}
}
객체를 사용하지 않을 시에는 메모리 사용량을 줄이기 위해 개발자가 직접 객체를 삭제해줘야합니다.
그래서 atexitHandler라는 메서드를 만들어서 instance를 직접 삭제해 주면서
메모리 할당을 적게 해 줄 수 있습니다.
소감
예전에는 메모리 할당? 이런 것이 왜 중요한지 몰랐는데 이제는 아주 조금은 알 것 같습니다. 속도 개선을 위해서라면 이러한 기초 지식을 잘 알아야겠다고 생각했고 언젠가는 꼭 사용해봐야겠다는 생각을 했습니다.
비가 내리는 주말인데요. 다들 우산 잘 들고 나가세요
'코딩 개발 > Java' 카테고리의 다른 글
JSTL (Jsp Standard Tag Library) (2) | 2023.05.29 |
---|---|
Web 통신 - Forward, Redirect (2) | 2023.05.27 |
Model 2 Architecture (MVC) (0) | 2023.05.25 |
Model 1 Architecture (3) | 2023.05.25 |
JSP HTTP 통신 (HTML <form>, <a> tag) (0) | 2023.05.23 |