클래스와 인스턴스
하나의 모델이 되는 청사진으로 써 자동차로 예를 들 수 있다.
Car라는 class를 만들어 두고 이 안의 속성값으로 인스턴스를 만들 수 있다.
// class
function Car {
constructor(brand,name,color){ // 인스턴스가 초기화될 때 실행되는 생성자 함수
this.brand = brand;
this.name = name;
this.color = color;
}
}
//instance
const avante = new Car ('hyundai','avante','black')
//avante라는 인스턴스 생성
캡슐화는 데이터(속성)와 기능(메소드)을 따로 정의하는 것이 아닌, 하나의 객체 안에 넣어서 묶는 것. 데이터와 기능이 느슨한 결합을 하는 것을 말한다.
느슨한 결합은 코드 실행 순서에 따라 절차적으로 코드를 작성하는 것이 아니라, 코드가 상징하는 실제 모습과 닮게 코드를 모아 결합하는 것을 의미한다.
ex)
마우스 구동 : 스위치가 눌리고 전기 신호가 생겨 전선을 타고 흐른다.와 같은 전 과정을 이곳 저곳에 나누어 작성하는 것이 아닌 객체의 기능을 상상할 수 있게 작성하는 것이 느슨한 결합을 추구하는 코드 작성법이다.
캡슐화에는 "은닉화"의 특징도 포함하고 있다. 내부 데이터나 내부 구현이 외부로 노출되지 않도록 만드는 것.
디테일한 구현이나 데이터는 숨기고, 객체 외부에서 필요한 동작 메소드만 노출 시켜야 한다.
은닉화의 특징을 살려서 코드를 작성하면 객체 내 메소드의 구현만 수정하고,노출된 메소드를 사용하는 코드 흐름은 바뀌지 않도록 만들 수 있다.
부모 클래스의 특징을 자식 클래스가 물려 받는 것
부모/ 자식으로 이야기하기도 하지만
기본 클래스의 특징을 파생 클래스가 상속 받는다고 표현이 적합하다.
ex)
human 클래스에서 student 클래스로 상속
human 클래스에 name,age,gender 등이 있다면
studenet 클래스에서 human 클래스에 name,age,gender등을 받고 learning등을 추가할 수 있다.
내부 구현이 복잡하지만 실제로 노출되는 부분은 단순하게 만든다는 개념
ex)
전화라는 객체에 스피커 ,마이크가 존재하면 서킷 보드 등 내부 구현이 되어있다.
그러나 실제로 우리가 사용할 때 단순히 수화기 들고 버튼을 눌러서 해결
캡슐화가 코드나 데이터의 은닉에 포커스가 맞춰져있다면, 추상화는 클래스를 사용하는 사람이 필요하지 않은 메소드 등을 노출시키지 않고, 단순한 이름으로 정의하는 것에 포커스가 맞춰져 있습니다.
"다양한 형태를 가질 수 있다"
"말하다"라는 동작의 본질은 "입으로 소리를 내다"를 의미한다. 그러나 각기 다른 동물들이 말을 할 때 제각각의 소리를 내는 것처럼 객체 역시 똑같은 메소드라 하더라도 다른 방식으로 구현 가능하다.
ex)
TextBox는 가로로 긴 네모 상자와 커서가 있는 형태일 것이고, Select 박스는 눌렀을 때 선택지가 나오도록 화면에 그려야 할 것입니다. 이처럼 같은 이름을 가진 메소드라도 조금씩 다르게 작동합니다. 이것이 바로 다형성입니다.