๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“ Front-End/JavaScript

[JS] ํด๋ž˜์Šค์™€ ํ”„๋ผ์ด๋น— ํ•„๋“œ ๊ตฌํ˜„ ์ด์œ 

by Sun A 2024. 11. 6.

JavaScript ํด๋ž˜์Šค๋ž€

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ํด๋ž˜์Šค(class)๋Š” ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ํ…œํ”Œ๋ฆฟ์ด๋‹ค. ํด๋ž˜์Šค๋Š” ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(OOP)์˜ ๊ฐœ๋…์„ ๋ฐ”ํƒ•์œผ๋กœ, ์ฝ› ์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ๊ตฌ์กฐ์ ์ธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ค€๋‹ค. 

ํด๋ž˜์Šค ์„ ์–ธ ๋ฐฉ๋ฒ•


  
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
print() {
console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
}
}

Person : ํด๋ž˜์Šค๋ช…

constructor : ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ ํ˜ธ์ถœ๋˜๋Š” ๊ฒƒ / ํ•„๋“œ๋ฅผ ์„ ์–ธํ•œ๋‹ค.

  • name, age : Person ํด๋ž˜์Šค์˜ ํ•„๋“œ

print : Person ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ / ์ถœ๋ ฅ ๊ธฐ๋Šฅ์„ ๋‹ด๋‹นํ•œ๋‹ค. 

 

๊ฐ์ฒด ์ƒ์„ฑ ๋ฐฉ๋ฒ•


  
const person1 = new Person('Alice', 30);
person1.print(); // "Hello, my name is Alice and I am 30 years old."

Person ํด๋ž˜์Šค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ person1์ด๋ผ๋Š” ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ํด๋ž˜์Šค ์•ˆ์˜ ๋ฉ”์„œ๋“œ์ธ print()๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค. (print() ๋ฉ”์„œ๋“œ๊ฐ€ ์ถœ๋ ฅ ๋ฉ”์„œ๋“œ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ถœ๋ ฅ๊ฐ’์ด ๋‚˜์˜ค๋Š” ๊ฒƒ์ด๋‹ค.)

 

ํ”„๋ผ์ด๋น— ํ•„๋“œ๋ž€?

๊ทธ๋ ‡๋‹ค๋ฉด, ํด๋ž˜์Šค์—์„œ ํ•„๋“œ๋ฅผ ์„ ์–ธํ•  ๋•Œ #์„ ์ด์šฉํ•˜์—ฌ ํ”„๋ผ์ด๋น— ํ•„๋“œ๋กœ ์„ ์–ธํ•˜์—ฌ ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ๋งŒ ์†์„ฑ์„ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ ๋‹ค. ์ด์œ ๊ฐ€ ๋ญ˜๊นŒ? ํ”„๋ผ์ด๋น— ํ•„๋“œ๋กœ ์„ ์–ธํ•˜์ง€ ์•Š์•„๋„ ์ฝ”๋“œ๋Š” ๋™์ž‘ํ•˜๋Š” ๋ฐ ์™œ ํ”„๋ผ์ด๋น— ํ•„๋“œ๋กœ ์„ ์–ธํ•ด์•ผ ํ• ๊นŒ?

๊ฐ„๋‹จํ•˜๊ฒŒ ํ•œ ๋ฌธ์žฅ์œผ๋กœ ์š”์•ฝํ•˜๋ฉด ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ํ•ต์‹ฌ ๊ฐœ๋… ์ค‘ ํ•˜๋‚˜์ธ ์บก์Аํ™”(encapsulation) ๋ฐฉ์‹์„ ์ ์šฉํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด, ์™œ ์บก์Аํ™” ๋ฐฉ์‹์„ ์ ์šฉํ•ด์•ผ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์•ˆ์ „ํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ์„๊นŒ?

 

์บก์Аํ™”(encapsulation)

์บก์Аํ™”๋ž€ ๋ฐ์ดํ„ฐ(์†์„ฑ)์™€ ๋ฉ”์„œ๋“œ(๋™์ž‘)๋ฅผ ํ•˜๋‚˜์˜ ๋‹จ์œ„๋กœ ๋ฌถ๊ณ , ์™ธ๋ถ€๋กœ๋ถ€ํ„ฐ ์ •๋ณด๋ฅผ ์€๋‹‰ํ•˜๋Š” ๋ฐฉ์‹์„ ์˜๋ฏธํ•œ๋‹ค. 

