1일 1개념
싱글톤 패턴(Singleton Pattern) 이란?
말로만 들어봤던 Singleton Pattern은 무엇을 말하는 것까 궁금했었다.
궁금한 건 못참으니까 바로 검색해보았다.
싱글톤 패턴이란?
-> 어플리케이션이 시작될 때 어떤 클래스가 최초 한번만 메모리를 할당하고(static)
그 메모리에 인스턴스를 만들어 사용하는 디자인 패턴
인스턴스가 1개만 생성되는 특징을 가진 싱글톤 패턴을 이용하면
하나의 인스턴스를 메모리에 등록해서 여러 쓰레드가 동시에
해당 인스턴스를 공유하며 사용할 수 있게끔 할 수 잇기 때문에 요청이 많은 곳에서 사용하면 효율을 높일 수 있다.
But!!
싱글톤을 만들 때 동시성(Concurrency) 문제를 고려해서 설계해야 한다는 점이 있다.
1. 싱글톤 패턴의 장점
- 고정된 메모리 영역을 얻으면서 한번의 new로 인스턴스를 사용하기 때문에 메모리 낭비를 방지할 수 있다.
- 싱글톤으로 만들어진 클래스의 인스턴스는 전역이기 때문에 다른 클래스의 인스턴스들이 데이터를 공유하기가 쉽다.
- 인스턴스가 절대적으로 한 개만 존재하는 것을 보증하고 싶을 경우 사용한다.
- 두 번째 이용시 부터는 객체 로딩 시간이 줄어 성능이 좋아지는 장점이 있다.
2. 싱글톤 패턴의 단점
- 싱글톤 인스턴스가 너무 많은 일을 하거나 많은 데이터를 공유시킬 경우에 다른 클래스의 인스턴스들 간에 결합도가 높아져 "개방-폐쇠 원칙"을 위배하게 된다.
(이는 객체 지향 설계 원칙에 어긋나기 때문에 수정이 어려워지고 유지보수의 비용이 높아질 수있다
and 멀티쓰레드 환경에서 동기화 처리를 안하면 인스턴스가 2개가 생성 될 수 있는 가능성이 생기게 된다.)
싱글톤 패턴은 꼭 필요한 경우가 아니라면 지양해야 한다.
※ 싱글톤 패턴 사용 예시(싱글톤 클래스 생성)
public class CompanyInfo
{
private static CompanyInfo innstance;
private String companyName;
private String companyAddr;
private CompanyInfo()
{
}
public static CompanyInfo getInstance()
{
if (innstance == null)
{
synchronized(CompanyInfo.class)
{
innstance = new CompanyInfo();
}
}
return innstance;
}
// getter, setter
public String getCompanyName() {
return companyName;
}
public void setCompanyName(String companyName) {
this.companyName = companyName;
}
public String getCompanyAddr() {
return companyAddr;
}
public void setCompanyAddr(String companyAddr) {
this.companyAddr = companyAddr;
}
}
※ getInstance 호출
외부에서 호출 시 new를 사용하지 않고 getInstance를 사용하여 객체를 생성하거나 반환 받는다.
CompanyInfo companyInfo = CompanyInfo.getInstance();
@출처 : https://devmoony.tistory.com/43
@출처 : https://itstudy402.tistory.com/8
'내일배움캠프 > Today I Learned' 카테고리의 다른 글
[TIL] 나의 마흔 네번째 회고록 (0) | 2023.01.15 |
---|---|
[TIL] 나의 마흔 세번째 회고록 (0) | 2023.01.11 |
[TIL] 나의 마흔 한번째 회고록 (0) | 2023.01.09 |
[TIL] 나의 마흔 번째 회고록 (0) | 2023.01.06 |
[TIL] 나의 서른 아홉번째 회고록 (2) | 2023.01.05 |