๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๋…์„œ ๋ชฉ๋ก/๋ชจ๋”ฅ๋‹ค Modern JS Deep Dive

[๋ชจ๋”ฅ๋‹ค] 25์žฅ ํด๋ž˜์Šค (1)

728x90

๐Ÿ”ฎ 25.1 ํด๋ž˜์Šค๋Š” ํ”„๋กœํ† ํƒ€์ž…์˜ ๋ฌธ๋ฒ•์  ์„คํƒ•์ธ๊ฐ€?

 

ํด๋ž˜์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค๊ณ  ํ•ด์„œ, ๊ธฐ์กด์˜ ํ”„๋กœํ† ํƒ€์ž… ๊ธฐ๋ฐ˜ ๊ฐ์ฒด์ง€ํ–ฅ ๋ชจ๋ธ์„ ํ์ง€ํ•˜๊ณ  ์ƒˆ๋กญ๊ฒŒ ํด๋ž˜์Šค ๊ธฐ๋ฐ˜ ๋ชจ๋ธ์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹˜. 

์‚ฌ์‹ค ํด๋ž˜์Šค๋Š” ํ•จ์ˆ˜์ด๋ฉฐ, 

๊ธฐ์กด ํ”„๋กœํ† ํƒ€์ž… ๊ธฐ๋ฐ˜ ํŒจํ„ด์„ ํด๋ž˜์Šค ๊ธฐ๋ฐ˜ ํŒจํ„ด์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๋ฌธ๋ฒ•์  ์„คํƒ•์ด๋ผ๊ณ  ๋ณผ ์ˆ˜๋„ ์žˆ๋‹ค. 

 

๋‹จ, ํด๋ž˜์Šค์™€ ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋Š” ๋ชจ๋‘ ํ”„๋กœํ† ํƒ€์ž… ๊ธฐ๋ฐ˜์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜์ง€๋งŒ, 

๋™์ผํ•˜๊ฒŒ ๋™์ž‘ํ•˜์ง€๋Š” ์•Š๋Š”๋‹ค. 

ํด๋ž˜์Šค๋Š” ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋ณด๋‹ค ์—„๊ฒฉํ•˜๋ฉฐ, ์ƒ์„ฑ์ž ํ•จ์ˆ˜์—์„œ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š” ๊ธฐ๋Šฅ๋„ ์ œ๊ณตํ•œ๋‹ค. 

 

ํด๋ž˜์Šค ์ƒ์„ฑ์ž ํ•จ์ˆ˜
new ์—ฐ์‚ฐ์ž ์—†์ด ํ˜ธ์ถœํ•˜๋ฉด ์—๋Ÿฌ๋‚จ.  new ์—ฐ์‚ฐ์ž ์—†์œผ๋ฉด -> ์ผ๋ฐ˜ ํ•จ์ˆ˜๋กœ ํ˜ธ์ถœ
์ƒ์†์„ ์ง€์›ํ•˜๋Š” extends ์™€ super ํ‚ค์›Œ๋“œ ์ง€์› ์ง€์› ์•ˆํ•จ. 
ํ˜ธ์ด์ŠคํŒ…์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ์ฒ˜๋Ÿผ ๋™์ž‘ ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ -> ํ•จ์ˆ˜ ํ˜ธ์ด์ŠคํŒ…, 
ํ•จ์ˆ˜ ํ‘œํ˜„์‹ -> ๋ณ€์ˆ˜ ํ˜ธ์ด์ŠคํŒ… ๋ฐœ์ƒ
์•”๋ฌต์ ์œผ๋กœ strict mode ๊ฐ€ ์‹คํ–‰๋จ.  ์ง€์ • ์•ˆ๋จ. 
constructor, ํ”„๋กœํ† ํƒ€์ž… ๋ฉ”์„œ๋“œ, ์ •์  ๋ฉ”์„œ๋“œ ๋ชจ๋‘ -> [[Enumerable]] ๊ฐ’์ด false => ์—ด๊ฑฐ๋˜์ง€ ์•Š์Œ.   

 

