예를 들어, 자동차가있다면 자동차 1대 1대를 객체라 할 수 있습니다.
차의 모양이 전부 같다고 하더라도 차 한대가 사라진다고 다른차도 없어지는게 아니기때문에 객체입니다.
자동차는 일반적으로 같은 속성을 가지고 있는데 여기서 속성이란 자동차의 색 , 바퀴 , 사이드 미러등을 의미합니다.
이러한 공통적으로 갖는 속성들을 모아서 정의내린 것이 클래스입니다.
즉 자동차라는 클래스는 색,바퀴,사이드미러 등의 속성이 존재하고 객체들은 각 속성의 모양이 다르기때문에 각 각 다른 객체로 분류된다고 하는것입니다.
프로그램을 단순히 데이터와 처리 방법으로 나누는 것이 아니라, 프로그램을 수많은 '객체'라는 기본 단위로 나누고 이 객체들의 상호작용으로 서술하는 방식이다. 객체란 하나의 역할을 수행하는 '메소드와 변수(데이터)'의 묶음으로 봐야 한다.
추상화는 목적과 관련이 없는 부분을 제거하여 필요한 부분만을 표현하기 위한 개념입니다.
객체와 클래스의 관점에서 살펴보면
객체는 실제 그 모습이지만 클래스는 객체들이 어떤 특징이 있어야한다고 정의하는 추상화된 개념이라고 생각하면 될 것 같습니다.
캡슐화는 일반적으로 연관있는 변수와 함수를 클래스로 묶는 작업을 말합니다, 객체가 기능을 어떻게 구현 했는지 외부에 감추는 것 캡슐화만 잘해도 좋은 코드를 만들 수 있다고합니다, 보안적인 의미도 있습니다.
앞서말한 자동차의 속성으로 자동차의 핸들,바퀴, 사이드 미러 등을 말하였는데 같은 자동차란 객체에는 이와같은 공통점이 있는데 그것은 클래스를 상속받았다고 표현할 수 있을것 같습니다,이처럼 공통된 요소를 상속받게 되면은 불필요한 코드의 중복을 없앨 수 있습니다.
다형성은 형태는 같지만 다른 기능을 하는 것을 의미합니다. 페라리 와 람보르기니는 바퀴가 있다는점에서 같은 클래스를 상속받았다고 할수있습니다, 하지만 페라리 와 람보르기니의 바퀴 모양은 다르겟죠 ?
이것을 '다형성'이라고 합니다.
그럼 다형성을 사용하면 좋은 점은 무엇일까요?같은 이름의 속성을 유지함으로서, 속성을 사용하기 위한 인터페이스를 유지하고, 메서드 이름을 낭비하지 않는다는 것입니다.
let Car = function(){
let comeInstance ={};
someinstnace.positon = 0;
someinstance.move = function(){
this.position += 1;
}
return someInstance
};
let car1= Car();
let car2= Car();
car1.move();
console.log(car1); // {position: 1, move: ƒ}
console.log(car2); // {position: 0, move: ƒ}
이 내용은 좀더 숙지가 필요할것같아 추후에 추가하겠습니다.