CS/๋””์ž์ธ ํŒจํ„ด

[๋””์ž์ธ ํŒจํ„ด] ์ดํ„ฐ๋ ˆ์ดํ„ฐ ํŒจํ„ด(Iterator Pattern)๊ณผ ๋…ธ์ถœ๋ชจ๋“ˆ ํŒจํ„ด(revealing module pattern)

1eehyunji 2023. 8. 3. 18:52

์ดํ„ฐ๋ ˆ์ดํ„ฐ ํŒจํ„ด

์ดํ„ฐ๋ ˆ์ดํ„ฐ ํŒจํ„ด์€ ์ดํ„ฐ๋ ˆ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ปฌ๋ ‰์…˜์˜ ์š”์†Œ๋“ค์— ์ ‘๊ทผํ•˜๋Š” ๋””์ž์ธ ํŒจํ„ด์ด๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ˆœํšŒํ•  ์ˆ˜ ์žˆ๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ž๋ฃŒํ˜•์˜ ๊ตฌ์กฐ์™€ ์ƒ๊ด€์—†์ด ์ดํ„ฐ๋ ˆ์ดํ„ฐ๋ผ๋Š” ํ•˜๋‚˜์˜ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ˆœํšŒ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ์˜ ์ดํ„ฐ๋ ˆ์ดํ„ฐ ํŒจํ„ด

const mp = new Map()
mp.set('a',1)
mp.set('b',2)
mp.set('c',3)
const st = new Set()
st.add(1)
st.add(2)
st.add(3)

for (let a of mp) console.log(a)
for (let a of st) console.log(a)

/*
['a',1]
['b',2]
['c',3]
1
2
3
*/

๋‹ค๋ฅธ ์ž๋ฃŒ๊ตฌ์กฐ์ธ Set, Map์ž„์—๋„ ๋˜‘๊ฐ™์€ for a of b๋ผ๋Š” ์ดํ„ฐ๋ ˆ์ดํ„ฐ ํ”„๋กœํ† ์ฝœ์„ ์ˆœํšŒํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. 

 

๋…ธ์ถœ๋ชจ๋“ˆ ํŒจํ„ด

์ฆ‰์‹œ ์‹คํ–‰ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด private, public๊ณผ ๊ฐ™์€ ์ ‘๊ทผ ์ œ์–ด์ž๋ฅผ ๋งŒ๋“œ๋Š” ํŒจํ„ด์„ ๋งํ•œ๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๊ฒฝ์šฐ private๋‚˜ public ๊ฐ™์€ ์ ‘๊ทผ ์ œ์–ด์ž๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๊ณ  ์ „์—ญ ๋ฒ”์œ„์—์„œ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹คํ–‰๋œ๋‹ค.

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋…ธ์ถœ๋ชจ๋“ˆ ํŒจํ„ด์„ ํ†ตํ—ค์„œ ์ ‘๊ทผ ์ œ์–ด์ž๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ๋„ ํ•œ๋‹ค.

 

* ์ฆ‰์‹œ ์‹คํ–‰ ํ•จ์ˆ˜ : ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•˜์ž๋งˆ์ž ๋ฐ”๋กœ ์‹คํ–‰ํ•˜๋Š” ํ•จ์ˆ˜. ์ดˆ๊ธฐํ™” ์ฝ”๋“œ ๋“ฑ์—์„œ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค. ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•ด์„œ ์ฆ‰์‹œ ์‹คํ–‰ํ•จ์ˆ˜์˜ ๋ฆฌํ„ด๊ฐ’ ์ €์žฅ๋„ ๊ฐ€๋Šฅํ•˜๊ณ , ์ €์žฅํ•  ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜์ง€ ์•Š๊ณ  ๋ฐ”๋กœ ์ฆ‰์‹œ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.

์˜ˆ์‹œ)

(function square(x) {

        console.log(x*x);

})(2)

// 4

 

const pukuba = (() => {
    const a = 1
    const b = () => 2
    const public = {
        c : 2, 
        d : () => 3
    }
    return public
})()
console.log(pukuba)
console.log(pukuba.a)
// { c: 2, d: [Function: d] }
// undefined

a, b๋Š” ๋‹ค๋ฅธ ๋ชจ๋“ˆ์—์„  ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๋ณ€์ˆ˜๋‚˜ ํ•จ์ˆ˜์ด๊ณ , private ์ ‘๊ทผ ์ œ์–ด์ž๋ฅผ ๊ฐ€์ง„๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. 

c, d๋Š” ๋‹ค๋ฅธ ๋ชจ๋“ˆ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ณ€์ˆ˜๋‚˜ ํ•จ์ˆ˜์ด๊ณ , public ์ ‘๊ทผ ์ œ์–ด์ž๋ฅผ ๊ฐ€์ง„๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

์ฐธ๊ณ )

์ ‘๊ทผ ์ œ์–ด์ž

public : ํด๋ž˜์Šค์—์„œ ์ •์˜๋œ ํ•จ์ˆ˜์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋ฉฐ ์ž์‹ ํด๋ž˜์Šค์™€ ์™ธ๋ถ€ ํด๋ž˜์Šค์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ๋ฒ”์œ„

protected : ํด๋ž˜์Šค์—์„œ ์ •์˜๋œ ํ•จ์ˆ˜์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋ฉฐ ์ž์‹ ํด๋ž˜์Šค๋Š” ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ์™ธ๋ถ€ ํด๋ž˜์Šค์—์„  ์ ‘๊ทผ ๋ถˆ๊ฐ€๋Šฅํ•œ ๋ฒ”์œ„

private : ํด๋ž˜์Šค์—์„œ ์ •์˜๋œ ํ•จ์ˆ˜์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ์ž์‹ ํด๋ž˜์Šค์™€ ์™ธ๋ถ€ ํด๋ž˜์Šค์—์„  ์ ‘๊ทผ ๋ถˆ๊ฐ€๋Šฅํ•œ ๋ฒ”์œ„