๐Ÿ‘‰ ๋‹จ์ˆœํ•œ ๋ฌธ๋ฒ•์  ์„คํƒ•์ด๋ผ๊ณ  ๋ณด๊ธฐ ๋ณด๋‹จ ์ƒˆ๋กœ์šด ๊ฐ์ฒด ์ƒ์„ฑ ๋ฉ”์ปค๋‹ˆ์ฆ˜์œผ๋กœ ๋ณด๋Š”๊ฒŒ ํ•ฉ๋‹น

 

 

๐Ÿ”ฎ 25.2 ํด๋ž˜์Šค ์ •์˜

 

class ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ •์˜ํ•œ๋‹ค. 

 

ํ•จ์ˆ˜์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํ‘œํ˜„์‹์œผ๋กœ ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. 

์ด ๋•Œ ์ด๋ฆ„์„ ๊ฐ€์งˆ ์ˆ˜๋„, ์•ˆ๊ฐ€์งˆ ์ˆ˜๋„ ์žˆ๋‹ค .

const Person = class {}; //์ด๋ฆ„ ์—†๋Š”์•  

const Person = class MyClass {}; // ์ด๋ฆ„ ์žˆ๋Š” ์• 

 

ํด๋ž˜์Šค๋ฅผ ํ‘œํ˜„์‹์œผ๋กœ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค?

=> ํด๋ž˜์Šค๊ฐ€ ๊ฐ’์œผ๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋Š” ์ผ๊ธ‰ ๊ฐ์ฒด ๋ผ๋Š” ๊ฒƒ. 

 

<์ผ๊ธ‰ ๊ฐ์ฒด๋กœ์„œ ํด๋ž˜์Šค์˜ ํŠน์ง•>

- ๋ฌด๋ช…์˜ ๋ฆฌํ„ฐ๋Ÿด๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. = ๋Ÿฐํƒ€์ž…์— ์ƒ์„ฑ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

- ๋ณ€์ˆ˜๋‚˜ ์ž๋ฃŒ๊ตฌ์กฐ์— ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค. 

- ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜์— ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค. 

- ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

ํด๋ž˜์Šค์˜ ๋ชธ์ฒด์—๋Š” 0๊ฐœ ์ด์ƒ์˜ ๋ฉ”์„œ๋“œ๋งŒ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค. 

๋ฉ”์„œ๋“œ์˜ ์ข…๋ฅ˜ : construnctor(์ƒ์„ฑ์ž), ํ”„๋กœํ† ํƒ€์ž… ๋ฉ”์„œ๋“œ, ์ •์  ๋ฉ”์„œ๋“œ

 

class Person {
    constructor(name) {
        this.name = name;
    }

    sayHi() {
        console.log(`Hi my name is ${this.name}`);
    }

    static sayHello() {
        console.log('Hello!')
    }
}

const me = new Person('Lee');

console.log(me.name)

me.sayHi();

Person.sayHello()

 

์ƒ์„ฑ์ž ํ•จ์ˆ˜์™€ ํด๋ž˜์Šค ์ •์˜ ๋ฐฉ์‹ ๋น„๊ต

 

 

 

 

 

๐Ÿ”ฎ 25.3 ํด๋ž˜์Šค ํ˜ธ์ด์ŠคํŒ…

 

ํด๋ž˜์Šค๋Š” ํ•จ์ˆ˜๋กœ ํ‰๊ฐ€๋จ. 

ํด๋ž˜์Šค ์„ ์–ธ๋ฌธ์œผ๋กœ ์ •์˜ํ•œ ํด๋ž˜์Šค๋Š” ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ์ฒ˜๋Ÿผ ๋Ÿฐํƒ€์ž„ ์ด์ „์— ๋จผ์ € ํ‰๊ฐ€๋˜์–ด ํ•จ์ˆ˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. 

์ด๋•Œ ํด๋ž˜์Šค๊ฐ€ ํ‰๊ฐ€๋˜์–ด ์ƒ์„ฑ๋œ ํ•จ์ˆ˜ ๊ฐ์ฒด๋Š” ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋กœ์„œ

ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜, ์ฆ‰ constructor ์ด๋‹ค. 

