0. 개요
기존 Model 코드에서는 다음과 같은 패턴으로 코드를 짰다.
class CocktailModel {
static findCocktail = async ({ name }) => {
const findCocktail = await Cocktail.findOne({ name: name });
return findCocktail;
};
static getIncludedCocktail = async (query) => {
const cocktailList = await Cocktail.find({
name: { $regex: query },
});
return cocktailList;
};
static modify = async (filter, cocktail) => {
const { originName, user } = filter;
const option = { returnOriginal: false };
const modifiedCocktail = await Cocktail.findOneAndUpdate(
{
name: originName,
userId: user,
},
cocktail,
option
);
return modifiedCocktail;
};
}
그런데! 새로 알게된 패턴! 새로운 팀 백엔드 분은 이런 패턴을 사용하셨다!! 궁금하다 😯🤔
싱글톤 패턴은 어떤 것인지 공부해보자!
const User = {
addUser: async (newUserData: IUserInput) => {
const user = await Users.create(newUserData);
return user;
},
findByEmail: async (email: string) => {
const user = await Users.findOne({ where: { email: email } });
return user;
},
}
1. 싱글톤 패턴
하나의 클래스에 오직 하나의 인스턴스만 가지는 패턴
즉, 특정 클래스의 인스턴스는 오직 하나만 생성될 수 있고, 한 클래스에서 처음 객체를 생성하면 다음 새로 생성한 객체도 같은 값을 return 받는다.
이 패턴은 보통 데이터베이스 연결 모듈에 많이 사용한다.
또한 인스턴스 한 개로 여러 요청을 처리할 수 있다면 메모리상에서 효율적이며 객체의 추가적인 생성이 없으므로 성능이 빠르다.
- 장점: 하나의 인스턴스를 다른 모듈들이 공유하면서 사용, 인스턴스 생성 비용 줄어든다.
- 단점: 의존성 높아진다.
2. 단점
- TDD에서 단위 테스트를 할 때 불편하다.
단위 테스트는 함수 별로 독립적으로 해야하는데 싱글톤은 각 테스트마다 '독립적인' 인스턴스를 만들기가 어렵다.
- 의존성
편리한 대신 모듈 간 결합을 강하게 만들 수 있다.
반응형
'Computer Science > CS' 카테고리의 다른 글
[알고리즘] 그래프 탐색 알고리즘 DFS / BFS (0) | 2022.08.03 |
---|---|
[자료구조] 그래프(Graph) (0) | 2022.08.01 |
[자료구조] 트리 (Tree) (0) | 2022.07.29 |
[자료구조] 연결 리스트 (Linked list) (0) | 2022.07.27 |
댓글