๊ทธ๋ ‡๋‹ค๋ฉด ๋ฐ์ดํ„ฐ์™€ ๋ฉ”์„œ๋“œ๋ฅผ ํ•˜๋‚˜์˜ ๋‹จ์œ„๋กœ ๋ฌถ๊ณ  ์™œ ์™ธ๋ถ€๋กœ๋ถ€ํ„ฐ ์ •๋ณด๋ฅผ ์€๋‹‰ํ•ด์•ผ ํ•˜๋Š” ์ง€ ์•Œ์•„๋ณด์ž.

 

์บก์Аํ™”๊ฐ€ ํ•„์š”ํ•œ ์ด์œ 

 ์šฐ์„  ์บก์Аํ™”๋ฅผ ํ†ตํ•ด ๊ฐ์ฒด์˜ ๋‚ด๋ถ€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณดํ˜ธํ•˜์ง€ ์•Š๊ณ  ์™ธ๋ถ€์—์„œ ์ˆ˜์ •์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•˜๋ฉด, ๋ฐ์ดํ„ฐ๊ฐ€ ์˜๋„์น˜ ์•Š๊ฒŒ ๋ณ€๊ฒฝ๋˜๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. 

์˜ˆ๋ฅผ ๋“ค์–ด ์ƒ๊ฐํ•ด๋ณด์ž. 

์€ํ–‰ ๊ณ„์ขŒ์˜ ์ž”์•ก, ๋กœ๊ทธ์ธ ์„ธ์…˜์˜ ์ •๋ณด, ๋ฌผ๊ฑด์˜ ์žฌ๊ณ  ์ˆ˜๋Ÿ‰ ๊ฐ™์€ ์ค‘์š”ํ•œ ๋ฐ์ดํ„ฐ๋Š” ์™ธ๋ถ€์—์„œ ์ž„์˜๋กœ ๋ณ€๊ฒฝํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค. ๊ฐ๊ฐ์ด ๊ณ ์œ ํ•œ ๋ฐ์ดํ„ฐ์ด๊ณ  ํ”„๋ผ์ด๋น— ๊ฐ์ฒด๋ฅผ ํ™œ์šฉํ•œ ๋™์ž‘์ด ์•„๋‹ˆ๋ผ๋ฉด, ์˜ˆ๊ธฐ์น˜ ๋ชปํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์‰ฝ๋‹ค.

1. ๋ฐ์ดํ„ฐ ๋ณดํ˜ธ ๋ฐ ๋ฌด๊ฒฐ์„ฑ ์œ ์ง€

์™ธ๋ถ€์—์„œ ์ง์ ‘ ์ ‘๊ทผํ•˜์ง€ ๋ชปํ•˜๋„๋ก ๋ฐ์ดํ„ฐ์˜ ๋ฌด๊ฒฐ์„ฑ์„ ์œ ์ง€ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์บก์Аํ™”๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ๋ฌด๊ฒฐ์„ฑ ์œ ์ง€๋ฅผ ํ†ตํ•ด ์˜ˆ๊ธฐ์น˜ ์•Š์€ ์˜ค๋ฅ˜์™€ ๋ฒ„๊ทธ๋ฅผ ์˜ˆ๋ฐฉํ•  ์ˆ˜ ์žˆ๋‹ค.

2. ์ฝ”๋“œ์˜ ์ผ๊ด€์„ฑ๊ณผ ์•ˆ์ •์„ฑ ์œ ์ง€

์ด์ƒ์ ์ธ ๊ฐ์ฒด๋Š” ์ž์‹ ์˜ ์ƒํƒœ์™€ ํ–‰๋™์„ ์Šค์Šค๋กœ ๊ด€๋ฆฌํ•ด์•ผ ํ•œ๋‹ค. 

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

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์บก์Аํ™”๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ž˜์Šค ๋‚ด๋ถ€์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ฆํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ ์™ธ๋ถ€์—์„œ๋Š” ํด๋ž˜์Šค๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด์„œ๋งŒ ๊ฐ์ฒด์˜ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๊ฐ์ฒด์˜ ์ƒํƒœ๊ฐ€ ์˜ˆ์ƒ์น˜ ๋ชปํ•˜๊ฒŒ ๋ณ€๊ฒฝ๋˜๋Š” ์ผ์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

3. ์œ ์ง€๋ณด์ˆ˜์™€ ํ™•์žฅ์„ฑ ํ–ฅ์ƒ