๋‹จ, ํด๋ž˜์Šค๋Š” ํด๋ž˜์Šค ์ •์˜ ์ด์ „์— ์ฐธ์กฐํ•  ์ˆ˜ ์—†๋‹ค. 

 

ํด๋ž˜์Šค ์„ ์–ธ๋ฌธ๋„ ํ˜ธ์ด์ŠคํŒ…์ด ๋ฐœ์ƒํ•œ๋‹ค. 

๋‹จ, let, const ํ‚ค์›Œ๋“œ๋กœ ์„ ์–ธํ•œ ๋ณ€์ˆ˜์ฒ˜๋Ÿผ ํ˜ธ์ด์ŠคํŒ… ๋œ๋‹ค. 

 

var, let, const, function, function*, class ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ ์–ธ๋œ ๋ชจ๋“  ์‹๋ณ„์ž๋Š” ํ˜ธ์ด์ŠคํŒ… ๋œ๋‹ค. 

 

 

 

 

๐Ÿ”ฎ 25.4 ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ

 

ํด๋ž˜์Šค๋Š” ์ƒ์„ฑ์ž ํ•จ์ˆ˜์ด๋ฉฐ, new ์—ฐ์‚ฐ์ž์™€ ํ•จ๊ป˜ ํ˜ธ์ถœ๋˜์–ด ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•จ. 

class Person {}

const me = new Person('Lee');
console.log(me) // Person{}

 

ํด๋ž˜์Šค๋Š” ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์œ ์ผํ•œ ์กด์žฌ ์ด์œ . 

๋ฐ˜๋“œ์‹œ new ์—ฐ์‚ฐ์ž์™€ ํ•จ๊ป˜ ํ˜ธ์ถœํ•ด์•ผํ•จ. 

 

์ธ์Šคํ„ด์Šค ์ƒ์„ฑ์‹œ -> ์‹๋ณ„์ž ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , ๊ธฐ๋ช… ํด๋ž˜์Šค ํ‘œํ˜„์‹์˜ ํด๋ž˜์Šค ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋‚จ. 

: ํด๋ž˜์Šค ํ‘œํ˜„์‹์—์„œ ์‚ฌ์šฉํ•œ ํด๋ž˜์Šค ์ด๋ฆ„์€ ์™ธ๋ถ€ ์ฝ”๋“œ์—์„œ ์ ‘๊ทผ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ. 

 

 

 

 

 

๐Ÿ”ฎ 25.5 ๋ฉ”์„œ๋“œ

 

25.5.1 construnctor

constructor ๋Š” ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ดˆ๊ธฐํ™”ํ•˜๊ธฐ ์œ„ํ•œ ํŠน์ˆ˜ํ•œ ๋ฉ”์„œ๋“œ. 

์–˜๋Š” ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค. 

 

๋ชจ๋“  ํ•จ์ˆ˜ ๊ฐ์ฒด๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” prototype ํ”„๋กœํผํ‹ฐ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ํ”„๋กœํ† ํƒ€์ž… ๊ฐ์ฒด์˜ constructor ํ”„๋กœํผํ‹ฐ๋Š” ํด๋ž˜์Šค ์ž์‹ ์„ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋‹ค. 

=> ํด๋ž˜์Šค๊ฐ€ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋ผ๋Š” ๊ฒƒ์„ ์˜๋ฏธ. 

new ์—ฐ์‚ฐ์ž์™€ ํ•จ๊ป˜ ํด๋ž˜์Šค๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ํด๋ž˜์Šค๋Š” ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•จ. 

 

๊ทผ๋ฐ ์–ด๋””์—๋„ constructor ๋ฉ”์„œ๋“œ๊ฐ€ ๋ณด์ด์ง€ ์•Š์Œ. 

์ด๋Š” ํด๋ž˜์Šค ๋ชธ์ฒด์— ์ •์˜ํ•œ constructor ๊ฐ€ ๋‹จ์ˆœํ•œ ๋ฉ”์„œ๋“œ๊ฐ€ ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์„ ์˜๋ฏธ. 

 

constructor ๋Š” ๋ฉ”์„œ๋“œ๋กœ ํ•ด์„๋˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ, 

