클래스(class)는 객체지향프로그래밍에서 핵심적인 개념으로 기존 프로토타입 기반 상속을 바탕으로 주어진 이름의 새로운 타입을 만들어내는 도구이다.
필요한 구조와 기능을 미리 정의해놓은 템플릿 역할을 해서, 이 템플릿을 기반으로 객체를 생성하고, 관리하기위해 사용된다. (객체는 클래스의 인스턴스)
class Person {
// 클래스의 생성자 함수. 하나의 클래스는 하나의 생성자만 정의할 수 있음.
// 생성자 함수는 new 키워드가 호출될때 자동으로 실행
constructor(name) {
//프로퍼티 선언하고싶을때 constructor안에서 선언
this.name = name;
// 'this'는 생성된 객체를 나타냄. 객체의 'name' 속성을 인자로 설정함.
}
// 메소드는 클래스가 생성한 인스턴스를 통해 사용할 수 있음
sayYourName() {
console.log(`삐리비리. 제 이름은 ${this.name}입니다.`);
}
}
이 클래스를 기반으로 객체를 생성하면, 각각의 객체는 자신만의 name 속성과 sayYourName 메소드를 가지게 된다. 이를 통해 각 로봇 객체는 자신의 이름을 말할 수 있게 된다.
기존 클래스에서 상속된 새로운 클래스를 만든다. 상속 받으려면 extends 키워드를 사용해야한다.
class BabyPerson extends Person {
constructor(name) {
super(name); // 부모 클래스 생성자 호출
this.ownName = 'loopy';
}
sayBabyName() {
// 상속을 받게되면 부모 클래스의 메소드를 사용할 수 있음
this.sayYourName();
console.log('Hi');
}
}
super()
는 부모 클래스의 메소드를 *오버라이딩 할 때 사용된다.
부모 클래스 Person으로 name을 상속받기 때문에 다시 선언,초기화할 필요가 없다.
*오버라이딩(Overriding)은 상속 관계에서 부모 클래스에 정의된 메소드를 자식 클래스에서 재정의하여 사용하는 개념.
class Zin
constructor(name,age){
this.info = `내 이름은 ${name}이고,나이는 ${age}야.`
}
}
console.log(new Zin('loopy',21).info)
//class 상속받기
class babyZin extends Zin{
constructor(info){
super(info)
}
}
console.log(new Zin('zin',25).info)
부모클래스에서 메소드를 정의하지않고, 생성자만 정의하였다.
메소드를 안쓰면 추가적으로 프로퍼티를 선언할수 없어서 추가정보를 담을 수 있는 방법이 제한된다.
새로운 기능을 추가하거나 정보를 확장하기 위해서는 부모 클래스에 있는 프로퍼티를 활용해야한다.
#
을 이용한 비공개필드라는 개념으로 클래스 내부에서만 접근가능한 비공개 프로퍼티를 만들 수 있다.
class를 통해 인스턴스를 만들었을 때 제약없이 인스턴스의 프로퍼티에 접근하는 것이 가능하다.
class Person {
#password
constructor(id, pw) {
this.id = id;
this.#password = pw; //'password'비공개 필드 초기화
}
sayYourName() {
console.log(`제 이름은 ${this.id}입니다.`);
}
get password(){ //비밀번호 반환
return this.#password
}
set password(pw){ //비밀번호 설정
this.#password = pw;
}
}
const person = new Person('loopy', 123);
console.log(person.password)
person.password = 456 //'set'메소드로 값을 변경
console.log(person.password)
객체의 속성을 접근,설정하는 메소드
get
메소드는 객체의 속성을 가져올 때 호출되며, 값을 반환한다.set
메소드는 객체의 속성을 설정할 때 호출되며, 값을 설정한다.객체의 비밀번호 정보를 클래스 내부의 비공개 필드를 통해 관리하고, 클래스 외부에서 get
과 set
을 통해 비밀번호를 설정하거나 가져올 수 있다.