JavaScript는 1995년 Netscape의 엔지니어 Brendan Eich에 의해 만들어졌습니다. 그리고 1996년 초에 Netscape 2와 함께 처음 릴리즈 되었습니다. 그리고 Netscape는 1997년에 ECMAScript 표준의 첫번째 판이 되는 JavaScript를 유럽 표준화 단체인 Ecma International에 보냈습니다. 그리고 이것을 시작으로 1999년 ECMAScript edition 3에 따라 큰 규모의 개정을 거친 후에, 현재까지 안정된 상태로 현재 우리가 아는 JavaScript가 사용되고 있습니다. 그리고 가장 최근에 개정된 edition이 2015년에 출간한 ECMAScript 6인 'ES6'입니다.
자바스크립트는 호스트 환경 아래에서 스크립트 언어로서 동작하도록 디자인되어 있기 때문에, 외부 세계와 통신하기 위해서는 호스트 환경이 제공하는 메커니즘에 의존해야 합니다. 대부분의 호스트 환경은 웹 브라우저이지만, Adobe Acrobat, Photoshop 등의 서비스와 Node.js 같은 서버 환경도 자바스크립트의 인터프리터가 될 수 있습니다.
자바스크립트는 클래스 대신 객체 프로토 타입을 사용하여 객체 지향 프로그래밍을 지원합니다. 객체 지향 프로그래밍은 데이터가 객체 내에서 캡슐화되고 구성 요소별이 아닌 객체 자체로 운용이 되는 프로그래밍 방식입니다.
자바스크립트의 유일한 생성자는 객체(Object)뿐입니다. '상속'의 관점에서 각각의 객체는 '프로토타입'이라는 은닉 속성을 가지는데, 이는 자신의 프로토타입이 되는 다른 객체를 의미합니다. 상위 개념의 특징을 하위 개념이 상속받고, 그 개념을 또 그 아래의 하위 개념을 상속받고 이렇게 계속 종속 관계가 이어지는 것입니다. 결국 최상위에는 'null'이라는 프로토타입이 존재합니다.
JS의 객체는 속성을 저장하는 '가방'과 프로토타입 객체에 대한 '링크'를 가지고 있습니다. 따라서 특정 객체의 어떤 속성에 접근하려고 하면, 해당 객체와 그 객체의 프로토타입 그리고 그 프로토타입의 프로토타입 순으로 체인의 종단에 이를 때까지 그 속성을 탐색하게 됩니다.
'new'는 사용자 정의 객체 타입 또는 내장된 객체 타입의 인스턴스를 생성할 수 있게 해주는 연산자입니다.
// 매개변수(parameter)
function Coffee(esso, water, milk) {
this.esso = esso
this.water = water
this.milk = milk
}
// 인수(argument)
const latte = new Coffee('Italy','Jeju','Swiss')
console.log(latte)
'Coffee'는 함수로 어떤 값을 받아서 원하는 처리를 해주는 속성을 가지고 있습니다. 이 함수를 new 연산자를 통해서 지정된 속성을 가진 인스턴스를 생성해준 것입니다. 위에서는 함수라는 객체의 속성을 '정의'만 했을 뿐이지 실제 사용할 수 있도록 생성한 것은 아닙니다. 그냥 이론상 존재할 뿐 실체가 없다는 뜻이지요. new 연산자를 통해서 생성했을 때부터 비로소 실제 작동할 수 있는 인스턴스가 생긴 것입니다.
함수를 선언할 때 외부에서 전달받도록 하는 값을 '매개변수'라고 합니다. 파라미터라는 말은 현업에서도 정말 많이 등장합니다. 모든 요청에 필요한 값, 전달해줘야 하는 조건값 등을 모두 parameter, params라고 많이 부르죠. 위 함수 선언시, 만들어준 'esso, water, milk'는 파라미터입니다.
반대로 new 다음에 나오는 인스턴스 괄호 안에 넣어준 'Italy','Jeju','Swiss'는 알규먼트 즉, 인수입니다. new를 통해서 생성된 함수에 괄호를 붙여서 함수가 호출시킬 때 전달해주는 변수값이죠. 실제 사용자가 함수의 속성을 이용하기 위해 원하는 것을 전달하는 데이터라고 할 수 있습니다.
간단하게 위 코드를 풀어서 적으면, 아래와 같습니다.
const 함수명 = new 생성자(인수1, 인수2, 인수3)
이때 생성자는 단순히 함수명을 또 나열하는 것이 아닌, 객체 타입을 정의해주는 역할을 합니다. 이 함수가 어떤 속성을 가지고 어떤 타입을 가진 인스턴스가 될 것인지를 정해주는 아주 중요한 역할을 하는 것이죠.
JavaScript 재입문하기 (JS 튜토리얼)
상속과 프로토타입
Classes
매개변수(Parameter)와 인수(Argument)의 차이점은 무엇일까?
OOP