데이터(속성)와 기능(메소드)을 묶는다
느슨하게 결합한다
순서에 따라 절차적으로 코드를 작성하는 것이 아니라, 코드가 상징하는 실제 모습과 닮게 코드를 모아 결합하는 것
= 구현을 수정하기 쉽다
은닉화
내부 데이터나 내부 구현이 외부로 노출되지 않는다
다른 언어에서는 일반적으로
public,protected,private등 키워드로 구현하지만JavaScript는 키워드가 없다
= 클로저, 깊은 복사, 함수형 반환 등을 활용
내부 구현은 복잡한데 외부로 노출되는 부분(인터페이스)은 단순하다
캡슐화와 헷갈릴 수 있다
= 캡슐화: 코드나 데이터의 은닉
= 추상화: 필요하지 않은 것은 노출시키지 않고, 단순한 이름으로 정의
ex) 사람 클래스
학생은 기본적으로 사람이면서
추가로 공부하는 내용의 속성, 공부하다 라는 메소드를 가진다
ex) 학생 클래스
학생 클래스를 처음부터 작성할 필요 없이 사람 클래스에서 기본적인 내용을 가져온 뒤 필요한 내용을 추가하여 만들 수 있다
ex) 학생 클래스
같은 클래스에서 상속받은 클래스라도
속성이나 메소드는 다르게 구현될 수 있다
ex) 동물 클래스가 메소드로 말하다를 가진다 할 때
로 각자 다르게 구현된다