서로 연관되어 있는 변수, 함수를 객체(Object)로 그루핑한다
인간은 프로그래밍을 하면서 굉장히 많은 고도화된 코드들과 함수 변수들을 사용하게 되었고, 이를 구분하고 정렬, 인간이 알아 볼 수 있도록 설계 할 필요성을 느끼게 되었다.
복잡도를 낮추기 위해 근본적인 해결책을 제시한 것이 바로 객체 지향 프로그래밍이다.
라이브러리를 의미하는게 아니라, 프로그래밍 세계에서 한 철학이다. 모든 것은 전부 Object로 되어있고 그것으로 설명이 가능하다.
class
=prototype
클래스는 청사진 이다. ( 세부사항만 기입을 하면 object로 만들어 진다 )
그래서Object
는class
의instance
다 라고 할 수 있다
클래스가 가지고 있는 constructor에서 specification을 정의한다.
class
= 자동차 color;price;speed; = 속성
Start();Backward(); 등 = 메소드
other..()
do()
do1()
do2()
other..()
라는 함수가 있다면 우리는 do계열 끼리 묶어야 할 것이다.
이를 toy 라는 object에 묶는다면,
other..()
toy.do()
toy.do1()
toy.do2()
other..()
이런식으로 찾기 쉽게 만들 수 있다.
자동차
를 예로 들어보자
모델명 : Tesla model 3
제조사 : Tesla
제조일 : 2020-01-14
제로백 : 2.7초
이런식으로 어떤 특정 자동차를 자동차가 가지고 있는 특성을 대입 시켜 이해 할 수 있다. 즉 제조사.(Tesla model 3)
가 가능하다
자동차가 class
라고 한다면
class car {
생성자(model, company, madeDate, zeroback){
this.model = model; // 모델명
this.company = company; // 회사명
this.madeDate = madeDate; // 만들어진 날짜
this.zeroback = zeroback; // 제로백
}
}
이런식으로 클래스
에 특정 값들을 부여해 객체를 만들 때,
이 특징 값들을 인자로 받아 객체를 만들어 준다.
여기 클래스에 메소드를 추가 할 수도 있다.
class car {
생성자(model, company, madeDate, zeroback){
this.model = model; // 모델명
this.company = company; // 회사명
this.madeDate = madeDate; // 만들어진 날짜
this.zeroback = zeroback; // 제로백
}
function 운전하다() {
// 자동차 1시간 운전하는 함수
// 자동차의 이동거리 반환
}
}
이러면 각자 자동차를 대입을 했을 때, function 운전하다
를 반환하므로 각 자동차의 이동거리(특징)를 알 수 있다
오브젝트 안에 모든 요소들을 넣어놓는다( 쌓아놓는다 )
자동차의 종류가 20종류라고 쳤을 때, 20개에 대한 각각의 속성과 동작들을 변수와 메서드로 정의해야 한다면 정말 끔찍하다.
--> 자동차 class
를 만들고 각각 자동차객체를 넣는다면 쉽게 문제를 해결할 수 있다.
let model = tesla;
let speed = 20;
let zeroback = 3;
function getSpec(model, speed, zeroback) {
return ` ${model} speed is ${speed*zeroback} `
}
이렇게 표현된 함수를 (절차 지향)- 하나에 다 들어가있음
let car = {
model : tesla;
speed : 20;
zeroback : 3;
getSpec : function() {
return ` ${this.model} speed is ${this.speed*this.zeroback} `
}
};
car.getSpec();
이렇게 한다면 car안에 종속되어 있기 때문에 (프로퍼티를 계속 넣어주고 할 필요가 없다) 이것이 바로 객체 지향 객체화 시켜서 tesla.getSpec(); benz.getSpec() 등이 가능
만약 새로운 버전의 벤츠를 특성이 몇가지 바뀌었다고 했을 때,
class (새로운버전) extends // <-새로 포함 (기존버전)을 해서
만들 수 있다
전화기를 예로 들자면, 사용자가 전화기 내부에 있는 로직들과 기계들의 조합을 알 필요 없이
input
= 다이얼
output
= 수화기 이렇게 기능한다.
html을 예로 들면 textbox(), select(), render()등
html을 부모로 가지고 있으니 각각의 성격을 갖고 일일이 그 특성을 매치 해 줄 필요가 없다.