절차적(구조적) 프로그래밍 : 함수단위로 코드를 분리하고 재사용하는 형태로 프로그래밍
데이터와 처리방식이 하나의 모듈로 관리하기 시작
-> 작은 프로그램들이 독립적으로 돌아가는 형태
-> 작은 부품들을 미리 만들어두고 이를 조립하고 결합하는 방식
-> Class와 Object 등장.
-> 프로그램을 객체로 바라보는 관점으로 프로그래밍하기 시작
-> OOP(Object-oriented Programmin) / 객체지향 프로그래밍
-> Java, c++의 등장
Javascript 탄생비화
javascript를 창시한 Brendan Eich는 언어를 개발할 당시 유행하던 객체지향에 한계를 느끼고 LISP, scheme등 함수형 프로그래밍에 관심을 가지고 있었기에 함수형 프로그래밍의 형태로 언어를 만들고 싶어 했습니다. 하지만 Netscape의 그의 상사는 당시 개발자들이 제일 많이 쓰던 Java와 같은 문법으로 만들기 요구했기 때문에 결국 둘의 혼종의 형태로 세상에 나오게 되었습니다.
당시 인기가 있었던 Java의 문법과 패러다임을 최대한 유지하면서, 복잡한 claass나 설계, 추상화, 다형성 등을 배제한 간단한 스크립트 언어로 시작.
Class가 없는 함수형 언어를 기반으로 하지만, 객체 지향 프로그래밍 느낌이 나는 언어 탄생.
하지만 수많은 요구들로 인해 ES6 들어서 Class를 정식 문법으로 도입.
함수가 값이 될수있는 점(1급 함수)는 추후 다른 언어들에게 영향을 주었음.
현재 함수형과 객체지향을 적절히 섞어 쓰는 방식들이 발전 중.
클래스 기반 언어(Java, C++, C#, Python, PHP, Ruby, Object-C)는 클래스로 객체의 자료구조와 기능을 정의하고 생성자를 통해 인스턴스를 생성한다.
반면 프로토타입 언어(Javascript)는 객체리터럴, 생성자 함수, Object 생성자 함수 세 가지 방식으로 객체를 생성한다.
Javascript 함수형을 기반으로 하는 class-free 프로토타입 기반 객체지향 언어이다.
Javascript는 프로토타입기반 싱글 스레드 멀티패러다임 동적 언어로, 객체지향, 명령형, 선언형 및 명령형 프로그래밍 스타일을 지원한다.
JavaScript is a prototype-based, multi-paradigm, single-threaded, dynamic language, supporting object-oriented, imperative, and declarative (e.g. functional programming) styles. Read more about JavaScript.
-mdn
https://velog.io/@teo/oop
https://poiemaweb.com/js-object-oriented-programming
https://developer.mozilla.org/en-US/docs/Web/JavaScript
https://medium.com/@limsungmook