์บก์Аํ™”๋Š” ์ฝ”๋“œ์˜ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋†’์ด๊ณ , ํ™•์žฅ์„ฑ์„ ์‰ฝ๊ฒŒ ๋งŒ๋“ ๋‹ค. ํด๋ž˜์Šค๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์€๋‹‰ํ•˜๊ณ  ๋ฉ”์„œ๋“œ๋งŒ ๊ณต๊ฐœํ•˜๋Š” ๊ฒฝ์šฐ, ํด๋ž˜์Šค ๋‚ด๋ถ€์˜ ๊ตฌ์กฐ๋‚˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•ด๋„ ์™ธ๋ถ€ ์ฝ”๋“œ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š”๋‹ค. 

์™ธ๋ถ€์˜ ์˜ํ–ฅ์„ ์ ๊ฒŒ ๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์šฉ์ดํ•ด์ง„๋‹ค. ๋˜ํ•œ ๋‚ด๋ถ€ ๊ตฌํ˜„์„ ๋ณ€๊ฒฝํ•˜๋”๋ผ๋„ ์™ธ๋ถ€ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋™์ผํ•˜๊ฒŒ ์œ ์ง€๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๊ธฐ์กด ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•˜๋Š” ๊ฒƒ๋„ ์ˆ˜์›”ํ•ด์ง„๋‹ค.

4. ์ •๋ณด ์€๋‹‰๊ณผ ๋ชจ๋“ˆํ™”

๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ์ •๋ณด ์€๋‹‰์€ ๋งค์šฐ ์ค‘์š”ํ•˜๋‹ค. ์ •๋ณด ์€๋‹‰์„ ํ†ตํ•ด ๊ฐ์ฒด ๋‚ด๋ถ€์˜ ์„ธ๋ถ€ ์‚ฌํ•ญ์„ ๊ฐ์ถ”๊ณ , ๊ฐ์ฒด๊ฐ€ ์ œ๊ณตํ•˜๋Š” ํผ๋ธ”๋ฆญ ์ธํ„ฐํŽ˜์ด์Šค๋งŒ ์™ธ๋ถ€์— ๊ณต๊ฐœํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“ˆํ™”๋ฅผ ์‹คํ˜„ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋ชจ๋“ˆํ™”๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๋…๋ฆฝ์ ์ธ ๊ตฌ์„ฑ ์š”์†Œ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๊ฒŒ ํ•˜์—ฌ ๊ฐ ์š”์†Œ๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ๊ฐœ๋ฐœ, ํ…Œ์ŠคํŠธ, ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.

๋˜ํ•œ ํ•œ ๋ชจ๋“ˆ์˜ ๋ณ€๊ฒฝ์ด ๋‹ค๋ฅธ ๋ชจ๋“ˆ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์„ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ •๋ณด ์€๋‹‰์€ ์ค‘์š”ํ•œ ๊ฐœ๋…์ด๋‹ค.

 

๊ทธ๋ ‡๋‹ค๋ฉด, ์บก์Аํ™”์˜ ํ•„์š”์„ฑ์— ๋Œ€ํ•ด ํŒŒ์•…ํ•˜์˜€์œผ๋‹ˆ ๋ฐ์ดํ„ฐ๋ฅผ ์บก์Аํ™”ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ํ”„๋ผ์ด๋น— ํ•„๋“œ๋ฅผ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์•Œ์•„๋ณด์ž.

