객체 지향 프로그래밍(OOP, Object-oriented programming)은, 절차 지향 프로그래밍과는 다르게 데이터와 기능을 한 곳에 묶어서 처리한다. 속성과 메소드가 하나의 "객체"라는 개념에 포함되며, 이는 자바스크립트 내장 타입인 object(이하, object literal)와는 다르게, 클래스(Class)라는 이름으로 부른다.
(무슨 소리인지 정확히 이해는 못한다..)
객체지향 프로그래밍은 함수들의 집합 혹은 단순한 컴퓨터의 명령어들의 목록이라는 전통적인 절차지향 프로그래밍과는 다른, 관계성있는 객체들의 집합이라는 관점으로 접근하는 소프트웨어 디자인으로 볼 수 있다.
각 객체는 메시지를 받을 수도 있고, 데이터를 처리할 수도 있으며, 또다른 객체에게 메시지를 전달할 수도 있다. 각 객체는 별도의 역할이나 책임을 갖는 작은 독립적인 기계 또는 부품으로 볼 수 있다.
객체지향 프로그래밍은 보다 유연하고 유지보수하기 쉬우며 확장성 측면에서서도 유리한 프로그래밍을 하도록 의도되었고, 대규모 소프트웨어 개발에 널리 사용되고 있다.
코드의 재사용성 증가
유지보수의 용이
간결한 코드
처리 시간이 오래걸린다.
프로그램을 설계할 때 많은 고민과 시간을 투자해야한다.
캡슐화
추상화
상속
다형성
1. 캡슐화
2. 추상화
3. 상속
4. 다형성
하나의 모델이 되는 청사진 class, 그 청사진을 바탕으로 한 객체를 만드는 객체를 instance.
객체지향 프로그래밍을 이용한 객체를 만드는 방법은 함수를 정의하듯 만든다.
클래스를 그냥 함수로 정의할때, 암묵적인 규칙으로 보통 클래스는 대문자
, 그리고 일반명사
로 만든다.
class의 instance를 생성할때마다 constructor메서드가 호출됩니다.
constructor()메서드에 this 키워드를 사용했습니다. class의 실행범위(context)에서 this는 해당 instance를 의미합니다.
인스턴스는 class이름에 new를 붙여서 생성합니다.
예시)
class Car {
constructor(brand, name, color) { //생성자 함수
this.brand = brand;
this.name = name;
this.color = color;
}
drive() { //메소드
return `${this.brand}의 ${this.color} ${this.name} 출발`
}
let genesis = new Car('hyundai', 'genesis', 'black') //인스턴스
console.log(genesis);
console.log(genesis.brand);
console.log(genesis.drive());
/*
Car {brand: 'hyndai, name: 'genesis', color: 'black'}
'hyundai'
'hyundai의 black genesis 출발'
*/