싱글턴 패턴 (Singleton Pattern)
천둥상어
·2023. 12. 30. 21:49
반응형
싱글턴 패턴 기본 개념
싱글턴 패턴은 특정 클래스의
인스턴스를 하나만 생성하고
해당 인스턴스를 전역적으로
접근하게 해주는 것이다.
여기서 특정 클래스란
개발하는 주체에 유일하게
하나만 존재하는
자원이나 기능을 말한다.
예를 들어 마우스 컨트롤러나
파일이나 이미지 로더가
대표적인 예시다.
마우스를 제어하거나
파일 또는 이미지 로드하는 것은
전역적으로 사용되는 기능이다.
만약 그때마다 새 인스턴스를
생성한다면 이것은 자원 낭비다.
즉 싱글턴 패턴은
유일무이한 기능을 가진
하나만 존재하는 인스턴스이며
해당 인스턴스를 전역적으로
접근 보장해 주는 패턴이다.
싱글턴 패턴 구현
자바스크립트에서 싱글턴은
여러 방법으로 구현할 수 있다.
다음은 파일명을 지정하고
로드 세이브를 하는 파일매니저를
싱글턴 패턴으로 구현한 예다
모듈 구현 방법
const FileManager = (()=>{
let instance;
let fileName = "None";
function createInstance()
{
// 인스턴스 생성 함수
return {
// 생성시 메서드 및 속성 정의
setFileName:(pFileName)=> {fileName = pFileName},
getFileName:()=> {return fileName},
fileLoad: ()=> {console.log(`${fileName} Load`)},
fileSave: ()=> {console.log(`${fileName} File Save`)}
}
}
return {
getInstance: ()=>{
// 인스턴스가 생성도지 않았다면 생성
if(!instance) instance = createInstance();
return instance;
}
}
})();
// 클라이언트 코드
const fileManager = FileManager.getInstance();
fileManager.setFileName("list.csv");
console.log(fileManager.getFileName()); // list.csv
fileManager.fileLoad(); // list.csv Load
fileManager.fileSave(); // list.csv File Save
클래스 구현 방법
// 클래스 코드
export default class FileManager {
constructor() {
this.fileName = 'None';
if (!FileManager.instance) {
// 인스턴스가 없으면 생성
FileManager.instance = this;
}
return FileManager.instance;
}
setFileName(pFileName)
{
this.fileName = pFileName;
}
getFileName()
{
return this.fileName;
}
fileLoad()
{
console.log(`${this.fileName} Load`);
}
fileSave()
{
console.log(`${this.fileName} File Save`);
}
}
// 클라이언트 코드
const fileManager = new FileManager();
fileManager.setFileName("list.csv");
console.log(fileManager.getFileName()); // list.csv
fileManager.fileLoad(); // list.csv Load
fileManager.fileSave(); // list.csv File Save
싱글턴 패턴의 장단점
장점
- 메모리 최적화
싱글턴 패턴은 하나의 인스턴스만 유지하므로
인스턴스가 중복 생성 되지 않는다.
즉 메모리 사용이 최적화 된다. - 전역 상태 관리
싱글터 패턴이 적용된 인스턴스는 전역적으로
접근 가능하다.
상태나 데이타를 쉽게 공유 및 관리 할 수 있다.
단점
- 오남용
전역 관리의 편의성으로 싱글턴을 남발하는 경우가 있다.
공유하는 데이터가 많다는 것은 코드 간 결속력이 강해지고
코드 수정이 어려워짐을 의미한다.
반응형
'프로그래밍 > JavaScript 디자인 패턴' 카테고리의 다른 글
팩토리 패턴 (Factory Pattern) (1) | 2023.12.23 |
---|