객체지향 프로그래밍
OOP: Object Oriented Programming
실세계에 존재하고 인지하고 있는 객체(Object)를 소프트웨어의 세계에서 표현하기 위해
객체의 핵심적인 개념 또는 기능만을 추출하는 추상화를 통해 모델링하려는 프로그래밍 패러다임이다.
쉽게 말하자면
우리가 주변의 실세계에서 사물을 인지하는 방식을 프로그래밍에 접목하려는 사상이라고 한다.
각 객체는
- 메세지를 받을 수도 있고
- 데이터를 처리할 수도 있고
- 또 다른 객체에게 메세지를 전달할 수도 있고
- 별도의 역할이나 책임을 갖는 작은 독립적인 기계 또는 부품이다
반대개념은 절차지향 프로그래밍
(또는 함수형 프로그래밍 (FP: Functional Programming))
함수들의 집합 또는 단순한 컴퓨터의 명령어들의 목록이라는 관점으로 접근하는 방식이며, 전통 방식이기도 하다.
그에 반해 객체지향 프로그래밍은 관계성있는 객체들의 집합이라는 관점으로 접근한다.
즉, 둘은 설계의 관점이 다르다.
오늘날 많은 유명한 프로그래밍 언어는 객체지향 프로그래밍을 지원한다.
예시로 Java, C++, C#, Python, PHP, Ruby, Object-C 등이 있다.
자바스크립트의 객체지향 프로그래밍
JavaScript에서 객체지향 프로그래밍이란
단순한 자료 구조(변수)를 넘어서 기능(메서드)을 포함한 형태로 객체를 사용하는 프로그래밍
객체를 정의(변수와 메서드)하고 객체를 생성해서 만들어진 객체를 사용하는 것
함수형 프로그래밍과 비교하며 이해가 필요하다.
// 객체지향 프로그래밍
car.start();
car.moveTo(10);
// 함수형 프로그래밍
start(car);
moveTo(car, 10);
위에서 언급한 객체지향 프로그래밍을 지향하는 언어들,
Java, C++, C#, Python, PHP, Ruby, Object-C 는 클래스 기반 언어다.
클래스로 객체의 자료구조와 기능을 정의하고, 생성자를 통해 인스턴스를 생성한다.
반면에 JavaScript 는 프로토타입 기반 언어다.
클래스 개념이 없고(-였다가 ES6 이후로 생겨났다) 별도의 객체 생성 방법이 존재한다.
객체 리터럴 / Object() 생성자 함수 / 생성자 함수
// 객체 리터럴
var obj1 = {};
obj1.name = 'Lee';
// Object() 생성자 함수
var obj2 = new Object();
obj2.name = 'Lee';
// 생성자 함수
function F() {}
var obj3 = new F();
obj3.name = 'Lee';
+) JavaScript도 ES6에서 새롭게 도입된 클래스
새로운 객체지향 모델을 제공하는 것이 아니며(따지자면 Class도 사실 함수)
다른 Class 기반 언어에 익숙한 프로그래머가 보다 빠르게 학습할 수 있도록 깔끔한 문법을 제시한다.
'JAVASCRIPT' 카테고리의 다른 글
[JAVASCRIPT] Data Types : 자료형 - primitive type (0) | 2023.07.18 |
---|---|
[JAVASCRIPT] Variables : 변수와 상수 - let, const, var (0) | 2023.07.15 |
[JAVASCRIPT] Identifier : 식별자 (0) | 2023.07.09 |
[JAVASCRIPT][CS] 자바스크립트 배열의 시간 복잡도 (0) | 2023.05.21 |
[JAVASCRIPT] ECMAScript, ES6란? (0) | 2023.05.09 |