필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍으로 객체 지향 개념의 가장 기본적인 전제는 실제 세계는 객체들로 구성되어 있으며, 보여지는 모든 현상과 발생하는 모든 사건은 이러한 객체들 간의 상호작용을 통해 발생한다는 것이다.
자바스크립트는 멀티-패러다임 언어로 명령형(imperative), 함수형(functional), 프로토타입 기반(prototype-based)의 객체지향 언어이다.
클래스 - 어떤 문제를 해결하기위해 추상화를 거쳐 집단에 속하는 속성(attribute)과 행위(behavior)를 변수와 메서드로 정의한 것
속성(변수)과 메서드(함수) ?
class Car(name){
constructor(name){
color = this.name
}
ride(){
console.log("달린다")
}
}
const yellowCar = new Car('yellow')
yellowCar.color // 속성
yellowCar.ride() // 함수
```
객체(인스턴스) : 클래스에서 정의한 것을 토대로 실제 메모리에 할당된 것으로 실제 프로그램에서 사용되는 데이터
const today = new Date()
today.getDay()
//요일을 숫자로 변환한 값
//getDay()의 값을 구하기 위해 일어나는 일련의 과정들은 확인할 수 없음.
캡슐화의 목적
const today = new Date()
today.getDay() //getDay() -> 퍼블릭 함수에 접근해서 값을 얻을 수 있음.
상속이 가능한 조건
class Bicycle extends Car {}
const yellowBicycle = new Bicycle('yellow')
yellowBicycle.ride() //'달린다'
다형성의 특징
class Bicycle extends Car{
ride(){
super.ride()
console.log('오토바이')
}
}
const yellowBicycle = new Bicycle('yellow')
yellowCar.ride() // '달린다', '오토바이'
장점
같은 로직을 구현할 경우 반복적인 코드를 최소화하고, 코드 재사용성을 높일 수 있다.
오류가 생기거나 변경 사항에서 클래스만 변경하면 되기 때문에 유지보수에 용이하다.
→ 대형 프로젝트에 적합
단점
코드 변경(→ 상속과 다형성의 특징)이 용이하다보니 잘못된 상속의 위험이나 부모 클래스의 변경이 모든 자식 클래스에도 영향을 줄 수 있다.
[참고]
https://jeong-pro.tistory.com/95
https://velog.io/@feelslikemmmm/JavaScriptClass
https://www.freecodecamp.org/korean/news/6sal-aiege-gaegce-jihyang-peurogeuraeming-gaenyeom-seolmyeonghaneun-bangbeob/