Skip to content

javascript_in_depth_12

paul edited this page Apr 20, 2017 · 1 revision

๋””์ž์ธ ํŒจํ„ด ์‹ค์šฉ - Self-invoking constructor ํŒจํ„ด

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” new ํ‚ค์›Œ๋“œ๋ฅผ ์ƒ๋žผํ•˜๋”๋ผ๋„ ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋ฅผ ์ผ๋ฐ˜ ํ•จ์ˆ˜์ธ ๊ฒƒ์ฒ˜๋Ÿผ ํ˜ธ์ถœํ•˜๊ณ  ์‹คํ–‰ํ•˜๋ฏ€๋กœ ์˜ค๋ฅ˜๋Š” ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ณ  ์˜ค๋™์ž‘๋งŒ ํ•˜๊ฒŒ ๋œ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ ์ž‘์€ ์˜คํƒ€๋ผ์„œ ์†Œ์Šค๊ฐ€ ๋งŽ์•„์ง€๋ฉด ์˜ค๋ฅ˜๋ฅผ ์ฐพ์•„๋‚ด๋Š” ๊ฒƒ์ด ํž˜๋“ค ์ˆ˜๋„ ์žˆ๋‹ค. Self-invoking constructor ํŒจํ„ด์€ ์ด๋Ÿฌํ•œ ์‹ค์ˆ˜๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ์ƒ์„ฑ์ž๋ฅผ ๊ทธ๋ƒฅ ํ•จ์ˆ˜๋กœ ํ˜ธ์ถœ ํ•  ๋•Œ ์Šค์Šค๋กœ new๋ฅผ ๋ถ™์—ฌ ๋‹ค์‹œ ํ˜ธ์ถœํ•˜๋Š” ํŒจํ„ด์ด๋‹ค.

ํ™œ์šฉ

ECMAScript 6์—์„œ class ํ‚ค์›Œ๋“œ๊ฐ€ ๋ณ„๋„๋กœ ๋‚˜์˜ค๋ฉด์„œ function ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐ์ฒด์ง€ํ–ฅ์„ ๊ฐœ๋ฐœํ•˜๋Š” ์ƒํ™ฉ์€ ์ ์  ์ค„์–ด๋“ค๊ณ  ์žˆ์ง€๋งŒ, ์•„์ง ECMAScript 6์˜ class ํ‚ค์›Œ๋“œ๋ฅผ ๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €๊ฐ€ 100% ์ง€์›ํ•˜์ง€๋Š” ์•Š๊ณ  ์žˆ๋‹ค.๋”ฐ๋ผ์„œ function ์œผ๋กœ ๊ฐ์ฒด์ง€ํ–ฅ์„ ๊ตฌํ˜„ํ•  ๋•Œ ๋ฐฉ์–ด์ ์œผ๋กœ ์ด ํŒจํ„ด์„ ์ด์šฉํ•˜์—ฌ ์ƒ์„ฑ์ž ํ˜ธ์ถœ ์‹ค์ˆ˜๋ฅผ ์ฒ˜๋ฆฌํ•˜๋ฉด ์ข‹๋‹ค. ์ด๋Š” function ์ƒ์„ฑ์ž์™€ ๊ด€๋ จ๋œ ํŒจํ„ด์œผ๋กœ ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•  ๋•Œ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ์ œ

// Self-invoking constructor ํŒจํ„ด์˜ ๊ตฌํ˜„
(function () {
    function Employee(name, manMonth) {
        if (!(this instanceof Employee)) {
            return new Employee(name, manMonth);
        }
        this.name = name;
        this.manMonth = manMonth;
    }

    var unikys = Employee("Unikys", 1),
        world = new Employee("World", 2);
        
    console.log(unikys);
    console.log(world);
}());

Clone this wiki locally