ํ”„๋ผ์ด๋น— ํ•„๋“œ ํ™œ์šฉ ์˜ˆ์ œ


  
class Person {
#name;
#age;
constructor(name, age) {
this.#name = name;
this.#age = age;
}
getName() {
return this.#name;
}
getAge() {
return this.#age;
}
}
const person = new Person('John', 30);
console.log(person.getName()); // 'John'
console.log(person.getAge()); // 30
console.log(person.#name); // SyntaxError: Private field '#name' must be declared in an enclosing class

์œ„์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ํ”„๋ผ์ด๋น— ํ•„๋“œ๋Š” #์„ ์ด์šฉํ•ด์„œ ์„ ์–ธํ•˜๋ฉฐ ์œ„์™€ ๊ฐ™์ด ์„ ์–ธํ•œ ์ดํ›„์—๋Š” ์™ธ๋ถ€์—์„œ ์ง์ ‘ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋Š” ํ•„๋“œ๊ฐ€ ๋œ๋‹ค. ์™ธ๋ถ€์—์„œ ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” getName()๊ณผ getAge()๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. 

๋งŒ์•ฝ ๋งจ ์•„๋ž˜์˜ console.log์ฒ˜๋Ÿผ ์ง์ ‘ ํ•„๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด SyntaxError ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

ํ”„๋ผ์ด๋น— ํ•„๋“œ์˜ ์žฅ์ ๊ณผ ์ฃผ์˜์‚ฌํ•ญ

ํ”„๋ผ์ด๋น— ํ•„๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํด๋ž˜์Šค์˜ ์บก์Аํ™”๋ฅผ ๊ฐ•ํ™”ํ•˜๊ณ  ๊ฐ์ฒด์˜ ์•ˆ์ •์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค๋Š” ํฐ ์žฅ์ ์ด ์กด์žฌํ•œ๋‹ค. ์™ธ๋ถ€์—์„œ์˜ ๋ฌด๋ถ„๋ณ„ํ•œ ์ ‘๊ทผ์„ ๋ง‰์•„์„œ ์˜ˆ๊ธฐ์น˜๋ชปํ•œ ์—๋Ÿฌ๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค. 

๋˜ํ•œ ํด๋ž˜์Šค์˜ ์ธํ„ฐํŽ˜์ด์Šค์™€ ๊ตฌํ˜„์„ ๋ช…ํ™•ํžˆ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฐœ๋ฐœ์ž์—๊ฒŒ ํ•„์š”ํ•œ ์ •๋ณด๋งŒ ๋…ธ์ถœํ•  ์ˆ˜ ์žˆ์–ด์„œ ์ฝ”๋“œ์˜ ์ผ๊ด€์„ฑ๋„ ์œ ์ง€ํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜๋„ ์šฉ์ดํ•˜๋„๋ก ํ•ด์ค€๋‹ค. 

ํ•˜์ง€๋งŒ ์ด๋Ÿฌํ•œ ์žฅ์ ์„ ๊ฐ€์ง„ ํ”„๋ผ์ด๋น— ํ•„๋“œ๋„ ์ฃผ์˜์‚ฌํ•ญ์ด ์กด์žฌํ•œ๋‹ค. 

ํ”„๋ผ์ด๋น— ํ•„๋“œ๋Š” ํด๋ž˜์Šค์˜ ์ƒ์† ๊ตฌ์กฐ์—์„œ ์ž์‹ ํด๋ž˜์Šค๊ฐ€ ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ํ”„๋ผ์ด๋น— ํ•„๋“œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์ ์„ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค.

๋งŒ์•ฝ extends๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ž˜์Šค์˜ ์ƒ์† ๊ตฌ์กฐ๋ฅผ ์„ค๊ณ„ํ•  ๋•Œ๋Š” ์œ„์˜ ์‚ฌํ•ญ์„ ์ถฉ๋ถ„ํžˆ ๊ณ ๋ คํ•˜์—ฌ ์„ค๊ณ„ํ•ด์•ผ ํ•œ๋‹ค. 

 

๊ฒฐ๋ก 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ํด๋ž˜์Šค์™€ ํ”„๋ผ์ด๋น— ํ•„๋“œ๋ฅผ ํ™œ์šฉํ•˜๋ฉด ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์ค‘์š”ํ•œ ์›์น™์ธ ์บก์Аํ™”๋ฅผ ๊ฐ•ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.

์‹ค์ œ๋กœ ํ”„๋ผ์ด๋น— ํ•„๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ž˜์Šค๋ฅผ ์„ค๊ณ„ํ•˜๋ ค๋‹ˆ ๋„ˆ๋ฌด ๋ณต์žกํ•˜์—ฌ ์‹œ๊ฐ„ ๋‚ด์— ๊ณผ์ œ๋ฅผ ์ œ์ถœํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ์„ ์ƒ๋žตํ–ˆ์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ํ•„์š”ํ•˜๋‹ค๋Š” ์ ์„ ์ธ์ง€ํ–ˆ๊ณ  ์ด๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ํด๋ž˜์Šค๋ฅผ ์„ค๊ณ„ํ•˜๋ฉด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์›์น™์„ ์ค€์ˆ˜ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐ๋œ๋‹ค. 

 

์ฐธ๊ณ ๊ธ€ : https://f-lab.kr/insight/utilizing-javascript-class-and-private-fields

 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํด๋ž˜์Šค์™€ ํ”„๋ผ์ด๋น— ํ•„๋“œ ํ™œ์šฉํ•˜๊ธฐ

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ํด๋ž˜์Šค์™€ ํ”„๋ผ์ด๋น— ํ•„๋“œ๋ฅผ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ์žฅ์ ์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋ผ์ด๋น— ํ•„๋“œ๋ฅผ ํ†ตํ•ด ํด๋ž˜์Šค์˜ ์บก์Аํ™”๋ฅผ ๊ฐ•ํ™”ํ•˜๊ณ , ๊ฐ์ฒด์˜ ์•ˆ์ •์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋Š” ์ „๋žต์„ ์ œ์‹œํ•ฉ๋‹ˆ๋‹ค.

f-lab.kr