반응형
5. 클래스와 상속
클래스란 무엇인가?
ES6에서 도입된 클래스(Class)는 JavaScript에서 객체 지향 프로그래밍(OOP)을 구현하는 새로운 방법입니다. 클래스는 프로토타입 기반 상속을 더 명확하고 간결하게 작성할 수 있게 해줍니다.
클래스 선언
클래스를 선언하는 방법은 다음과 같습니다.
1. 기본 클래스 선언
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
greet() {
console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
}
}
const alice = new Person('Alice', 30);
alice.greet(); // 출력: Hello, my name is Alice and I am 30 years old.
2. 클래스 표현식
클래스를 표현식으로 선언할 수도 있습니다.
const Person = class {
constructor(name, age) {
this.name = name;
this.age = age;
}
greet() {
console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
}
};
const bob = new Person('Bob', 25);
bob.greet(); // 출력: Hello, my name is Bob and I am 25 years old.
상속
클래스 상속은 extends
키워드를 사용하여 구현할 수 있습니다. 하위 클래스는 상위 클래스의 속성과 메서드를 상속받을 수 있습니다.
1. 상속 기본 예제
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
greet() {
console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
}
}
class Student extends Person {
constructor(name, age, grade) {
super(name, age); // 상위 클래스의 생성자를 호출
this.grade = grade;
}
study() {
console.log(`${this.name} is studying in grade ${this.grade}.`);
}
}
const charlie = new Student('Charlie', 20, 'Sophomore');
charlie.greet(); // 출력: Hello, my name is Charlie and I am 20 years old.
charlie.study(); // 출력: Charlie is studying in grade Sophomore.
2. 메서드 오버라이딩
하위 클래스에서 상위 클래스의 메서드를 재정의할 수 있습니다.
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
greet() {
console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
}
}
class Student extends Person {
constructor(name, age, grade) {
super(name, age);
this.grade = grade;
}
greet() {
console.log(`Hi, I'm ${this.name}, a ${this.grade} year student, and I'm ${this.age} years old.`);
}
}
const dave = new Student('Dave', 22, 'Junior');
dave.greet(); // 출력: Hi, I'm Dave, a Junior year student, and I'm 22 years old.
정적 메서드와 정적 속성
클래스에는 인스턴스화하지 않고 호출할 수 있는 정적 메서드와 정적 속성을 정의할 수 있습니다. 정적 메서드는 static
키워드를 사용하여 정의합니다.
1. 정적 메서드
class MathUtil {
static add(a, b) {
return a + b;
}
}
console.log(MathUtil.add(2, 3)); // 출력: 5
2. 정적 속성
정적 속성은 클래스 자체에 속합니다.
class Circle {
static PI = 3.14;
constructor(radius) {
this.radius = radius;
}
getArea() {
return Circle.PI * this.radius * this.radius;
}
}
const circle = new Circle(5);
console.log(circle.getArea()); // 출력: 78.5
console.log(Circle.PI); // 출력: 3.14
클래스 필드
ES6 이후, 클래스 필드 문법을 사용하여 클래스 내부에 속성을 정의할 수 있습니다.
1. 인스턴스 필드
class Person {
name = 'Unknown';
constructor(age) {
this.age = age;
}
greet() {
console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
}
}
const eva = new Person(28);
eva.greet(); // 출력: Hello, my name is Unknown and I am 28 years old.
2. 정적 필드
class Circle {
static PI = 3.14;
}
console.log(Circle.PI); // 출력: 3.14
결론
ES6에서 도입된 클래스와 상속 문법은 JavaScript에서 객체 지향 프로그래밍을 구현하는 새로운 방법을 제공합니다. 이를 통해 코드의 구조를 명확하게 하고, 상속과 정적 메서드, 정적 속성 등을 활용하여 더 강력하고 유연한 프로그램을 작성할 수 있습니다.
다음 글에서는 모듈 시스템에 대해 알아보겠습니다. 다음 글에서 만나요!
반응형
'JavaScript 최신 기능 시리즈 (ES6 이후)' 카테고리의 다른 글
[JavaScript 최신 기능 시리즈] 7일차: JavaScript의 새로운 빌트인 객체들: Map, Set 이해하기 (1) | 2024.08.07 |
---|---|
[JavaScript 최신 기능 시리즈] 6일차: JavaScript 모듈 시스템 이해하기 (0) | 2024.08.06 |
[JavaScript 최신 기능 시리즈] 4일차: JavaScript 화살표 함수 이해하기 (0) | 2024.08.04 |
[JavaScript 최신 기능 시리즈] 3일차: JavaScript 디스트럭처링 할당 이해하기 (0) | 2024.08.03 |
[JavaScript 최신 기능 시리즈] 2일차: JavaScript 템플릿 리터럴 이해하기 (0) | 2024.08.02 |