๊ฐ๋ ฅํ ํด๋์ค ์บก์ํ๋ฅผ ์ํ ์๋ฐ์คํฌ๋ฆฝํธ ๋น๊ณต๊ฐ ํ๋ ์ข ํฉ ๊ฐ์ด๋. ์์ ํ๊ณ ์ ์ง๋ณด์ํ๊ธฐ ์ฌ์ด ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ์ถ์ ์ํ ๋ฌธ๋ฒ, ์ฅ์ , ์ค์ ์์ ๋ฅผ ๋ฐฐ์๋ณด์ธ์.
์๋ฐ์คํฌ๋ฆฝํธ ๋น๊ณต๊ฐ ํ๋: ๊ฐ๋ ฅํ ์ฝ๋๋ฅผ ์ํ ํด๋์ค ์บก์ํ ๋ง์คํฐํ๊ธฐ
์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ๋ฐ์ ์ธ๊ณ์์๋ ๊น๋ํ๊ณ , ์ ์ง๋ณด์ํ๊ธฐ ์ฌ์ฐ๋ฉฐ, ์์ ํ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ค์ํฉ๋๋ค. ์ด๋ฅผ ๋ฌ์ฑํ๊ธฐ ์ํ ํต์ฌ ์์น ์ค ํ๋๋ ์บก์ํ์ ๋๋ค. ์บก์ํ๋ ๋ฐ์ดํฐ(์์ฑ)์ ๊ทธ ๋ฐ์ดํฐ์ ๋ํ ์์ ์ ์ํํ๋ ๋ฉ์๋๋ฅผ ํ๋์ ๋จ์(ํด๋์ค)๋ก ๋ฌถ๊ณ , ๊ฐ์ฒด์ ์ผ๋ถ ๊ตฌ์ฑ ์์์ ๋ํ ์ง์ ์ ์ธ ์ ๊ทผ์ ์ ํํ๋ ๊ฒ์ ํฌํจํฉ๋๋ค.
ECMAScript 2022 (ES2022)์์ ๋น๊ณต๊ฐ ํ๋๊ฐ ๋์
๋๊ธฐ ์ ์๋, ์๋ฐ์คํฌ๋ฆฝํธ ํด๋์ค์์ ์ง์ ํ ์บก์ํ๋ฅผ ๋ฌ์ฑํ๊ธฐ๊ฐ ์ด๋ ค์ ์ต๋๋ค. ์์ฑ ์ด๋ฆ ์์ ๋ฐ์ค(_
)์ ๋ถ์ด๋ ๊ฒ๊ณผ ๊ฐ์ ๊ด๋ก๊ฐ ์์ฑ์ ๋น๊ณต๊ฐ๋ก ์ทจ๊ธํด์ผ ํจ์ ๋ํ๋ด๊ธฐ ์ํด ์ฌ์ฉ๋์์ง๋ง, ์ด๋ ๋จ์ง ๊ด๋ก์ผ ๋ฟ ์ค์ ๋น๊ณต๊ฐ์ฑ์ ๊ฐ์ ํ์ง๋ ์์์ต๋๋ค. ๊ฐ๋ฐ์๋ค์ ์ฌ์ ํ ํด๋์ค ์ธ๋ถ์์ ์ด๋ฌํ "๋น๊ณต๊ฐ" ์์ฑ์ ์ ๊ทผํ๊ณ ์์ ํ ์ ์์์ต๋๋ค.
์ด์ ๋น๊ณต๊ฐ ํ๋์ ๋์ ์ผ๋ก, ์๋ฐ์คํฌ๋ฆฝํธ๋ ์ง์ ํ ์บก์ํ๋ฅผ ์ํ ๊ฐ๋ ฅํ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํ์ฌ ์ฝ๋ ํ์ง๊ณผ ์ ์ง๋ณด์์ฑ์ ํฌ๊ฒ ํฅ์์์ผฐ์ต๋๋ค. ์ด ๊ธ์์๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋น๊ณต๊ฐ ํ๋์ ๋ํด ๊น์ด ํ๊ณ ๋ค์ด, ์์ ํ๊ณ ๊ฐ๋ ฅํ ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ์ถ์ ์ํ ํด๋์ค ์บก์ํ ๋ง์คํฐ๋ฅผ ๋๊ธฐ ์ํด ๊ทธ ๋ฌธ๋ฒ, ์ฅ์ , ๊ทธ๋ฆฌ๊ณ ์ค์ ์์ ๋ฅผ ํ๊ตฌํ ๊ฒ์ ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ๋น๊ณต๊ฐ ํ๋๋ ๋ฌด์์ธ๊ฐ?
๋น๊ณต๊ฐ ํ๋๋ ์ ์ธ๋ ํด๋์ค ๋ด๋ถ์์๋ง ์ ๊ทผํ ์ ์๋ ํด๋์ค ์์ฑ์
๋๋ค. ์์ฑ ์ด๋ฆ ์์ ํด์(#
) ์ ๋์ฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ธ๋ฉ๋๋ค. ๋ฐ์ค ๊ด๋ก์ ๋ฌ๋ฆฌ, ๋น๊ณต๊ฐ ํ๋๋ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์ํด ๊ฐ์ ๋๋ฏ๋ก, ํด๋์ค ์ธ๋ถ์์ ์ ๊ทผํ๋ ค๋ ๋ชจ๋ ์๋๋ ์ค๋ฅ๋ฅผ ๋ฐ์์ํต๋๋ค.
๋น๊ณต๊ฐ ํ๋์ ์ฃผ์ ํน์ง:
- ์ ์ธ:
#
์ ๋์ฌ๋ก ์ ์ธ๋ฉ๋๋ค (์:#name
,#age
). - ์ค์ฝํ: ์ ์๋ ํด๋์ค ๋ด๋ถ์์๋ง ์ ๊ทผํ ์ ์์ต๋๋ค.
- ๊ฐ์ ์ฑ: ํด๋์ค ์ธ๋ถ์์ ๋น๊ณต๊ฐ ํ๋์ ์ ๊ทผํ๋ฉด
SyntaxError
๊ฐ ๋ฐ์ํฉ๋๋ค. - ๊ณ ์ ์ฑ: ๊ฐ ํด๋์ค๋ ๋น๊ณต๊ฐ ํ๋์ ๋ํ ์์ฒด ์ค์ฝํ๋ฅผ ๊ฐ์ง๋๋ค. ๋ค๋ฅธ ํด๋์ค๋ค์ด ์ถฉ๋ ์์ด ๋์ผํ ์ด๋ฆ์ ๋น๊ณต๊ฐ ํ๋๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค.
๋น๊ณต๊ฐ ํ๋์ ๋ฌธ๋ฒ
๋น๊ณต๊ฐ ํ๋๋ฅผ ์ ์ธํ๊ณ ์ฌ์ฉํ๋ ๋ฌธ๋ฒ์ ๊ฐ๋จํฉ๋๋ค:
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("Alice", 30);
console.log(person.getName()); // ์ถ๋ ฅ: Alice
console.log(person.getAge()); // ์ถ๋ ฅ: 30
//console.log(person.#name); // SyntaxError๋ฅผ ๋ฐ์์ํต๋๋ค: ๋น๊ณต๊ฐ ํ๋ '#name'์ ๋๋ฌ์ธ๋ ํด๋์ค ๋ด์ ์ ์ธ๋์ด์ผ ํฉ๋๋ค
์ด ์์ ์์:
#name
๊ณผ#age
๋Person
ํด๋์ค ๋ด์์ ๋น๊ณต๊ฐ ํ๋๋ก ์ ์ธ๋ฉ๋๋ค.- ์์ฑ์๋ ์ ๊ณต๋ ๊ฐ์ผ๋ก ์ด๋ฌํ ๋น๊ณต๊ฐ ํ๋๋ฅผ ์ด๊ธฐํํฉ๋๋ค.
getName()
๊ณผgetAge()
๋ฉ์๋๋ ๋น๊ณต๊ฐ ํ๋์ ๋ํ ์ ์ด๋ ์ ๊ทผ์ ์ ๊ณตํฉ๋๋ค.- ํด๋์ค ์ธ๋ถ์์
person.#name
์ ์ ๊ทผํ๋ ค๊ณ ์๋ํ๋ฉดSyntaxError
๊ฐ ๋ฐ์ํ์ฌ, ๊ฐ์ ๋ ๋น๊ณต๊ฐ์ฑ์ ๋ณด์ฌ์ค๋๋ค.
๋น๊ณต๊ฐ ํ๋ ์ฌ์ฉ์ ์ด์
๋น๊ณต๊ฐ ํ๋๋ฅผ ์ฌ์ฉํ๋ฉด ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ๋ฐ์ ์ฌ๋ฌ ๊ฐ์ง ์ค์ํ ์ด์ ์ ์ ๊ณตํฉ๋๋ค:
1. ์ง์ ํ ์บก์ํ
๋น๊ณต๊ฐ ํ๋๋ ์ง์ ํ ์บก์ํ๋ฅผ ์ ๊ณตํ์ฌ, ๊ฐ์ฒด์ ๋ด๋ถ ์ํ๊ฐ ์ธ๋ถ์ ์์ ์ด๋ ์ ๊ทผ์ผ๋ก๋ถํฐ ๋ณดํธ๋จ์ ์๋ฏธํฉ๋๋ค. ์ด๋ ๋ฐ์ดํฐ์ ์ฐ๋ฐ์ ์ด๊ฑฐ๋ ์ ์์ ์ธ ๋ณ๊ฒฝ์ ๋ฐฉ์งํ์ฌ ๋ ๊ฐ๋ ฅํ๊ณ ์ ๋ขฐํ ์ ์๋ ์ฝ๋๋ฅผ ๋ง๋ญ๋๋ค.
2. ์ฝ๋ ์ ์ง๋ณด์์ฑ ํฅ์
๋ด๋ถ ๊ตฌํ ์ธ๋ถ ์ฌํญ์ ์จ๊น์ผ๋ก์จ, ๋น๊ณต๊ฐ ํ๋๋ ์ธ๋ถ ์ข ์์ฑ์ ์ํฅ์ ์ฃผ์ง ์๊ณ ์ฝ๋๋ฅผ ์์ ํ๊ณ ๋ฆฌํฉํ ๋งํ๊ธฐ ์ฝ๊ฒ ๋ง๋ญ๋๋ค. ๊ณต๊ฐ ์ธํฐํ์ด์ค(๋ฉ์๋)๊ฐ ์ผ๊ด์ฑ์ ์ ์งํ๋ ํ, ํด๋์ค์ ๋ด๋ถ ๊ตฌํ ๋ณ๊ฒฝ์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค๋ฅธ ๋ถ๋ถ์ ์์์ํฌ ๊ฐ๋ฅ์ฑ์ด ์ ์ด์ง๋๋ค.
3. ๋ณด์ ๊ฐํ
๋น๊ณต๊ฐ ํ๋๋ ๋ฏผ๊ฐํ ๋ฐ์ดํฐ์ ๋ํ ๋ฌด๋จ ์ ๊ทผ์ ๋ฐฉ์งํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณด์์ ๊ฐํํฉ๋๋ค. ์ด๋ ์ธ๋ถ ์ฝ๋์ ์ํด ๋ ธ์ถ๋๊ฑฐ๋ ์์ ๋์ด์๋ ์ ๋๋ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ๋ ํนํ ์ค์ํฉ๋๋ค.
4. ๋ณต์ก์ฑ ๊ฐ์
๋ฐ์ดํฐ์ ๋์์ ํด๋์ค ๋ด์ ์บก์ํํจ์ผ๋ก์จ, ๋น๊ณต๊ฐ ํ๋๋ ์ฝ๋๋ฒ ์ด์ค์ ์ ๋ฐ์ ์ธ ๋ณต์ก์ฑ์ ์ค์ด๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ดํดํ๊ณ , ๋๋ฒ๊น ํ๊ณ , ์ ์ง๋ณด์ํ๊ธฐ ์ฝ๊ฒ ๋ง๋ญ๋๋ค.
5. ๋ช ํํ ์๋
๋น๊ณต๊ฐ ํ๋์ ์ฌ์ฉ์ ์ด๋ค ์์ฑ์ด ๋ด๋ถ์ฉ์ผ๋ก๋ง ์๋๋์๋์ง๋ฅผ ๋ช ํํ๊ฒ ๋ํ๋ด์ด ์ฝ๋ ๊ฐ๋ ์ฑ์ ํฅ์์ํค๊ณ ๋ค๋ฅธ ๊ฐ๋ฐ์๋ค์ด ํด๋์ค์ ์ค๊ณ๋ฅผ ๋ ์ฝ๊ฒ ์ดํดํ ์ ์๋๋ก ํฉ๋๋ค.
๋น๊ณต๊ฐ ํ๋์ ์ค์ ์์
์๋ฐ์คํฌ๋ฆฝํธ ํด๋์ค์ ์ค๊ณ์ ๊ตฌํ์ ๊ฐ์ ํ๊ธฐ ์ํด ๋น๊ณต๊ฐ ํ๋๋ฅผ ์ด๋ป๊ฒ ์ฌ์ฉํ ์ ์๋์ง ๋ช ๊ฐ์ง ์ค์ ์์ ๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
์์ 1: ์ํ ๊ณ์ข
๊ณ์ข ์์ก์ ์ง์ ์ ์ธ ์์ ์ผ๋ก๋ถํฐ ๋ณดํธํด์ผ ํ๋ BankAccount
ํด๋์ค๋ฅผ ์๊ฐํด ๋ด
์๋ค:
class BankAccount {
#balance;
constructor(initialBalance) {
this.#balance = initialBalance;
}
deposit(amount) {
if (amount > 0) {
this.#balance += amount;
}
}
withdraw(amount) {
if (amount > 0 && amount <= this.#balance) {
this.#balance -= amount;
}
}
getBalance() {
return this.#balance;
}
}
const account = new BankAccount(1000);
account.deposit(500);
account.withdraw(200);
console.log(account.getBalance()); // ์ถ๋ ฅ: 1300
// account.#balance = 0; // SyntaxError๊ฐ ๋ฐ์ํฉ๋๋ค
์ด ์์ ์์ #balance
๋ deposit()
๋ฐ withdraw()
๋ฉ์๋๋ฅผ ํตํด์๋ง ์ ๊ทผํ๊ณ ์์ ํ ์ ์๋ ๋น๊ณต๊ฐ ํ๋์
๋๋ค. ์ด๋ ์ธ๋ถ ์ฝ๋๊ฐ ๊ณ์ข ์์ก์ ์ง์ ์กฐ์ํ๋ ๊ฒ์ ๋ฐฉ์งํ์ฌ ๊ณ์ข ๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅํฉ๋๋ค.
์์ 2: ์ง์ ๊ธ์ฌ
๊ธ์ฌ ์ ๋ณด๋ฅผ ๋ณดํธํด์ผ ํ๋ Employee
ํด๋์ค๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค:
class Employee {
#salary;
constructor(name, salary) {
this.name = name;
this.#salary = salary;
}
getSalary() {
return this.#salary;
}
raiseSalary(percentage) {
if (percentage > 0) {
this.#salary *= (1 + percentage / 100);
}
}
}
const employee = new Employee("Bob", 50000);
console.log(employee.getSalary()); // ์ถ๋ ฅ: 50000
employee.raiseSalary(10);
console.log(employee.getSalary()); // ์ถ๋ ฅ: 55000
// employee.#salary = 100000; // SyntaxError๊ฐ ๋ฐ์ํฉ๋๋ค
์ฌ๊ธฐ์ #salary
๋ getSalary()
๋ฉ์๋๋ฅผ ํตํด์๋ง ์ ๊ทผํ ์ ์๊ณ raiseSalary()
๋ฉ์๋๋ฅผ ํตํด์๋ง ์์ ํ ์ ์๋ ๋น๊ณต๊ฐ ํ๋์
๋๋ค. ์ด๋ ๊ธ์ฌ ์ ๋ณด๊ฐ ๋ณดํธ๋๊ณ ํ๊ฐ๋ ๋ฉ์๋๋ฅผ ํตํด์๋ง ์
๋ฐ์ดํธ๋ ์ ์๋๋ก ๋ณด์ฅํฉ๋๋ค.
์์ 3: ๋ฐ์ดํฐ ์ ํจ์ฑ ๊ฒ์ฌ
๋น๊ณต๊ฐ ํ๋๋ ํด๋์ค ๋ด์์ ๋ฐ์ดํฐ ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ๊ฐ์ ํ๋ ๋ฐ ์ฌ์ฉ๋ ์ ์์ต๋๋ค:
class Product {
#price;
constructor(name, price) {
this.name = name;
this.#price = this.#validatePrice(price);
}
#validatePrice(price) {
if (typeof price !== 'number' || price <= 0) {
throw new Error("๊ฐ๊ฒฉ์ ์์์ฌ์ผ ํฉ๋๋ค.");
}
return price;
}
getPrice() {
return this.#price;
}
setPrice(newPrice) {
this.#price = this.#validatePrice(newPrice);
}
}
try {
const product = new Product("Laptop", 1200);
console.log(product.getPrice()); // ์ถ๋ ฅ: 1200
product.setPrice(1500);
console.log(product.getPrice()); // ์ถ๋ ฅ: 1500
//const invalidProduct = new Product("Invalid", -100); // ์ค๋ฅ๋ฅผ ๋ฐ์์ํต๋๋ค
} catch (error) {
console.error(error.message);
}
์ด ์์ ์์ #price
๋ #validatePrice()
๋น๊ณต๊ฐ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ ํจ์ฑ์ด ๊ฒ์ฌ๋๋ ๋น๊ณต๊ฐ ํ๋์
๋๋ค. ์ด๋ ๊ฐ๊ฒฉ์ด ํญ์ ์์์์ ๋ณด์ฅํ์ฌ ์ ํจํ์ง ์์ ๋ฐ์ดํฐ๊ฐ ๊ฐ์ฒด์ ์ ์ฅ๋๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค.
๋ค์ํ ์๋๋ฆฌ์ค์์์ ์ฌ์ฉ ์ฌ๋ก
๋น๊ณต๊ฐ ํ๋๋ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ๋ฐ์ ๊ด๋ฒ์ํ ์๋๋ฆฌ์ค์ ์ ์ฉ๋ ์ ์์ต๋๋ค. ๋ค์์ ๋ค์ํ ์ปจํ ์คํธ์์์ ๋ช ๊ฐ์ง ์ฌ์ฉ ์ฌ๋ก์ ๋๋ค:
1. ์น ๊ฐ๋ฐ
- UI ์ปดํฌ๋ํธ: ์ธ๋ถ ์คํฌ๋ฆฝํธ์ ์ํ ์๋์น ์์ ์์ ์ ๋ฐฉ์งํ๊ธฐ ์ํด UI ์ปดํฌ๋ํธ(์: ๋ฒํผ ์ํ, ํผ ์ ํจ์ฑ ๊ฒ์ฌ)์ ๋ด๋ถ ์ํ๋ฅผ ์บก์ํํฉ๋๋ค.
- ๋ฐ์ดํฐ ๊ด๋ฆฌ: ํด๋ผ์ด์ธํธ ์ธก ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉ์ ์๊ฒฉ ์ฆ๋ช ์ด๋ API ํค์ ๊ฐ์ ๋ฏผ๊ฐํ ๋ฐ์ดํฐ๋ฅผ ๋ฌด๋จ ์ ๊ทผ์ผ๋ก๋ถํฐ ๋ณดํธํฉ๋๋ค.
- ๊ฒ์ ๊ฐ๋ฐ: ๊ฒ์ ๋ก์ง๊ณผ ๋ด๋ถ ๋ณ์๋ฅผ ์จ๊ฒจ ์นํ ์ด๋ ๊ฒ์ ์ํ ์กฐ์์ ๋ฐฉ์งํฉ๋๋ค.
2. ๋ฐฑ์๋ ๊ฐ๋ฐ (Node.js)
- ๋ฐ์ดํฐ ๋ชจ๋ธ: ๋ด๋ถ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๋ํ ์ง์ ์ ๊ทผ์ ๋ง์ ๋ฐฑ์๋ ๋ชจ๋ธ์ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ๊ฐ์ ํฉ๋๋ค.
- ์ธ์ฆ ๋ฐ ์ธ๊ฐ: ๋ฏผ๊ฐํ ์ฌ์ฉ์ ์ ๋ณด์ ์ ๊ทผ ์ ์ด ๋ฉ์ปค๋์ฆ์ ๋ณดํธํฉ๋๋ค.
- API ๊ฐ๋ฐ: ํด๋ผ์ด์ธํธ์๊ฒ ์์ ์ ์ด๊ณ ์ผ๊ด๋ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๊ธฐ ์ํด API์ ๊ตฌํ ์ธ๋ถ ์ฌํญ์ ์จ๊น๋๋ค.
3. ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ฐ๋ฐ
- ๋ด๋ถ ๋ก์ง ์บก์ํ: ์ฌ์ฉ์์๊ฒ ๊น๋ํ๊ณ ์์ ์ ์ธ API๋ฅผ ์ ๊ณตํ๊ธฐ ์ํด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ด๋ถ ์๋ ๋ฐฉ์์ ์จ๊น๋๋ค.
- ์ถฉ๋ ๋ฐฉ์ง: ๋ด๋ถ ๋ณ์์ ๋น๊ณต๊ฐ ํ๋๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์ ์ ์ ๋ณ์ ๋ฐ ํจ์์์ ์ด๋ฆ ์ถฉ๋์ ํผํฉ๋๋ค.
- ํธํ์ฑ ์ ์ง: ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ณต๊ฐ API๋ฅผ ์ฌ์ฉํ๋ ๊ธฐ์กด ์ฝ๋๋ฅผ ์์์ํค์ง ์๊ณ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ด๋ถ๋ฅผ ๋ณ๊ฒฝํ ์ ์๋๋ก ํฉ๋๋ค.
๋น๊ณต๊ฐ ๋ฉ์๋
๋น๊ณต๊ฐ ํ๋ ์ธ์๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ ๋น๊ณต๊ฐ ๋ฉ์๋๋ฅผ ์ง์ํฉ๋๋ค. ๋น๊ณต๊ฐ ๋ฉ์๋๋ ์ ์ธ๋ ํด๋์ค ๋ด๋ถ์์๋ง ์ ๊ทผํ ์ ์๋ ํจ์์
๋๋ค. ๋น๊ณต๊ฐ ํ๋์ ๋์ผํ #
์ ๋์ฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ธ๋ฉ๋๋ค.
class MyClass {
#privateMethod() {
console.log("์ด๊ฒ์ ๋น๊ณต๊ฐ ๋ฉ์๋์
๋๋ค.");
}
publicMethod() {
this.#privateMethod(); // ํด๋์ค ๋ด์์ ๋น๊ณต๊ฐ ๋ฉ์๋์ ์ ๊ทผ
}
}
const myInstance = new MyClass();
myInstance.publicMethod(); // ์ถ๋ ฅ: ์ด๊ฒ์ ๋น๊ณต๊ฐ ๋ฉ์๋์
๋๋ค.
// myInstance.#privateMethod(); // SyntaxError๊ฐ ๋ฐ์ํฉ๋๋ค
๋น๊ณต๊ฐ ๋ฉ์๋๋ ๋ด๋ถ ๋ก์ง์ ์บก์ํํ๊ณ ์ธ๋ถ ์ฝ๋๊ฐ ํด๋์ค์ ๊ณต๊ฐ API์ ์ผ๋ถ๊ฐ ์๋ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ๊ฒ์ ๋ฐฉ์งํ๋ ๋ฐ ์ ์ฉํฉ๋๋ค.
๋ธ๋ผ์ฐ์ ์ง์ ๋ฐ ํธ๋์คํ์ผ๋ง
๋น๊ณต๊ฐ ํ๋๋ ์ต์ ๋ธ๋ผ์ฐ์ ๋ฐ Node.js ํ๊ฒฝ์์ ์ง์๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ๊ตฌํ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ง์ํด์ผ ํ๋ ๊ฒฝ์ฐ, Babel๊ณผ ๊ฐ์ ํธ๋์คํ์ผ๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ๋๋ฅผ ๊ตฌํ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง๊ณผ ํธํ๋๋ ๋ฒ์ ์ผ๋ก ๋ณํํด์ผ ํ ์ ์์ต๋๋ค.
Babel์ ๋น๊ณต๊ฐ ํ๋๋ฅผ ํด๋ก์ ๋ WeakMap์ ์ฌ์ฉํ์ฌ ๋น๊ณต๊ฐ ์ ๊ทผ์ ์๋ฎฌ๋ ์ด์ ํ๋ ์ฝ๋๋ก ๋ณํํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ๊ตฌํ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ง์ํ๋ฉด์๋ ์ฝ๋์์ ๋น๊ณต๊ฐ ํ๋๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ ํ ์ฌํญ ๋ฐ ๊ณ ๋ ค ์ฌํญ
๋น๊ณต๊ฐ ํ๋๋ ์๋นํ ์ด์ ์ ์ ๊ณตํ์ง๋ง, ๋ช ์ฌํด์ผ ํ ๋ช ๊ฐ์ง ์ ํ ์ฌํญ๊ณผ ๊ณ ๋ ค ์ฌํญ๋ ์์ต๋๋ค:
- ์์ ๋ถ๊ฐ: ๋น๊ณต๊ฐ ํ๋๋ ํ์ ํด๋์ค์ ์์๋์ง ์์ต๋๋ค. ์ฆ, ํ์ ํด๋์ค๋ ๋ถ๋ชจ ํด๋์ค์ ์ ์ธ๋ ๋น๊ณต๊ฐ ํ๋์ ์ ๊ทผํ๊ฑฐ๋ ์์ ํ ์ ์์ต๋๋ค.
- ๋์ผ ํด๋์ค์ ๋ค๋ฅธ ์ธ์คํด์ค์์ ์ ๊ทผ ๋ถ๊ฐ: ๋น๊ณต๊ฐ ํ๋๋ ํด๋์ค *๋ด๋ถ*์์ ์ ๊ทผํ ์ ์์ง๋ง, ๋ฐ๋์ ํ๋๋ฅผ ์ ์ํ ๋์ผํ ์ธ์คํด์ค ๋ด์์์ฌ์ผ ํฉ๋๋ค. ํด๋์ค์ ๋ค๋ฅธ ์ธ์คํด์ค๋ ๋ค๋ฅธ ์ธ์คํด์ค์ ๋น๊ณต๊ฐ ํ๋์ ์ ๊ทผํ ์ ์์ต๋๋ค.
- ๋์ ์ ๊ทผ ๋ถ๊ฐ: ๋น๊ณต๊ฐ ํ๋๋ ๋๊ดํธ ํ๊ธฐ๋ฒ(์:
object[#fieldName]
)์ ์ฌ์ฉํ์ฌ ๋์ ์ผ๋ก ์ ๊ทผํ ์ ์์ต๋๋ค. - ์ฑ๋ฅ: ๊ฒฝ์ฐ์ ๋ฐ๋ผ ๋น๊ณต๊ฐ ํ๋๋ ์ถ๊ฐ์ ์ธ ๊ฒ์ฌ์ ๊ฐ์ ์ฐธ์กฐ๊ฐ ํ์ํ๊ธฐ ๋๋ฌธ์ ๊ณต๊ฐ ํ๋์ ๋นํด ์ฝ๊ฐ์ ์ฑ๋ฅ ์ ํ๊ฐ ์์ ์ ์์ต๋๋ค.
๋น๊ณต๊ฐ ํ๋ ์ฌ์ฉ์ ์ํ ๋ชจ๋ฒ ์ฌ๋ก
์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋์์ ๋น๊ณต๊ฐ ํ๋๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉํ๋ ค๋ฉด ๋ค์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๊ณ ๋ คํ์ญ์์ค:
- ๋ด๋ถ ์ํ ๋ณดํธ๋ฅผ ์ํด ๋น๊ณต๊ฐ ํ๋ ์ฌ์ฉ: ํด๋์ค ์ธ๋ถ์์ ์ ๊ทผํ๊ฑฐ๋ ์์ ํด์๋ ์ ๋๋ ์์ฑ์ ์๋ณํ๊ณ ๋น๊ณต๊ฐ๋ก ์ ์ธํ์ญ์์ค.
- ๊ณต๊ฐ ๋ฉ์๋๋ฅผ ํตํด ์ ์ด๋ ์ ๊ทผ ์ ๊ณต: ์ธ๋ถ ์ฝ๋๊ฐ ์์ ํ๊ณ ์์ธก ๊ฐ๋ฅํ ๋ฐฉ์์ผ๋ก ๊ฐ์ฒด์ ์ํ์ ์ํธ ์์ฉํ ์ ์๋๋ก ๋น๊ณต๊ฐ ํ๋์ ๋ํ ์ ์ด๋ ์ ๊ทผ์ ์ ๊ณตํ๋ ๊ณต๊ฐ ๋ฉ์๋๋ฅผ ๋ง๋์ญ์์ค.
- ๋ด๋ถ ๋ก์ง์ ๋น๊ณต๊ฐ ๋ฉ์๋ ์ฌ์ฉ: ๊ณต๊ฐ API์ ์ผ๋ถ๊ฐ ์๋ ๋ฉ์๋๋ฅผ ์ธ๋ถ ์ฝ๋๊ฐ ํธ์ถํ์ง ๋ชปํ๋๋ก ๋ด๋ถ ๋ก์ง์ ๋น๊ณต๊ฐ ๋ฉ์๋ ๋ด์ ์บก์ํํ์ญ์์ค.
- ์ฅ๋จ์ ๊ณ ๋ ค: ๊ฐ ์ํฉ์์ ๋น๊ณต๊ฐ ํ๋์ ์ฅ์ ๊ณผ ํ๊ณ๋ฅผ ํ๊ฐํ๊ณ ํ์์ ๊ฐ์ฅ ์ ํฉํ ์ ๊ทผ ๋ฐฉ์์ ์ ํํ์ญ์์ค.
- ์ฝ๋ ๋ฌธ์ํ: ์ด๋ค ์์ฑ๊ณผ ๋ฉ์๋๊ฐ ๋น๊ณต๊ฐ์ธ์ง ๋ช ํํ๊ฒ ๋ฌธ์ํํ๊ณ ๊ทธ ๋ชฉ์ ์ ์ค๋ช ํ์ญ์์ค.
๊ฒฐ๋ก
์๋ฐ์คํฌ๋ฆฝํธ ๋น๊ณต๊ฐ ํ๋๋ ํด๋์ค์์ ์ง์ ํ ์บก์ํ๋ฅผ ๋ฌ์ฑํ๊ธฐ ์ํ ๊ฐ๋ ฅํ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํฉ๋๋ค. ๋ด๋ถ ์ํ๋ฅผ ๋ณดํธํ๊ณ ๋ฌด๋จ ์ ๊ทผ์ ๋ฐฉ์งํจ์ผ๋ก์จ, ๋น๊ณต๊ฐ ํ๋๋ ์ฝ๋ ํ์ง, ์ ์ง๋ณด์์ฑ, ๋ณด์์ ํฅ์์ํต๋๋ค. ๋ช ๊ฐ์ง ์ ํ ์ฌํญ๊ณผ ๊ณ ๋ ค ์ฌํญ์ด ์์ง๋ง, ๋น๊ณต๊ฐ ํ๋ ์ฌ์ฉ์ ์ด์ ์ ์ผ๋ฐ์ ์ผ๋ก ๋จ์ ์ ๋ฅ๊ฐํ๋ฏ๋ก, ๊ฐ๋ ฅํ๊ณ ์ ๋ขฐํ ์ ์๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๋ฐ ์ ์ฉํ ๋๊ตฌ์ ๋๋ค. ๋น๊ณต๊ฐ ํ๋๋ฅผ ํ์ค ๊ดํ์ผ๋ก ์ฑํํ๋ฉด ๋ ๊นจ๋ํ๊ณ , ๋ ์์ ํ๋ฉฐ, ๋ ์ ์ง๋ณด์ํ๊ธฐ ์ฌ์ด ์ฝ๋๋ฒ ์ด์ค๋ก ์ด์ด์ง ๊ฒ์ ๋๋ค.
๋น๊ณต๊ฐ ํ๋์ ๋ฌธ๋ฒ, ์ด์ , ์ค์ ์์ ๋ฅผ ์ดํดํจ์ผ๋ก์จ, ์๋ฐ์คํฌ๋ฆฝํธ ํด๋์ค์ ์ค๊ณ์ ๊ตฌํ์ ํจ๊ณผ์ ์ผ๋ก ๊ฐ์ ํ์ฌ ๊ถ๊ทน์ ์ผ๋ก ๋ ๋์ ์ํํธ์จ์ด๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
์ด ์ข ํฉ ๊ฐ์ด๋๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋น๊ณต๊ฐ ํ๋๋ฅผ ์ฌ์ฉํ์ฌ ํด๋์ค ์บก์ํ๋ฅผ ๋ง์คํฐํ๊ธฐ ์ํ ๊ฒฌ๊ณ ํ ๊ธฐ๋ฐ์ ์ ๊ณตํ์ต๋๋ค. ์ด์ ์ง์์ ์ค์ฒ์ ์ฎ๊ฒจ ๋ ์์ ํ๊ณ ์ ์ง๋ณด์ํ๊ธฐ ์ฌ์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์๊ฐ์ ๋๋ค!