ํด๋ž˜์Šค๊ฐ€ ํ‰๊ฐ€๋˜์–ด ์ƒ์„ฑํ•œ ํ•จ์ˆ˜ ๊ฐ์ฒด ์ฝ”๋“œ์˜ ์ผ๋ถ€๊ฐ€ ๋จ. 

ํด๋ž˜์Šค ์ •์˜๊ฐ€ ํ‰๊ฐ€๋˜๋ฉด, constructor์˜ ๊ธฐ์ˆ ๋œ ๋™์ž‘์„ ํ•˜๋Š” ํ•จ์ˆ˜ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.

 

constuctor ๋Š” ์ƒ์„ฑ์ž ํ•จ์ˆ˜์™€ ์œ ์‚ฌํ•˜์ง€๋งŒ ์ฐจ์ด์ ์ด ์žˆ์Œ. 

- ํด๋ž˜์Šค ๋‚ด์— ์ตœ๋Œ€ 1๊ฐœ๋งŒ ์กด์žฌํ•  ์ˆ˜ ์žˆ์Œ .

- ์ƒ๋žตํ•  ์ˆ˜ ์žˆ๋‹ค. ์ƒ๋žตํ•˜๋ฉด ๋นˆ constructor ๊ฐ€ ์•”๋ฌต์ ์œผ๋กœ ์ •์˜์ฃ”. 

- ํ”„๋กœํผํ‹ฐ๊ฐ€ ์ถ”๊ฐ€๋˜์–ด ์ดˆ๊ธฐํ™”๋œ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋ ค๋ฉด constructor ๋‚ด๋ถ€์—์„œ this ์— ์ธ์Šคํ„ด์Šค ํ”„๋กœํผํ‹ฐ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

class Person {
    constructor(name,address) {
        this.name = name;
        this.address = "Seoul"
    }
    }

 

 

