디자인 패턴 4분 읽기
싱글톤 패턴
개발 공부를 하다 보니 디자인 패턴이라는 것을 듣게 되었다. 디자인 패턴은 지금까지 자주 사용되었던 코드를 템플릿처럼 만든 개발 방법이다.
개발 공부를 하다 보니 디자인 패턴이라는 것을 듣게 되었다. 디자인 패턴은 지금까지 자주 사용되었던 코드를 템플릿처럼 만든 개발 방법이다.
특정 기능을 할 수 있는 코드를 하나의 템플릿으로 만들었기 때문에 비슷한 상황이 왔을 때 이를 활용하여 코드를 작성할 수 있다는 장점이 있다.
코드 관리의 효율성과 생산성이 디자인 패턴의 장점이라고 할 수 있다.
싱글톤 패턴(Singleton pattern)
디자인 패턴 중 처음 공부한 것은 싱글톤 패턴이다. 이름에서 알 수 있듯이 ‘하나’라는 의미가 중요하다. 싱글톤 패턴을 사용하는 경우는 인스턴스를 생성할 때 새로운 인스턴스를 생성하는 것이 아니라 이전에 만든 인스턴스에 접근하여 시스템 전체에서 단 하나의 인스턴스가 존재하도록 하기 위한 디자인 패턴이다. 특징은 아래와 같다.
특징
- 생성자 패턴에 속한다.
- 시스템 로깅, 앱 설정과 같은 것들을 관리할 때 용이하다.
- 한 인스턴스에서 관리하는 방식이다.
- 애플리케이션에서 전역적으로 접근할 수 있게한다.
- 1:n 관계를 가진다. 다수의 클라이언트가 하나의 인스턴스를 공유하여 접근한다.
중요한 포인트
중요한 것이 2가지 있다.
- 클래스 생성 시
constructor는private이다.
즉,
new키워드로 객체의 인스턴스를 생성하는 것을 방지한다. 대신 인스턴스에 접근할 때는static맴버 함수를 이용한다. 이렇게 되면, 전체 시스템에서 인스턴스를 단 하나만 가지는 클래스가 되는 것이다.
- 첫 인스턴스 생성 후 인스턴스를 생성할 수 없다.
new키워드를 사용하지 않고static멤버 함수를 사용하여 첫 인스턴스를 생성하고, 접근하는 방식이다.
예시 코드
class Singleton {
constructor() {
if (Singleton.instance) {
// 인스턴스가 생성된 상태에서 new 키워드로 또 생성하는 경우
return Singleton.instance;
}
// 여기서 this는 첫 인스턴스이고, Singleton클래스 자체의 instance라는 프로퍼티에 할당한다.
Singleton.instance = this;
// Singleton.instance가 가질 프로퍼티들이다.
this.version = "12.3.1";
this.config = "config";
}
static getInstance() {
if (!this.instance) {
// 최초 인스턴스 생성
// 클래스를 호출만 하면 constructor 내부에서 인스턴스와 Singleton.instance를 연결해준다.
// 즉, Singleton.instance === 첫 인스턴스
console.log("instance");
new Singleton();
}
// Singleton의 인스턴스가 있으면 그 인스턴스를 계속 반환한다.
return this.instance; // 정적 메소드에서 this는 클래스 자체를 가리킨다. 여기선 Singleton이 된다.
}
}
// new 키워드로 생성해보기
const s1 = new Singleton(); // 첫 인스턴스가 할당된다. (=== Singleton.instance)
const s2 = new Singleton(); // 처음 생성된 인스턴스와 같음
// 정적 메소드를 이용
const ss1 = Singleton.getInstance(); // 처음 생성된 인스턴스와 같음
const ss2 = Singleton.getInstance(); // 처음 생성된 인스턴스와 같음
console.log(s1 === s2); // true
console.log(s1 === ss2); // true