원래 프로그래밍은 절차지향이었음. 절차지향 프로그래밍은 유지보수하기도 힘들고 확장성도 좋지 않음.
그래서 나온 게 객체지향. 내가 이해한바에 따르면 객체지향 프로그래밍은 블록쌓기임! 기능별로 블록(객체)을 만들어서 최종적으로 내가 원하는 블록(객체)들만 쏙쏙 뽑아 쌓아서 로봇을 만드는 것!
객체지향 프로그래밍은 유연하고 유지보수하기 쉽고, 확장성도 좋고 재사용하기도 좋다.
~결합도란 서로다른 모듈들이 상호 의존하는 정도
응집도란 내부 구성요소들이 서로 관련되어 있는 정도
결합도는 낮추고 응집도는 높히는 것이 좋다.~
부모클래스의 속성과 메서드를 자식클래스가 상속받는것. 자바스크립트에서는 프로토타입을 통해서 직접 상속한다. 자식클래스에 속성과 메서드를 추가할 수 있다.
const Parent = function(){
function Parent(name){this.name;} //constructor
Parent.prototype.greet = function(){ console.log('hi');} //method
return Parent //return constructor
}();
const Child = function(){
function Child(name){this.name;} //constructor
Child.prototype = new Parent();
//자식 생성자함수의 프로토타입 객체를 부모 생성자 함수의 인스턴스로 교체한다. child.constructor는 Child가 아닌 Parent임.
//오버라이드: 재정의함
Child.prototype.greet = function(){
console.log('hello!');
}
//farewell메서드는 Parent 생성자함수의 인스턴스에 위치한다.
Child.prototype.farewell = function(){
console.log('bye!');
}
return Child;
}();
const child = new Child('child');
child.greet(); //'hello'
child.farewell(); //'bye'
내부 구현은 복잡하지만 노출되는 부분은 단순하게 만드는 것을 뜻함. 클래스를 사용하는 사람이 필요하지 않은 메서드를 노출시키지 않고, 단순한 이름으로 정의한다.
코드가 복잡하지 않게 만들고, 변화에 대한 영향을 최소화함
다양한 형태를 가질 수 있음.
같은 메서드라도 다른 방식으로 구현될 수 있다.
조건문 대신 객체의 특성에 맞게 달리 작성하는 것이 가능해진다.
자바스크립트는 #로 은닉화를 할 수 있다.