플라이급 패턴이란 메모리풀을 미리 형성하여 참조하는 개체를 처음 사용할 때 저장한 뒤에, 그 이후에 사용할 때에는 외부에서 불러오지 않고 저장해놓은 데이터를 사용하는 패턴
아파트 한채에 입주자의 목록을 정리한다고 생각해봅시다.
class Apartment {
let name = '';
const roomCount = 3;
const toiletCount = 2;
setName(name) {
this.name = name;
}
}
const apartment1 = new Apartment();
const apartment2 = new Apartment();
const apartment3 = new Apartment();
const apartment4 = new Apartment();
이렇게 생성했지만 roomCount
와 toiletCount
가 집마다 동일하다는것을 발견했습니다.
모든 집에 집주인 이름은 다를 수 있지만, 집의 구조나 방개수, 화장실 개수는 모두 동일한 상태입니다.
이런 경우 메모리를 아끼기 위해 다음과 같이 사용할 수 있습니다.
class Apartment {
let name = '';
Apartment.prototype.roomCount = 3;
Apartment.prototype.toiletCount = 2;
setName(name) {
this.name = name;
}
}
const apartment1 = new Apartment();
const apartment2 = new Apartment();
const apartment3 = new Apartment();
const apartment4 = new Apartment();
1번 집이 방의 벽을 부수고 2개의 방을 1개로 합쳤다면
const apartment1 = new Apartment();
const apartment2 = new Apartment();
apartment1.roomCount = 2;
console.log(apartment1.roomCount); // 2
console.log(apartment2.roomCount); // 3
프로토타입을 공유하지만 apartment1의 방 개수를 바꾸어도 apartment2와는 상관없기 때문에 roomCount를 각각 관리할 수 있습니다.
이와 같은 패턴을 플라이급 패턴
이라고 하고, 이는 싱글턴 패턴과 함께 사용하는 경우가 많습니다.
class Apartment {
static Apartment apartment;
let name = '';
let roomCount = 3;
let toiletCount = 2;
setName(name) {
this.name = name;
}
getInstance(){
if (!apartment) {
apartment = new Apartment();
}
return apartment;
}
}