const me = new Person("Lee", "Seoul);

 

์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ๋•Œ ์ดˆ๊ธฐ๊ฐ’์„ ์ „๋‹ฌํ•œ๋‹ค. 

์ธ์Šคํ„ดํŠธ๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋ ค๋ฉด constructor ๋ฅผ ์ƒ๋žตํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค. 

 

constructor ๋Š” ๋ณ„๋„์˜ ๋ฐ˜ํ™˜๋ฌธ์„ ๊ฐ–์ง€ ์•Š์•„์•ผํ•จ. 

=> new ์—ฐ์‚ฐ์ž์™€ ํ•จ๊ป˜ ํด๋ž˜์Šค๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด, ์ƒ์„ฑ์ž ํ•จ์ˆ˜์™€ ๋™์ผํ•˜๊ฒŒ

์•”๋ฌต์ ์œผ๋กœ this, ์ฆ‰, ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•จ. 

 

(this ์™ธ์— ๋‹ค๋ฅธ ๊ฐ’์„ ๋ช…์‹œ์ ์œผ๋กœ ์ž…๋ ฅํ•˜๋ฉด ๋ฌด์‹œ๋จ, ๋‹ค๋ฅธ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉด ์ธ์Šคํ„ด์Šค๊ฐ€ ๋ฐ˜ํ™˜ ๋ชป๋จ. ๊ฐ์ฒด๊ฐ€ ๋ฐ˜ํ™˜๋จ.)

 

 

 

 

25.5.2 ํ”„๋กœํ† ํƒ€์ž… ๋ฉ”์„œ๋“œ

 

์ƒ์„ฑ์ž ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ, ๋ช…์‹œ์ ์œผ๋กœ ํ”„๋กœํ† ํƒ€์ž…์— ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผํ•œ๋‹ค. 

ํ•˜์ง€๋งŒ ํด๋ž˜์Šค ๋ชธ์ฒด์— ์ •์˜ํ•œ ๋ฉ”์„œ๋“œ๋Š”, ํด๋ž˜์Šค์˜ prototype ํ”„๋กœํผํ‹ฐ์— ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์•„๋„ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ”„๋กœํ† ํƒ€์ž… ๋ฉ”์„œ๋“œ๊ฐ€ ๋จ. 

class Person {
    constructor(name) {
        this.name = name;
        this.address = "Seoul"
    }

    sayHi() {
        console.log(`Hi my name is ${this.name}`);
    }
 }

 

์ธ์ˆ˜๋กœ ๋ฐ›์ง€ ์•Š์•„๊ณ  this.name ์„ ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

์ƒ์„ฑ์ž ํ•จ์ˆ˜์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํด๋ž˜์Šค๊ฐ€ ์ƒ์„ฑํ•œ ์ธ์Šคํ„ด์Šค๋Š” ํ”„๋กœํ† ํƒ€์ž… ์ฒด์ธ์˜ ์ผ์›์ด ๋œ๋‹ค. 

 

=> ํด๋ž˜์Šค ๋ชธ์ฒด์—์„œ ์ •์˜ํ•œ ๋ฉ”์„œ๋“œ : ์ธ์Šคํ„ดํŠธ์˜ ํ”„๋กœํ† ํƒ€์ž…์— ์กด์žฌํ•˜๋Š” ํ”„๋กœํ† ํƒ€์ž… ๋ฉ”์„œ๋“œ๊ฐ€ ๋จ. 

 

ํ”„๋กœํ† ํƒ€์ž… ์ฒด์ธ์€

๊ธฐ์กด์˜ ๋ชจ๋“  ๊ฐ์ฒด ์ƒ์„ฑ ๋ฐฉ์‹ (๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด, ์ƒ์„ฑ์ž ํ•จ์ˆ˜, Object.create) ๋ฟ ์•„๋‹ˆ๋ผ 

ํด๋ž˜์Šค์— ์˜ํ•ด ์ƒ์„ฑ๋œ ์ธ์Šคํ„ด์Šค์—๋„ ๋™์ผํ•˜๊ฒŒ ์ ์šฉ๋จ. 

์ƒ์„ฑ์ž ํ•จ์ˆ˜์˜ ์—ญํ• ์„ ํด๋ž˜์Šค๊ฐ€ ํ•  ๋ฟ. 

 

=> ํด๋ž˜์Šค๋Š” ์ƒ์„ฑ์ž ํ•จ์ˆ˜์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํ”„๋กœํ† ํƒ€์ž… ๊ธฐ๋ฐ˜์˜ ๊ฐ์ฒด ์ƒ์„ฑ ๋ฉ”์ปค๋‹ˆ์ฆ˜ ์ž„. 

 

 

 

 

25.5.3 ์ •์  ๋ฉ”์„œ๋“œ

 

์ •์  ๋ฉ”์„œ๋“œ๋Š” ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š์•„๋„ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ๋งํ•จ. 

 

์ƒ์„ฑ์ž ํ•จ์ˆ˜์˜ ๊ฒฝ์šฐ -> ์ƒ์„ฑ์ž ํ•จ์ˆ˜์— ๋ช…์‹œ์ ์œผ๋กœ ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผํ•จ. 

 

ํด๋ž˜์Šค์—์„œ๋Š” ๋ฉ”์„œ๋“œ์— static ํ‚ค์›Œ๋“œ๋ฅผ ๋ถ™์ด๋ฉด ์ •์  ๋ฉ”์„œ๋“œ(ํด๋ž˜์Šค ๋ฉ”์„œ๋“œ) ๊ฐ€ ๋จ. 

 

class Person {
    static sayHello() {
        console.log('Hello!')
    }
}

 

ํด๋ž˜์Šค๋Š” ํด๋ž˜์Šค ์ •์˜๊ฐ€ ํ‰๊ฐ€๋˜๋Š” ์‹œ์ ์— ํ•จ์ˆ˜ ๊ฐ์ฒด๊ฐ€ ๋˜๋ฏ€๋กœ, 

์ธ์Šคํ„ด์Šค์™€ ๋‹ฌ๋ฆฌ ๋ณ„๋‹ค๋ฅธ ์ƒ์„ฑ ๊ณผ์ •์ด ํ•„์š”๊ฐ€ ์—†์Œ. 

=> ์ •์  ๋ฉ”์„œ๋“œ๋Š” ํด๋ž˜์Šค ์ •์˜ ์ดํ›„ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š์•„๋„ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

์ •์  ๋ฉ”์„œ๋“œ๋Š” ์ธ์Šคํ„ด์Šค๋กœ ํ˜ธ์ถœํ•˜์ง€ ์•Š๊ณ  ํด๋ž˜์Šค๋กœ ํ˜ธ์ถœํ•จ!

 

์ •์  ๋ฉ”์„œ๋“œ๋Š” ์ธ์Šคํ„ด์Šค๋กœ ํ˜ธ์ถœํ•  ์ˆ˜ ์—†๋‹ค. 

์ •์  ๋ฉ”์„œ๋“œ๊ฐ€ ๋ฐ”์ธ๋”ฉ๋œ ํด๋ž˜์Šค๋Š” ์ธ์Šคํ„ด์Šค์˜ ํ”„๋กœํ† ์•„์ž… ์ฒด์ธ ์ƒ์— ์กด์žฌํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ. 

=> ์ธ์Šคํ„ด์Šค์˜ ํ”„๋กœํ† ํƒ€์ž… ์ฒด์ธ ์ƒ์—๋Š” ํด๋ž˜์Šค๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ธ์Šคํ„ด์Šค๋กœ ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์ƒ์† ๋ฐ›์„ ์ˆ˜ ์—†์Œ. 

(๋ณต์ œ๊ฐ€ ์•ˆ๋จ)

 

 

 

25.5.4 ์ •์  ๋ฉ”์„œ๋“œ์™€ ํ”„๋กœํ†  ๋ฉ”์„œ๋“œ์˜ ์ฐจ์ด

 

1. ์†ํ•ด์žˆ๋Š” ํ”„๋กœํ† ํƒ€์ž… ์ฒด์ธ์ด ๋‹ค๋ฆ„. 

2. ์ •์  ๋ฉ”์„œ๋“œ : ํด๋ž˜์Šค๋กœ ํ˜ธ์ถœ / ํ”„๋กœํ† ํƒ€์ž… ๋ฉ”์„œ๋“œ : ์ธ์Šคํ„ด์Šค๋กœ ํ˜ธ์ถœ

3. ์ •์  ๋ฉ”์„œ๋“œ : ์ธ์Šคํ„ด์Šค ํ”„๋กœํผํ‹ฐ๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ โŒ / ํ”„๋กœํ† ํƒ€์ž… ๋ฉ”์„œ๋“œ : ์ธ์Šคํ„ด์Šค ํ”„๋กœํผํ‹ฐ๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ โญ• 

 

์ธ์Šคํ„ด์Šค ํ”„๋กœํผํ‹ฐ๋ฅผ ์ฐธ์กฐํ•ด์•ผ ํ•œ๋‹ค๋ฉด ์ •์  ๋ฉ”์„œ๋“œ ๋Œ€์‹  ํ”„๋กœํ† ํƒ€์ž… ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. 

 

์ •์  ๋ฉ”์„œ๋“œ๋Š” ํด๋ž˜์Šค๋กœ ํ˜ธ์ถœํ•ด์•ผํ•จ -> ์ •์  ๋ฉ”์„œ๋“œ ๋‚ด๋ถ€์˜ this : ํด๋ž˜์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚ด (์ธ์Šคํ„ด์Šค ์•„๋‹˜.)

์ฆ‰, ํ”„๋กœํ† ํƒ€์ž… ๋ฉ”์„œ๋“œ์™€ ์ •์  ๋ฉ”์„œ๋“œ ๋‚ด๋ถ€์˜ this ๋ฐ”์ธ๋”ฉ์ด ๋‹ค๋ฆ„. 

 

=> 

๋ฉ”์„œ๋“œ ๋‚ด๋ถ€์—์„œ ์ธ์Šคํ„ด์Šค ํ”„๋กœํผํ‹ฐ๋ฅผ ์ฐธ์กฐํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค๋ฉด this ๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•˜๋ฉฐ, 

์ด ๊ฒฝ์šฐ ํ”„๋กœํ† ํƒ€์ž… ๋ฉ”์„œ๋“œ๋กœ ์ •์˜ํ•ด์•ผํ•จ. 

this ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฉ”์„œ๋“œ๋Š” ์ •์  ๋ฉ”์„œ๋“œ๋กœ ์ •์˜ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. 

 

 

Math, Number, JSON, Object, reflect ๋“ฑ์€ ๋‹ค์–‘ํ•œ ์ •์  ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. 

-> ์–˜๋„ค์˜ ์ •์  ๋ฉ”์„œ๋“œ๋Š” ์ „์—ญ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์œ ํ‹ธ๋ฆฌํ‹ฐ ํ•จ์ˆ˜. (์ธ์Šคํ„ด์Šค์™€ ์ƒ๊ด€์—†์ด ์‚ฌ์šฉ)

์–˜๋„ค์ฒ˜๋Ÿผ ์ •์  ๋ฉ”์„œ๋“œ๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์—ญ์—์„œ ์‚ฌ์šฉํ•  ์œ ํ‹ธ๋ฆฌํ‹ฐ ํ•จ์ˆ˜๋ฅผ ๋ฉ”์„œ๋“œ๋กœ ๊ตฌ์กฐํ™”ํ•  ๋•Œ ์œ ์šฉํ•จ. 

 

 

 

25.5.5 ํด๋ž˜์Šค์—์„œ ์ •์˜ํ•œ ๋ฉ”์„œ๋“œ์˜ ํŠน์ง•

 

1. function ํ‚ค์›Œ๋“œ๋ฅผ ์ƒ๋žตํ•œ ๋ฉ”์„œ๋“œ ์ถ•์•ฝ ํ‘œํ˜„ ์‚ฌ์šฉ

2. ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ ์ •์˜ํ•  ๋•Œ ์ฝค๋งˆ๊ฐ€ ํ•„์š” ์—†์Œ. 

3. ์•”๋ฌต์ ์œผ๋กœ strict mode ๋กœ ์‹คํ–‰๋จ.

4. ์—ด๊ฑฐ ๋ถˆ๊ฐ€. [[Enumerable]] ์˜ ๊ฐ’์ด false

5. new ์—ฐ์‚ฐ์ž์™€ ํ•จ๊ป˜ ํ˜ธ์ถœ ํ•  ์ˆ˜ ์—†์Œ. 

 

 

 

 

 

 

๐Ÿ”ฎ 25.6 ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ๊ณผ์ •

 

1. ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ๊ณผ this ๋ฐ”์ธ๋”ฉ. 

new ์—ฐ์‚ฐ์ž์™€ ํ•จ๊ป˜ ํด๋ž˜์Šค ํ˜ธ์ถœ -> ์•”๋ฌต์ ์œผ๋กœ ๋นˆ ๊ฐ์ฒด ์ƒ์„ฑ. (ํด๋ž˜์Šค๊ฐ€ ์ƒ์„ฑํ•œ ์ธ์Šคํ„ด์Šค) 

-> ์ด ๋นˆ ๊ฐ์ฒด์ธ ์ธ์Šคํ„ด์Šค๋Š” this ์— ๋ฐ”์ธ๋”ฉ๋จ. -> constructor ๋‚ด๋ถ€์˜ this => ํด๋ž˜์Šค๊ฐ€ ์ƒ์„ฑํ•œ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚ด. 

 

2. ์ธ์Šคํ„ด์Šค ์ดˆ๊ธฐํ™”

constructor ๋‚ด๋ถ€ ์ฝ”๋“œ ์‹คํ–‰ -> this ์— ๋ฐ”์ธ๋”ฉ ๋œ ์ธ์Šคํ„ด์Šค ์ดˆ๊ธฐํ™”ํ•จ. 

 

3. ์ธ์Šคํ„ด์Šค ๋ฐ˜ํ™˜

ํด๋ž˜์Šค์˜ ๋ชจ๋“  ์ฒ˜๋ฆฌ๊ฐ€ ๋๋‚˜๋ฉด,  ์™„์„ฑ๋œ ์ธ์Šคํ„ด์Šค๊ฐ€ ๋ฐ”์ธ๋”ฉ๋œ this => ์•”๋ฌต์ ์œผ๋กœ ๋ฐ˜ํ™˜๋จ. 

 

 

 

 

728x90
๋ฐ˜์‘ํ˜•