ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

javascript

javascript singleton pattern (์‹ฑ๊ธ€ํ†คํŒจํ„ด)

๋Œ•๋Œ•์ด๋ฐœ๐Ÿพ 2018. 7. 23. 14:19



๋งŽ์€ ๋””์ž์ธ ํŒจํ„ด๋“ค์ด ์žˆ์ง€๋งŒ ๊ทธ์ค‘์— ๊ต‰์žฅํžˆ ์ž์ฃผ ์“ฐ์ด๊ณ  ์“ฐ๋ฉด ํŽธ๋ฆฌํ•œ SingletonํŒจํ„ด์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์‹ฑ๊ธ€ํ†คํŒจํ„ด์€ ๋ณดํ†ต ํŠน์ • ๊ฐ์ฒด์˜ ์ •๋ณด๋ฅผ ์—ฌ๋Ÿฌ๊ตฐ๋ฐ์—์„œ ์‚ฌ์šฉํ•  ์ผ์ด ๋งŽ์„ ๋•Œ ๊ทธ ๊ฐ์ฒด(์ธ์Šคํ„ด์Šค)๋ฅผ ์‰ฝ๊ฒŒ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ ๋””์ž์ธ ํŒจํ„ด์ž…๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ๋“ค๋ฉด ์‚ฌ์šฉ์ž์˜ ๋กœ๊ทธ์ธ์ •๋ณด๋ฅผ ๊ณ„์†ํ•ด์„œ ์‚ฌ์šฉํ•ด์•ผํ•  ๋•Œ ์ด๋Ÿฌํ•œ ํŒจํ„ด์ด ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ œ๊ฐ€ ์‚ฌ์šฉํ•œ ์˜ˆ์‹œ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
var SingletonClass = (function() {
    var mName,mNick,mId,mPwd,mIsLogin,instance;
    function SingletonClass() { }
    //setter
    this.__defineSetter__("mName",function(val){this.mName=val;});
    this.__defineSetter__("mNick",function(val){this.mNick=val;});
    this.__defineSetter__("mId",function(val){this.mId = val;});
    this.__defineSetter__("mPwd",function(val){this.mPwd = val;});
    this.__defineSetter__("mIsLogin",function(val){this.mIsLogin = val;});
    //getter    
    this.__defineGetter__("mName",function(){return mName;});
    this.__defineGetter__("mNick",function(){return mNick;});
    this.__defineGetter__("mId",function(){return mId;});
    this.__defineGetter__("mPwd",function(){return mPwd;});
    this.__defineGetter__("mIsLogin",function(){return mIsLogin;});
    return {
        getInstance: function() {
            if(instance == undefined){
            instance = new SingletonClass();
            instance.constructor = null;
            }
            return instance;
        }
    };
})();
cs


์ €๊ฐ™์€ ๊ฒฝ์šฐ๋Š” singleton ํ•จ์ˆ˜ ์•ˆ์— getter setter ํ•จ์ˆ˜๋ฅผ ๋„ฃ์–ด์„œ ํ•ด๋‹น ๊ฐ์ฒด(์ธ์Šคํ„ด์Šค) ์ •๋ณด๋ฅผ ๊ทธ๋•Œ๊ทธ๋•Œ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋Š” ํ˜•ํƒœ๋กœ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์ธ ๊ฐœ๋…์€ ์‹ฑ๊ธ€ํ†คํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ์ด๋ฏธ ๋งŒ๋“ค์–ด์ง„ ๊ฐ์ฒด(์ธ์Šคํ„ด์Šค)๊ฐ€ ์žˆ๋‹ค๋ฉด ๋™์ž‘ํ•˜์ง€ ์•Š๊ณ , ๋งŒ๋“ค์–ด์ง„ ์ด๋ ฅ์ด ์—†์„ ๋•Œ

์œ„์˜ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด returnํ•˜๋Š” ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์‹ฑ๊ธ€ํ†คํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด๋†“์œผ๋ฉด ํ˜ธ์ถœ์„ ์›ํ•˜๋Š” ๊ณณ์—์„œ ์‚ฌ์šฉ์ž ๋ชจ๋“ˆํ˜•ํƒœ๋กœ ์†์‰ฝ๊ฒŒ ์ œ์–ด๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ๋“ค๋ฉด



1
2
3
4
5
6
7
8
9
//singleton
var member = require('./singleton');
 
app.get('/logout',function(req,res){
    member.mId=null; member.mPwd = null; member.mName = null; member.mNick = null;
    member.mIsLogin = false;
    res.render('index');
});
cs


๋งจ ์œ„์™€๊ฐ™์ด ์‚ฌ์šฉ์ž ๋ชจ๋“ˆํ˜•ํƒœ๋กœ ์„ ์–ธ์„ ํ•˜์—ฌ member๋ผ๋Š” ๋ณ€์ˆ˜์— singletonํ•จ์ˆ˜์—์„œ ๋งŒ๋“ค์–ด์ง„ ๊ฐ์ฒด์ •๋ณด๋ฅผ ๋‹ด์Šต๋‹ˆ๋‹ค.

๊ทธ๋ ‡๊ฒŒ๋˜๋ฉด singletonํ•จ์ˆ˜์—์„œ ์„ ์–ธํ–ˆ๋˜ ๋ณ€์ˆ˜์ •๋ณด๋“ค์„ getter, setterํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ œ์–ด๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์œ„์˜ ์˜ˆ๋Š” logout์ด๋ผ๋Š” ๋ผ์šฐํ„ฐ๋ฅผ ๋“ค์–ด์™”์„ ๋•Œ member์˜ ๊ฐ์ฒด์ •๋ณด๋ฅผ ์ดˆ๊ธฐํ™”์‹œํ‚ค๋Š” ์˜ˆ์ œ์ž…๋‹ˆ๋‹ค. member์˜ ์ •๋ณด๋“ค์„ setter๋ฅผ ํ†ตํ•ด ์›ํ•˜๋Š” ๊ฐ’์œผ๋กœ ๋ฐ”๊พธ๋Š” ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค. ์ฐธ๊ณ ๋กœ getter๋Š” ๋“ฑํ˜ธ๋ฅผ ๋บ€ ํ˜•ํƒœ๋กœ ์„ ์–ธํ•˜๋ฉด member์ธ์Šคํ„ด์Šค์˜ ํŠน์ • ๋ณ€์ˆ˜์ •๋ณด์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

-- member.mId = 'abcd' ;   =>setter

-- var id = member.mId;    =>getter


๋Œ“๊ธ€
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
๋งํฌ
ยซ   2025/02   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
๊ธ€ ๋ณด๊ด€ํ•จ