<JavaScript> 클래스와 객체지향 프로그래밍
- Developer/Web Frontend
- 2023. 8. 24.
자바스크립트 클래스는 객체지향 프로그래밍을 구현하기 위한 요소 중 하나로, 사실 자바스크립트는 프로토타입 기반의 언어지만, 클래스를 사용함으로써 객체지향 프로그래밍 구조를 더 쉽게 구현할 수 있습니다.
클래스는 객체를 만들어내는 '템플릿'으로 이해하면 좋을 것 같아요. 클래스를 생성하려면 class
키워드를 사용해야 합니다.
예를 들어, '사람'이라는 클래스를 생성해보겠습니다.
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
sayHello() {
console.log(`안녕하세요, 제 이름은 ${this.name}이고 나이는 ${this.age}입니다.`);
}
}
클래스 인스턴스 생성하기
위에서 작성한 클래스를 이용해 객체(인스턴스)를 생성해보겠습니다.
여기서 객체란 클래스의 실체(인스턴스)를 말하며, new
키워드를 사용해서 생성합니다.
const person1 = new Person('철수', 25);
person1.sayHello(); // 출력: 안녕하세요, 제 이름은 철수이고 나이는 25입니다.
이렇게 생성된 인스턴스를 사용하여 클래스가 가진 속성과 메서드에 접근할 수 있습니다.
클래스를 활용한 상속 구현하기
자바스크립트에서 클래스는 상속을 통해 다른 클래스의 속성과 메서드를 재사용할 수 있습니다.
그러기 위해서는 기본 클래스를 extends
키워드로 확장해야 해요.
class Employee extends Person {
constructor(name, age, position) {
super(name, age);
this.position = position;
}
introduce() {
console.log(`제 이름은 ${this.name}이고, 제 직급은 ${this.position}입니다.`);
}
}
여기서 super
를 통해 부모 클래스인 Person
의 생성자를 호출하여야 합니다.
이제 새로운 클래스 Employee
에서 상속받은 속성과 메서드를 사용할 수 있습니다.
const employee1 = new Employee('영희', 28, '프론트엔드 개발자');
employee1.sayHello(); // 출력: 안녕하세요, 제 이름은 영희이고 나이는 28입니다.
employee1.introduce(); // 출력: 제 이름은 영희이고, 제 직급은 프론트엔드 개발자입니다.
정적 메소드와 정적 속성 알아보기
정적 메소드와 정적 속성은 클래스에 종속되어 있는데, 인스턴스가 아닌 클래스 자체에 바로 접근할 수 있는 메소드와 속성입니다. static
키워드를 사용해서 선언합니다.
class Calculator {
static PI = 3.141592;
static add(a, b) {
return a + b;
}
static subtract(a, b) {
return a - b;
}
}
정적 메소드나 정적 속성은 인스턴스화하지 않고 바로 클래스를 통해 접근할 수 있습니다.
console.log(Calculator.PI); // 출력: 3.141592
console.log(Calculator.add(3, 5)); // 출력: 8
console.log(Calculator.subtract(10, 4)); // 출력: 6
자바스크립트에서의 접근 제어
자바스크립트는 접근 제어자가 없지만, 사용자 정의 접근 제어를 구현할 수 있습니다.
일반적으로 _(밑줄)을 변수 앞에 붙여서 비공개 속성임을 암시합니다.
속성 앞에 #
기호를 사용해 비공개 속성을 지정할 수도 있으나, 현재 적용되는 언어 구현에 따라 다릅니다.
class BankAccount {
#balance;
constructor(initialBalance) {
this.#balance = initialBalance;
}
deposit(amount) {
this.#balance += amount;
}
withdraw(amount) {
this.#balance -= amount;
}
checkBalance() {
console.log(`현재 잔액은 ${this.#balance}원 입니다.`);
}
}
이렇게 작성한 클래스를 사용하면, balance
속성은 클래스 외부에서 직접 접근할 수 없게 됩니다.
감사합니다.
'Developer > Web Frontend' 카테고리의 다른 글
<JavaScript> 문서 객체 모델(DOM) (0) | 2023.08.25 |
---|---|
<JavaScript> 이벤트 처리(Event Handling)와 리스너 (0) | 2023.08.24 |
<JavaScript> 내장 객체 소개 (0) | 2023.08.23 |
<JavaScript> 객체(Object)와 JSON 사용법 (0) | 2023.08.22 |
<JavaScript> 배열(Array)을 사용한 데이터 저장 (1) | 2023.08.22 |