์๋ฐ์คํฌ๋ฆฝํธ์์ Getter์ Setter๋ ๊ฐ์ฒด์ ํ๋กํผํฐ๋ฅผ ์ ์ดํ๋ ๋ฉ์๋์ ๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ Static ํค์๋๋ ํด๋์ค ๋ ๋ฒจ์์ ๋ฉ์๋์ ํ๋กํผํฐ๋ฅผ ์ ์ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ด ๊ธ์์๋ ์ด๋ฌํ ๊ฐ๋ ๋ค์ ์์ธํ ์์๋ณด๊ณ , ์ด๋ป๊ฒ ํ์ฉํ ์ ์๋์ง ์ค๋ช ํฉ๋๋ค.
โฃ ๋ชฉ์ฐจ
Getter์ setter ๊ทธ๋ฆฌ๊ณ static ๋ฉค๋ฒ๋ ๋ชจ๋ ํด๋์ค์ ๊น์ ์ฐ๊ด์ด ์์ต๋๋ค. ์ด๋ค์ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์์ ํด๋์ค์ ๊ธฐ๋ฅ์ ํ์ฅํ๊ณ ์ ์ดํ๋ ๋ฐ ์ค์ํ ์ญํ ์ ํฉ๋๋ค. ํด๋์ค์ ๋ํ ์ถ๊ฐ ์ ๋ณด๋ ์๋ ํฌ์คํ
์์ ํ์ธํ์ค ์ ์์ต๋๋ค.๐
01. Getter์ Setter์ ๊ธฐ๋ณธ ๊ฐ๋ ๐
Getter๋?
Getter๋ ๊ฐ์ฒด์ ํ๋กํผํฐ ๊ฐ์ ๋ฐํํ๋ ๋ฉ์๋์ ๋๋ค. ํ๋กํผํฐ๋ฅผ ์ง์ ์ ๊ทผํ๋ ๋์ , Getter๋ฅผ ํตํด ๊ฐ์ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค. Getter๋ฅผ ์ ์ํ ๋๋ get ํค์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค.
Setter๋?
Setter๋ ๊ฐ์ฒด์ ํ๋กํผํฐ ๊ฐ์ ์ค์ ํ๋ ๋ฉ์๋์ ๋๋ค. ํ๋กํผํฐ์ ์๋ก์ด ๊ฐ์ ํ ๋นํ ๋ Setter๋ฅผ ์ฌ์ฉํ์ฌ ์ถ๊ฐ์ ์ธ ๊ฒ์ฆ์ด๋ ๋ก์ง์ ํฌํจํ ์ ์์ต๋๋ค. Setter๋ฅผ ์ ์ํ ๋๋ set ํค์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค.
02. Getter์ Setter ์ฌ์ฉ๋ฒ๐
์๋ฐ์คํฌ๋ฆฝํธ์์ Getter์ Setter๋ ๊ฐ์ฒด์ ํ๋กํผํฐ์ ์ ๊ทผํ๊ณ ๊ฐ์ ์ค์ ํ๋ ๋ฉ์๋์ ๋๋ค. ์ด๋ฅผ ํตํด ๊ฐ์ฒด์ ๋ด๋ถ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ฒ ๊ด๋ฆฌํ๊ณ , ์ธ๋ถ ์ ๊ทผ์ ์ ์ดํ ์ ์์ต๋๋ค. ES2019์์ ๋์ ๋ # ํ๊ธฐ๋ฒ์ ์ฌ์ฉํ์ฌ ํ๋ผ์ด๋น ํ๋๋ฅผ ์ ์ํ๊ณ , ์ด๋ฅผ Getter์ Setter๋ก ์ ์ดํ๋ ๋ฐฉ๋ฒ์ ์์ ๋ก ์ค๋ช ํ๊ฒ ์ต๋๋ค.
๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ
1. ํ๋ผ์ด๋น ํ๋ ์ ์ธ ๋ฐ ์ด๊ธฐํ
ํ๋ผ์ด๋น ํ๋๋ ํด๋์ค ๋ด๋ถ์์๋ง ์ ๊ทผํ ์ ์์ผ๋ฉฐ, # ํ๊ธฐ๋ฒ์ ์ฌ์ฉํ์ฌ ์ ์ธํฉ๋๋ค.
class Person {
#name; // ํ๋ผ์ด๋น ํ๋๋ฅผ ์ ์ธํฉ๋๋ค.
constructor(name) {
this.#name = name; // ์์ฑ์์์ ํ๋ผ์ด๋น ํ๋๋ฅผ ์ด๊ธฐํํฉ๋๋ค.
}
2. Getter ์ ์
Getter๋ get ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ํ๋ฉฐ, ํ๋ผ์ด๋น ํ๋์ ๊ฐ์ ๋ฐํํฉ๋๋ค.
// Getter ๋ฉ์๋
get name() {
return this.#name; // ํ๋ผ์ด๋น ํ๋์ ๊ฐ์ ๋ฐํํฉ๋๋ค.
}
3. Setter ์ ์
Setter๋ set ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ํ๋ฉฐ, ํ๋ผ์ด๋น ํ๋์ ๊ฐ์ ์ค์ ํ ๋ ํธ์ถ๋ฉ๋๋ค. Setter์์๋ ๊ฐ์ ๊ฒ์ฆํ๊ฑฐ๋ ์ถ๊ฐ์ ์ธ ๋ก์ง์ ํฌํจํ ์ ์์ต๋๋ค.
// Setter ๋ฉ์๋
set name(newName) {
if (newName) { // newName์ด ๋น ๊ฐ์ด ์๋์ง ํ์ธํฉ๋๋ค.
this.#name = newName; // ํ๋ผ์ด๋น ํ๋์ ๊ฐ์ ์๋ก์ด ๊ฐ์ผ๋ก ์ค์ ํฉ๋๋ค.
} else {
console.log('์ด๋ฆ์ ๋น ๊ฐ์ผ ์ ์์ต๋๋ค.'); // newName์ด ๋น ๊ฐ์ด๋ฉด ๊ฒฝ๊ณ ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
}
}
}
4. ๊ฐ์ฒด ์์ฑ ๋ฐ Getter์ Setter ํธ์ถ
๊ฐ์ฒด๋ฅผ ์์ฑํ ํ, Getter์ Setter๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ผ์ด๋น ํ๋์ ์ ๊ทผํ๊ณ ๊ฐ์ ์ค์ ํ ์ ์์ต๋๋ค.
const person = new Person('Alice'); // ์๋ก์ด Person ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ name์ 'Alice'๋ก ์ด๊ธฐํํฉ๋๋ค.
console.log(person.name); // Getter ํธ์ถ: 'Alice'๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
person.name = 'Bob'; // Setter ํธ์ถ: #name์ ๊ฐ์ 'Bob'์ผ๋ก ๋ณ๊ฒฝํฉ๋๋ค.
console.log(person.name); // Getter ํธ์ถ: 'Bob'์ ์ถ๋ ฅํฉ๋๋ค.
person.name = ''; // Setter ํธ์ถ: '์ด๋ฆ์ ๋น ๊ฐ์ผ ์ ์์ต๋๋ค.' ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
console.log(person.name); // Getter ํธ์ถ: #name์ ๊ฐ์ด ์ฌ์ ํ 'Bob'์์ ํ์ธํ ์ ์์ต๋๋ค.
03. Getter์ Setter์ ์ค์ ํ์ฉ ์์ ๐ก
์๋ฐ์คํฌ๋ฆฝํธ์ Getter์ Setter๋ ๊ฐ์ฒด์ ํ๋กํผํฐ์ ์ ๊ทผํ๊ณ ์ค์ ํ๋ ๋ฐ ์ ์ฉํ ๋ฉ์๋์ ๋๋ค. ์ด ๋ฉ์๋๋ค์ ์ฌ์ฉํ๋ฉด ํ๋กํผํฐ ๊ฐ์ ์ฝ๊ฑฐ๋ ์ธ ๋ ์ถ๊ฐ์ ์ธ ๋ก์ง์ ์ ์ฉํ ์ ์์ต๋๋ค. ์ค์ ํ์ฉ ์์ ๋ฅผ ํตํด Getter์ Setter์ ์ ์ฉ์ฑ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
์์ 1: ์ฌ์ฉ์ ์ ๋ ฅ ๊ฒ์ฆ
์ฌ์ฉ์ ํด๋์ค์์ ์ด๋ฉ์ผ ์ฃผ์๋ฅผ ๊ฒ์ฆํ๋ Getter์ Setter
class User {
#email; // ํ๋ผ์ด๋น ํ๋๋ฅผ ์ ์ธํฉ๋๋ค.
constructor(email) {
this.#email = email;
}
// Getter ๋ฉ์๋
get email() {
return this.#email;
}
// Setter ๋ฉ์๋
set email(newEmail) {
if (this.validateEmail(newEmail)) {
this.#email = newEmail;
} else {
console.log('Invalid email format');
}
}
validateEmail(email) {
return /\S+@\S+\.\S+/.test(email); // ์ด๋ฉ์ผ ํ์์ ๊ฒ์ฆํ๋ ๊ฐ๋จํ ์ ๊ท ํํ์
}
}
const user = new User('test@example.com');
console.log(user.email); // Getter ํธ์ถ: 'test@example.com'
user.email = 'invalid-email'; // Setter ํธ์ถ: 'Invalid email format'
console.log(user.email); // Getter ํธ์ถ: 'test@example.com'
user.email = 'new@example.com'; // Setter ํธ์ถ: ์ ํจํ ์ด๋ฉ์ผ ํ์
console.log(user.email); // Getter ํธ์ถ: 'new@example.com'
์ด ์์ ์์๋ ์ด๋ฉ์ผ ์ฃผ์๋ฅผ ๊ฒ์ฆํ๋ ๋ก์ง์ด Setter์ ํฌํจ๋์ด ์์ต๋๋ค. ์๋ชป๋ ํ์์ ์ด๋ฉ์ผ ์ฃผ์๋ฅผ ์ค์ ํ๋ ค๊ณ ํ๋ฉด ๊ฒฝ๊ณ ๋ฉ์์ง๊ฐ ์ถ๋ ฅ๋๊ณ , ๊ธฐ์กด ์ด๋ฉ์ผ ์ฃผ์๋ ๋ณ๊ฒฝ๋์ง ์์ต๋๋ค.
์์ 2: ์ ํ ๊ฐ๊ฒฉ ๊ด๋ฆฌ
์ ํ ํด๋์ค์์ ๊ฐ๊ฒฉ์ ๊ฒ์ฆํ๋ Getter์ Setter
class Product {
#price; // ํ๋ผ์ด๋น ํ๋๋ฅผ ์ ์ธํฉ๋๋ค.
constructor(price) {
this.#price = price;
}
// Getter ๋ฉ์๋
get price() {
return this.#price;
}
// Setter ๋ฉ์๋
set price(newPrice) {
if (newPrice > 0) {
this.#price = newPrice;
} else {
console.log('Price must be a positive number');
}
}
}
const product = new Product(100);
console.log(product.price); // Getter ํธ์ถ: 100
product.price = -50; // Setter ํธ์ถ: 'Price must be a positive number'
console.log(product.price); // Getter ํธ์ถ: 100
product.price = 150; // Setter ํธ์ถ: ์ ํจํ ๊ฐ๊ฒฉ
console.log(product.price); // Getter ํธ์ถ: 150
์ด ์์ ์์๋ ๊ฐ๊ฒฉ์ด 0๋ณด๋ค ํฐ์ง ๊ฒ์ฆํ๋ ๋ก์ง์ด Setter์ ํฌํจ๋์ด ์์ต๋๋ค. ์ ํจํ์ง ์์ ๊ฐ๊ฒฉ์ ์ค์ ํ๋ ค๊ณ ํ๋ฉด ๊ฒฝ๊ณ ๋ฉ์์ง๊ฐ ์ถ๋ ฅ๋๊ณ , ๊ธฐ์กด ๊ฐ๊ฒฉ์ ๋ณ๊ฒฝ๋์ง ์์ต๋๋ค.
์์ 3: ํ์ ์ ์ ๊ด๋ฆฌ
ํ์ ํด๋์ค์์ ์ ์๋ฅผ ๊ด๋ฆฌํ๋ Getter์ Setter
class Student {
#score; // ํ๋ผ์ด๋น ํ๋๋ฅผ ์ ์ธํฉ๋๋ค.
constructor(score) {
this.#score = score;
}
// Getter ๋ฉ์๋
get score() {
return this.#score;
}
// Setter ๋ฉ์๋
set score(newScore) {
if (newScore >= 0 && newScore <= 100) {
this.#score = newScore;
} else {
console.log('Score must be between 0 and 100');
}
}
}
const student = new Student(85);
console.log(student.score); // Getter ํธ์ถ: 85
student.score = 150; // Setter ํธ์ถ: 'Score must be between 0 and 100'
console.log(student.score); // Getter ํธ์ถ: 85
student.score = 95; // Setter ํธ์ถ: ์ ํจํ ์ ์
console.log(student.score); // Getter ํธ์ถ: 95
์ด ์์ ์์๋ ์ ์๊ฐ 0๊ณผ 100 ์ฌ์ด์ธ์ง ๊ฒ์ฆํ๋ ๋ก์ง์ด Setter์ ํฌํจ๋์ด ์์ต๋๋ค. ์ ํจํ์ง ์์ ์ ์๋ฅผ ์ค์ ํ๋ ค๊ณ ํ๋ฉด ๊ฒฝ๊ณ ๋ฉ์์ง๊ฐ ์ถ๋ ฅ๋๊ณ , ๊ธฐ์กด ์ ์๋ ๋ณ๊ฒฝ๋์ง ์์ต๋๋ค.
04. Static ํค์๋์ ๊ฐ๋ ๊ณผ ์ฌ์ฉ๋ฒ๐งฉ
์๋ฐ์คํฌ๋ฆฝํธ์ static ํค์๋๋ ํด๋์ค์ ์ธ์คํด์ค๊ฐ ์๋ ํด๋์ค ์์ฒด์ ์ํ๋ ๋ฉ์๋์ ํ๋กํผํฐ๋ฅผ ์ ์ํ ๋ ์ฌ์ฉ๋ฉ๋๋ค. Static ๋ฉ์๋์ ํ๋กํผํฐ๋ ํด๋์ค์ ํน์ ์ธ์คํด์ค๊ฐ ์๋ ํด๋์ค ์์ฒด์ ๋ฌถ์ฌ ์์ผ๋ฏ๋ก, ํด๋์ค ์ด๋ฆ์ ํตํด ์ง์ ํธ์ถํ ์ ์์ต๋๋ค.
Static ํค์๋์ ๊ฐ๋
- Static ๋ฉ์๋์ ํ๋กํผํฐ๋ ํด๋์ค์ ์ธ์คํด์ค๊ฐ ์๋ ํด๋์ค ์์ฒด์ ์ํฉ๋๋ค.
- ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์์ฑํ์ง ์๊ณ ๋ ํธ์ถํ ์ ์์ต๋๋ค.
- Static ๋ฉ์๋์ ํ๋กํผํฐ๋ ์ผ๋ฐ์ ์ผ๋ก ์ ํธ๋ฆฌํฐ ํจ์๋ ์์ ๊ฐ์ ์ ์ํ ๋ ์ ์ฉํฉ๋๋ค.
Static ๋ฉ์๋ ์ ์
Static ๋ฉ์๋๋ static ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ํฉ๋๋ค.
class Calculator {
// Static ๋ฉ์๋ ์ ์
static add(a, b) {
return a + b;
}
static multiply(a, b) {
return a * b;
}
}
console.log(Calculator.add(5, 3)); // 8
console.log(Calculator.multiply(5, 3)); // 15
์ ์ฝ๋์์ add์ multiply ๋ฉ์๋๋ Calculator ํด๋์ค์ ์ธ์คํด์ค๊ฐ ์๋ ํด๋์ค ์์ฒด์ ์ํฉ๋๋ค. ๋ฐ๋ผ์ Calculator ํด๋์ค ์ด๋ฆ์ ์ฌ์ฉํ์ฌ ์ง์ ํธ์ถํ ์ ์์ต๋๋ค.
Static ํ๋กํผํฐ ์ ์
Static ํ๋กํผํฐ๋ static ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ํฉ๋๋ค.
class Configuration {
// Static ํ๋กํผํฐ ์ ์
static apiUrl = 'https://api.example.com';
static getApiUrl() {
return Configuration.apiUrl;
}
}
console.log(Configuration.apiUrl); // 'https://api.example.com'
console.log(Configuration.getApiUrl()); // 'https://api.example.com'
์ ์ฝ๋์์ apiUrl์ Configuration ํด๋์ค์ static ํ๋กํผํฐ๋ก, ํด๋์ค ์ด๋ฆ์ ํตํด ์ง์ ์ ๊ทผํ ์ ์์ต๋๋ค.
05. Static ๋ฉ์๋์ ํ๋กํผํฐ์ ์ค์ ํ์ฉ ์์ ๐
์๋ฐ์คํฌ๋ฆฝํธ์ static ๋ฉ์๋์ ํ๋กํผํฐ๋ ํด๋์ค ์์ฒด์ ์ํ๋ฉฐ ์ธ์คํด์คํ๋ ๊ฐ์ฒด๊ฐ ์๋ ํด๋์ค ์์ฒด์ ์ง์ ์ ์ผ๋ก ์ ๊ทผํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ์ด๋ฌํ static ๋ฉ์๋์ ํ๋กํผํฐ๋ ๋ค์๊ณผ ๊ฐ์ ์ค์ ์ ์ธ ํ์ฉ ์์ ๋ค์ด ์์ต๋๋ค.
1. ์ ํธ๋ฆฌํฐ ํจ์๋ก์์ ํ์ฉ
class MathUtil {
static multiply(a, b) {
return a * b;
}
static add(a, b) {
return a + b;
}
}
// ์ธ์คํด์คํ ์์ด ํด๋์ค ์ด๋ฆ์ ํตํด ํธ์ถ ๊ฐ๋ฅ
console.log(MathUtil.multiply(5, 10)); // 50
console.log(MathUtil.add(3, 7)); // 10
์ ์์ ์์ MathUtil ํด๋์ค๋ ์ํ ๊ด๋ จ ์ ํธ๋ฆฌํฐ ํจ์๋ฅผ ์ ๊ณตํฉ๋๋ค. multiply์ add ๋ฉ์๋๋ ์ธ์คํด์คํ๋ ๊ฐ์ฒด๊ฐ ์๋๋ผ ํด๋์ค ์์ฒด์ ์ํด ์์ผ๋ฏ๋ก, MathUtil.multiply์ MathUtil.add๋ฅผ ํตํด ์ง์ ํธ์ถํ ์ ์์ต๋๋ค.
2. ํฉํ ๋ฆฌ ๋ฉ์๋๋ก์์ ํ์ฉ
class Car {
constructor(make, model) {
this.make = make;
this.model = model;
}
static createCar(make, model) {
return new Car(make, model);
}
}
let myCar = Car.createCar('Toyota', 'Corolla');
console.log(myCar); // Car { make: 'Toyota', model: 'Corolla' }
์ ์์ ์์ Car ํด๋์ค๋ createCar๋ผ๋ static ๋ฉ์๋๋ฅผ ํตํด ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ ํฉํ ๋ฆฌ ๋ฉ์๋๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด๋ ๊ฐ์ฒด ์์ฑ ์์ ๋ณต์กํ ๋ก์ง์ด๋ ์ด๊ธฐํ ๊ณผ์ ์ ๊ฐ์ถ๊ณ ๊ฐ๋จํ ์ธ์คํด์ค๋ฅผ ์์ฑํ ์ ์๋๋ก ๋์ต๋๋ค.
3. ๋ฐ์ดํฐ ๊ด๋ฆฌ์ ์ฐ๋์ ์ํ ์ ํธ๋ฆฌํฐ ํ๋กํผํฐ
class API {
static baseUrl = 'https://api.example.com';
static fetchData(endpoint) {
return fetch(`${API.baseUrl}/${endpoint}`)
.then(response => response.json())
.catch(error => console.error('Error fetching data:', error));
}
}
// ์์ ์์๋ fetch API๋ฅผ ์ฌ์ฉํ์ง๋ง, ์ค์ API ์ฃผ์์ ์ฐ๋๋์ง๋ ์์ต๋๋ค.
API.fetchData('users')
.then(data => console.log(data))
.catch(error => console.error(error));
์ ์์ ์์ API ํด๋์ค๋ API์ ํต์ ํ ๋ ์ฌ์ฉํ ๊ธฐ๋ณธ URL์ static ํ๋กํผํฐ๋ก ์ ์ํ๊ณ ์์ต๋๋ค. fetchData ๋ฉ์๋๋ ์ด baseUrl์ ๊ธฐ๋ฐ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๋ฉ์๋์ ๋๋ค. ์ด๋ฌํ ๋ฐฉ์์ผ๋ก static ํ๋กํผํฐ๋ ํด๋์ค ์ ์ญ์์ ๊ณต์ ๋๋ฉฐ, ํด๋์ค์ ๊ด๋ จ๋ ์ฌ๋ฌ ๋ฉ์๋์์ ํ์ฉ๋ ์ ์์ต๋๋ค.
06. Getter, Setter, Static์ ์ฌ์ฉํ ๋ ์ฃผ์ํ ์ โ ๏ธ
JavaScript์์ Getter, Setter, ๊ทธ๋ฆฌ๊ณ Static์ ์ฌ์ฉํ ๋ ๋ช ๊ฐ์ง ์ฃผ์ํ ์ ์ด ์์ต๋๋ค.
Getter์ Setter ์ฌ์ฉ ์
- ๋ฌดํ๋ฃจํ์ ์ฃผ์: Getter๋ Setter ๋ด์์ ๋์ผํ ํ๋กํผํฐ์ ์ ๊ทผํ๊ฒ ๋๋ฉด ๋ฌดํ๋ฃจํ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ์ด๋ ํ๋กํผํฐ ๊ฐ์ ์ฝ๊ฑฐ๋ ์ค์ ํ ๋๋ง๋ค Getter๋ Setter๊ฐ ๋ฐ๋ณตํด์ ํธ์ถ๋๋ ๋ฌธ์ ๋ฅผ ์ด๋ํ ์ ์์ต๋๋ค. ์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด Getter์ Setter ๋ด์์ ๋ค๋ฅธ ํ๋กํผํฐ๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ์ง์ ๊ฐ์ ์ ์ฅํ๋ ๋ฐฉ๋ฒ ๋ฑ์ ๊ณ ๋ คํด์ผ ํฉ๋๋ค.
- ๋ถ์ํจ๊ณผ์ ์ฃผ์: Getter์ Setter๋ ๋ณดํต ๊ณ์ฐ๋ ๊ฐ์ ๋ฐํํ๊ฑฐ๋ ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ ๊ธฐ๋ฅ์ ์ํํฉ๋๋ค. ์ด ๋ ๋ค๋ฅธ ๋ถ์ํจ๊ณผ๊ฐ ๋ฐ์ํ์ง ์๋๋ก ์ฃผ์ํด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, Setter์์ ๋ค๋ฅธ ๊ฐ์ฒด์ ์ํ๋ฅผ ๋ณ๊ฒฝํ๊ฑฐ๋ ์ธ๋ถ ๋ฆฌ์์ค์ ์ํฅ์ ์ฃผ๋ ์์ ์ ์ํํ์ง ์๋ ๊ฒ์ด ์ข์ต๋๋ค.
Static ์ฌ์ฉ ์
- ์ธ์คํด์ค ํ๋กํผํฐ์ ์ ๊ทผ ๋ถ๊ฐ: Static ๋ฉ์๋๋ ํ๋กํผํฐ๋ ํด๋์ค ์์ฒด์ ์ํ๋ฏ๋ก ์ธ์คํด์คํ๋ ๊ฐ์ฒด์์๋ ์ง์ ์ ๊ทผํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ Static ๋ฉ์๋ ๋ด์์๋ this๋ฅผ ์ฌ์ฉํ์ฌ ์ธ์คํด์ค ํ๋กํผํฐ๋ ๋ฉ์๋์ ์ ๊ทผํ ์ ์์ต๋๋ค.
- ์์๊ณผ ํจ๊ป ์ฌ์ฉ ์ ์ฃผ์: ์์๋ ํด๋์ค์์ Static ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ํ ์๋ ์์ง๋ง, ์ผ๋ฐ์ ์ผ๋ก ์ธ์คํด์ค ๋ฉ์๋์ฒ๋ผ ๋์ํ์ง ์์ผ๋ฉฐ, ๋ถ๋ชจ ํด๋์ค์ Static ๋ฉ์๋์ ์ ๊ทผํ๋ ค๋ฉด super๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ์ด๋ฅผ ์ดํดํ๊ณ ์ ์ ํ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
class Rectangle {
constructor(width, height) {
this._width = width;
this._height = height;
}
// Getter
get area() {
return this._width * this._height;
}
// Setter
set dimensions({ width, height }) {
if (width > 0 && height > 0) {
this._width = width;
this._height = height;
} else {
throw new Error('Width and height must be positive numbers');
}
}
// Static method
static isEqual(rect1, rect2) {
return rect1._width === rect2._width && rect1._height === rect2._height;
}
}
// ์ฌ์ฉ ์์
let rect1 = new Rectangle(10, 5);
let rect2 = new Rectangle(5, 10);
console.log(rect1.area); // 50
rect1.dimensions = { width: 20, height: 10 };
console.log(rect1.area); // 200
console.log(Rectangle.isEqual(rect1, rect2)); // false
์ด ์์ ์์๋ Getter์ Setter๋ฅผ ์ฌ์ฉํ์ฌ ์ง์ฌ๊ฐํ์ ๋ฉด์ ์ ๊ณ์ฐํ๊ณ , Static ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ ๊ฐ์ ์ง์ฌ๊ฐํ์ด ๊ฐ์์ง ๋น๊ตํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค. ์ฃผ์์ฌํญ์ ์ ์ดํดํ๊ณ ์ ์ ํ ์ฌ์ฉํ๋ฉด JavaScript์ ํด๋์ค์์ ๋์ฑ ํจ์จ์ ์ด๊ณ ์์ ํ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.