#1. SingleTon 패턴
1. 객체지향 디자인 패턴
1) 객체지향의 디자인이란?
- 객체지향에서의 디자인은 설계를 뜻한다.
- 코드가 얼마나 효율적이고 견고하게 잘 만들어졌냐에 대한 설계와 관련된 얘기이다.
2) 객체지향 디자인 패턴
- 프로그램 소스를 작성하는데 있어 이미 검증된 작성 패턴들을 말한다.
- 사람들의 경험을 바탕으로 쉽고, 효율적으로 이론화 되었다.
- 팩토리, 옵저버, 모듈, 프로토타입, 서비스, 싱글톤, mvc, mvvc 등의 종류가 있다.
- 객체지향 디자인 패턴은 약 30가지 정도 되며, 개발자로서 알고 있어야할 객체지향 디자인 패턴은 10가지 정도가 된다.
- 자바스크립트는 객체지향이라는 개념을 도입한지 얼마 안되었기 때문에 디자인 패턴에 대한 언급이 상대적으로 낮다.
- 자바스크립트에서는 3~4가지정도 언급하며, 객체지향을 잘 설명할 수 있는 언어는 자바이다.
2. SingleTon 패턴
1) SingleTon 패턴이란?
- 객체 인스턴스가 오직 1개만 생성되는 클래스 작성 패턴이다.
- 소프트웨어 디자인 패턴에서 SigleTon pattern을 따르는 클래스는 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이고, 최초 생성 이후에 호출된 생성자는 최초의 생성자가 생성한 객체를 리턴한다.
- 주로 공통된 객체를 여러개 생성해서 사용하는 DBCP(DataBase Connection Pool)와 같은 상황에서 많이 사용된다.
- 인스턴스가 한 개만 존재하는 것을 보장하고 싶은 경우 싱글톤 패턴을 사용한다.
2) SingleTon 패턴을 사용하는 이유
- 메모리 측면
- 최초 한번의 new 연산자를 통해서 고정된 메모리 영역을 사용하기 때문에 추 후 해당 객체에 접근할 때 메모리 낭비를 방지할 수 있다.
- 이미 생성된 인스턴스를 활용하니 속도 측면에서도 이점이 있다.
- 데이터 공유
- 싱글톤 인스턴스가 전역으로 사용되는 인스턴스 이기 때문에 다른 클래스의 인스턴스들이 접근하여 사용 할 수 있다.
- 데이터 공유가 쉽다.
3. SingleTon 클래스
1) 싱글톤 클래스 작성 예시
class Foo {
static current = null;
static getInstance() {
if (Foo.current === null) {
Foo.current = new Foo();
}
return Foo.current;
}
// ... 이 클래스의 일반 생성자와 메서드들을 정의
}
- getIstance를 호출 후 currnet가 null일 경우 자기 스스로의 객체를 할당한다. (호출하면 더이상 null이 아니게 된다)
- 또 호출하면 더이상 null이 아니므로 할당된 객체를 다시 리턴한다. (if문을 건너뛴다)
- 즉, 하나의 객체를 여기저기 리턴한다.
2) 싱글톤 객체 사용
f1 = Foo.getInstance();
f2 = Foo.getInstance();
f3 = Foo.getInstance();
- 위의 코드에서 f1, f2, f3는 모두 Foo.current라는 하나의 객체를 공유해서 참조한다.
3) 사용 예시
- 싱글톤 클래스
class Calc {
// 싱글톤 객체
static current = null;
static getInstance() {
if(Calc.current === null) {
Calc.current = new Calc();
}
return Calc.current;
}
plus(x, y) {
return x + y;
}
minus(x, y) {
return x - y;
}
times(x, y) {
return x * y;
}
div(x, y) {
return x / y;
}
};
- 객체 사용
c1 = Calc.getInstance();
console.log(c1.plus(10,20)); // 30
c2 = Calc.getInstance();
console.log(c2.minus(10,20)); // -10
// 메서드 체인으로 사용
console.log(Calc.getInstance().times(10,20)); // 200
console.log(Calc.getInstance().div(10,20)); // 0.5
'국비수업 > Node.js' 카테고리의 다른 글
[Node.js] 객체지향 데이터베이스 프로그래밍 (Mybatis) (0) | 2022.07.07 |
---|---|
[Node.js] MySQL 연동하기 (0) | 2022.07.06 |
[Node.js/express] File Upload (0) | 2022.07.04 |
[Node.js/express] 메일보내기 (0) | 2022.07.01 |
[Node.js/express] Cookie / Session (0) | 2022.06.30 |