이번 시간에는 객체 지향 프로그래밍(Object Oriented Programming) 방법에 대하여 공부하였다.
OOP는 하나의 모델이 되는 청사진(blueprint)를 만들고, 그 청사진을 바탕으로 한 객체(object)를 만드는 프로그래밍 패턴이다.
예를 들어 한 회사의 사원의 정보를 입력하는 것을 구현한다고 가정해보자.
하나의 사원 정보는 이렇게 구현하면 될 것이다.
let member1 = { name: "Jane", age: 25, position: "CEO" }
그러나, 사원이 100명 200명 일때는 코드가 어마무시하게 길어질 것이다. 이 때 OOP 패턴을 사용하는 것이다.
class member(name, age, position) { //하나의 모델이 되는 청사진 : class this.name = name; //constructor(생성자) this.age = age; this.position = position; } let member1 = new member("Jane", 40, "CEO"); //청사진을 바탕으로 한 객체: instance let member2 = new member("kim", 25, "Sawon");
이렇게 한다면 가독성도 높아질 뿐만 아니라 코드의 효율도 높아진다.
1. Encapsulation (캡슐화)
공통의 속성이나 기능(메소드)들을 객체 안에 묶어놓아 객체의 내부 구현을 외부로부터 감춘다.
느슨한 결합을 할 수 있게 돕는다. => 변경 가능성이 높은 부분은 내부에 숨기고 외부에는 상대적으로 안정적인 부분만 공개함 으로써 변경의 여파를 통제할 수 있다.
2. Inheritance (상속)
부모 클래스(base class)를 자식 클래스(derive class)가 물려받는 것이다.
3. Abstraction (추상화)
복잡한 내부 구현은 숨기고 실제로 노출되는 부분은 단순하게 만든다.
인터페이스가 단순해진다 => 우리는 TV의 내부 작동원리, 구조 등은 생각하지 않고 단순히 TV를 켜고 끄는 것만 한다. 추상화 작업을 통해 인터페이스를 단순화 할 수 있다.
4. Polymorphism (다형성)
부모 클래스의 메소드를 그대로 받아들이지 않고 상황에 맞게 메소드를 수정하여 사용하는 것이다.
자바스크립트는 엄밀히 말하면 객체지향 프로그래밍의 한 형태인 프로토타입 기반 언어라고 할 수 있다.
자바스크립트에는 클래스라는 개념이 없기 때문에 대신 프로토타입이 존재한다. 그렇기 때문에 프로토타입 기반 언어라고 하는 것이다.
(ECMA6 표준에서는 Class 문법이 추가되었지만 이로인해 자바스크립트가 클래스 기반으로 바뀐것은 아니다)
그렇다면 프로토타입(prototype)이란 무엇일까?
javascript의 모든 객체는 최소한 하나 이상의 다른 객체로부터 상속을 받으며, 이때 상속되는 정보를 제공하는 객체를 프로토타입(prototype)이라고 한다.
다른 언어들이 클래스 기반에서 상속을 사용하는 것과는 다르게, 객체를 원형(프로토타입)으로 하여 복제의 과정을 통하여 객체의 동작 방식을 다시 사용할 수 있다.