class Person {
// (선택) 퍼블릭 필드
name = "Anonymous";
// (선택) 프라이빗 필드(외부 접근 불가)
#ssn = "000000-0000000";
// 생성자: 인스턴스 생성 직후 1회 호출
constructor(name, ssn) {
if (name) this.name = name;
if (ssn) this.#ssn = ssn;
}
// 인스턴스 메서드(프로토타입에 저장됨, 모든 인스턴스가 공유)
greet() {
return `안녕하세요, 저는 ${this.name}입니다.`;
}
// 게터/세터: 속성처럼 접근하면서 로직 개입
get maskedSsn() {
return this.#ssn.replace(/\\d(?=\\d{4})/g, "*");
}
set rename(next) {
this.name = String(next).trim();
}
// 정적 메서드: 인스턴스가 아니라 클래스에서 호출
static isPerson(x) {
return x instanceof Person;
}
}
const p = new Person("Kim", "901010-1234567"); //생성자에 들어갈 인자
p.greet(); // "안녕하세요, 저는 Kim입니다."
p.maskedSsn; // "******-***4567"
Person.isPerson(p); // true
- 생성자(constructor): 인스턴스 초기화.
- 필드: 퍼블릭 필드, #private 필드(진짜 비공개).
- 메서드: 인스턴스 메서드는 프로토타입에 저장되어 공유된다.
- 정적(static): 클래스 자체에 귀속되는 유틸/상수/팩토리.