1. 객체 지향 프로그래밍
: 하나의 모델이 되는 청사진(Blueprint)를 만들고, 그 청사진을 바탕으로 한 객체(object)를 만드는 프로그래밍 패턴
: 청사진은 클래스(class), 청사진을 바탕으로 한 객체 인스턴스 객체(instance object)라고 생각하면 이해하기가 쉽다.
2. 객체를 만들고 이용하는 방법
: 일반적인 함수를 정의하듯이 만들면 되지만, 이용하는 방법이 조금 다르다
: new 키워드를 사용하여, 새로운 인스턴스를 생성 후 실행
: 클래스를 만들 때에는 보통 대문자, 일반명사로 만드는 것을 암묵적인 규칙으로 다른 함수와 구별이 가능하다.
: 따라서 일반적인 함수를 만들 때에는, 적절한 동사를 포함하고, 소문자로 시작하도록 만들면 좋다.
//클래스 만들기
class Car {
constructor(brand, name, color) {
// 인스턴스가 만들어질 때 실행되는 코드
}
}
// ES6에서는 class라는 키워드를 이용해서 정의한다.
// 인스턴스가 만들어질 때 실행되는 코드 부분의 함수를
// 객체지향 프로그래밍에서 성자(constructor) 함수라고한다.
//인스턴스 만들기
let avante = new Car('hyundai', 'avante', 'black');
let mini = new Car('bmw', 'mini', 'white');
let beetles = new Car('volkswagen', 'beetles', 'red');
// 인스턴스를 만들 때는 new 키워드를 사용
// 생성자 함수가 실행되어, 변수에 클래스의 설꼐와 동일한 새로운 인스턴스가 할당된다.
// 각각의 인스턴스는 클래스의 고유한 속성과 메소드를 가지게 된다.
3. 속성과 메소드
: 클래스에 속성과 메소드를 정의하고, 인스턴스에서 이용 가능하다
: 자동차를 예로 들면, 속성에는 브랜드, 차종 이름, 색상 등이 있을 수 있으며 메소드(객체에 딸린함수)에는 연료주입, 운전등이 있을 수 있다.
// 속성
class Car {
constructor(band, name, color) {
this.brand = brand;
this.name = name;
this.color = color;
}
}
// this는 인스턴스 객체를 의미
// parameter로 넘어온 브랜드, 이름, 색상 등은 인스턴스 생성시 지정하는 값
// this에 할당한다는 것은, 만들어진 인스턴스에 해당 브랜드, 차종이름, 색상을 부여하겠다는 의미이다.
// 메소드
class Car {
constructor(brand, name, color) {
/* 생략 */
}
refuel() {
}
drive(){
}
}
// ES6에서는 생성자 함수와 함께 class 키워드 안쪽에 묶어서 정의해야한다.
4. 용어 살펴보기
1. Encapsulation(캡슐화)
: 데이터와 기능을 하나의 단위로 묶는 것
: 데이터(속성)과 기능(메소드)들이 느슨하게 결합(Loose Coupling)
(=코드 실행 순서에 따라 절차적으로 코드를 작성하는 것이 아니라, 코드가 상징하는 실제 모습과 닮게 코드를 모아 결합하는 것을 의미한다.) 언제든지 구현을 수정 할 수 있다.
: 구현은 숨기고, 동작을 노출시키는 '은닉(Hiding)'특성을 가진다.
: 추상화에 비해, 포커스가 코드나 데이터 으닉에 맞춰져 있다.
: 코드가 복잡해지지 않게 만들고, 재사용성을 높인다는 장점이 있다.
2. Abstraction(추상화)
: 추상화는 내부 구현은 아주 복잡한데, 실제로 노출되는 부분은 단순하게 만든다는 개념이다.
: 추상화의 과정을 통해 너무 많은 기능이 노출되지 않아 인터페이스가 단순해지므로, 예기치 못한
사용상의 변화가 얼어나지 않도록 만들 수 있다.
: 캡슐화에 비해, 클래스를 사용하는 사람이 필요하지 않은 메소드 등을 노출시키지 않고
단순히 이름으로 정의하는 것에 포커스가 맞춰져 있다.
: 코드가 복잡해지지 않게 만들고, 단순화된 사용으로 인해 변화에 대한 영향을 최소화한다는 장점이 있다.
3. Inheritance(상속)
: 기본 클래스(Base class)의 특징을 파생 클래스(Derive class)가 상속받는다.
: 불필요한 코드를 줄여 재사용성을 높인다는 장점이 있다.
4. Polymorphism(다형성)
: 같은 메소드라 하더라도 다른 방식으로 구현될 수 있다는 것을 의미한다.