OOP(Object Oriented Programming)
- 객체를 이용해 프로그래밍하는 것
- 자바스크립트는 객체 지향 언어는 아니지만, 객체 지향 패턴으로 작성 가능
클래스와 인스턴스
- 클래스 : 특정 객체를 생성하기 위한 템플릿
- 생성자(constructor) 함수 : 속성을 초기화 시켜줄 수 있다
- 인스턴스 : 클래스의 속성과 메서드를 담고 있는 객체
OOP 주요 특징 4가지
- Encapsulation(캡슐화)
- 데이터와 메서드를 하나의 단위로 묶고, 구현 내용은 외부로부터 은닉한다.
- Inheritance(상속)
- 속성과 메서드를 물려받고, 객체들 간의 관계(부모/자식,슈퍼/서브 등)가 형성된다.
- Abstraction(추상화)
- 사용자에게 불필요한 복잡한 내부 구현을 숨기고, 노출되는 부분은 단순하게 만든다.
- Polymorphism(다형성)
- 요소들이 각자 특성에 맞는 여러 다른 형태로 가질 수 있다.
Prototype
- 다른 객체를 참조하는 경우 참조 대상
- 자바스크립트는 프로토타입 기반의 언어로 모든 객체는 자신의 부모 객체와 연결되어 있다.
- 상속 개념과 같이 부모 객체의 속성과 메서드를 상속받아 사용할 수 있다.
const user = {
name: 'Kim',
age: 20
}
user.__proto__ === Object.prototype
function User(name){
this.name = name;
}
const kim = new User('kim');
kim.__proto__ === User.prototype
kim.__proto__.__proto__ === Object.prototype
Prototype Chain
- 객체의 속성이나 메서드에 접근할 때 해당 객체에 존재하지 않는다면 자신의 부모의 프로토타입 객체를 검색하는 것
class
키워드를 쓰면 간단하게 작성할 수 있다.
extends
: 상속하겠다
super
: 부모 클래스에 전달
class User{
constructor(name){
this.name = name;
}
eat(){ console.log('냠냠') }
}
class Student extends User{
constructor(name){
super(name)
}
learn(){ console.log('공부중..')}
}
const stu1 = new Student('kim')
stu1.learn()
stu1.eat()
님양아치?