티스토리 뷰

donaricano-btn
반응형

자바스크립트는 프로토타입을 이용한 상속의 구현, 객체 인스턴스의 프로퍼티와 메소드, 캡슐화 같은 객체지향적인 특징도 동시에 가지고 있습니다.

 

자바스크립트는 원시값을 제외한 모든 것을 객체로 취급합니다.

자바스크립트 객체에는 프로토타입이 존재합니다. 모든 객체는 이 프로토타입을 기반으로 만들어지며 프로토타입은 객체에 기본적인 프로퍼티를 제공합니다.

 

프로토타입이 가진 constructor 프로퍼티는 해당 객체의 생성자 함수를 가리키고 있고 이를 통해 새로운 객체를 만들 수 있습니다.

 

프로토타입의 프로퍼티는 그것을 기반으로 하는 객체에 영향을 주지만 그 방향은 일방향입니다. 객체가 변경되어도 상위 프로토타입의 객체는 변하지 않습니다.

 

자바스크립트는 일단 객체 내에서 프로퍼티 값을 조회하고 없으면 상위 프로토타입 객체에서 프로퍼티를 검색합니다. 그렇게 최 상위 프로토타입까지 올라가면 Object 프로토타입이 존재합니다.

자바스크립트는 이 프로토 타입을 이용해서 상속관계를 만듭니다.

객체지향 프로그래밍이 등장한 이유, 상속이라는 기법이 등장한 이유는 모두 중복되는 코드를 줄이고 유지보수를 편하게 하기 위한 것입니다.

 

자바스크립트에서는 클래스라는 개념 대신 프로토타입 객체를 복제해 해당 객체의 프로퍼티를 추가하거나 대체하는 식으로 상속을 구현하고 있습니다.

오른쪽 코드에서 Person 객체를 생성해서 새로운 객체인 Yoda의 프로토 타입으로 지정하고 있습니다.

 

이렇게 만들면 yoda는 Yoda의 인스턴스임과 동시에 Person의 인스턴스가 됩니다. 하지만 문제는 constructor 가 Person이 된다는 것입니다.

Constructor를 제대로 해결하기 위해 Object.create() 가 등장했습니다. prototype을 인자로 받아 기본함수 F의 프로토타입으로 설정한 뒤 new 명령어를 통해 새로운 F 객체를 리턴하는 함수입니다. 쉽게말해 상속받는 객체와 프로토타입 사이에 새로운 객체를 만들어 끼워 넣는 것 과 같습니다.

Object.create()를 이용해 상속을 구현하고 constructor 를 재선언 함으로서 constructor 문제를 해결할 수 있습니다. 그러나 ES6 부터는 class와 extends 키워드를 사용해 이 과정을 생략할 수 있게 되었습니다.

자바스크립트 객체 역시 캡슐화를 가능하게 만듭니다. 캡슐화는 객체의 속성과 행위를 하나로 묶고 실제 구현 내용을 외부에서 감추는 역할을 하는데 자바스크립트에는 private이나 protected 같은 접근 지정자가 없습니다. 때문에 캡슐화를 위해 클로저의 개념을 활용합니다. 객체 내부의 지역변수를 var로 선언하게 되면 외부에서 변수에 접근할 수가 없습니다. 이 변수에 접근하는 내부함수를 통해 접근하도록 만듦으로써 캡슐화를 구현할 수 있습니다.

객체지향 언어의 특징 중 하나는 바로 다형성입니다. 다형성은 같은 모양의 코드로 여러 기능을 구현할 수 있는 것을 의미하는데 자바의 인터페이스나 오버라이딩이 그 예입니다. 그런데 자바스크립트는 상속받은 메서드를 오버라이드 할 수는 있지만 인터페이스나, 추상클래스 같은 것을 제공하지는 않습니다.

 

생각해 보면 자바스크립트는 변수의 타입에 엄격하지 않고 자동으로 타입 변환이 일어나는 언어입니다. 함수의 인자 개수나 타입에도 제한이 없고 함수의 리턴 값 역시 타입에 제한이 없습니다. 그렇기 때문에 처음부터 한 변수로 제한없이 객체를 받을 수가 있게 됩니다.

 

또 앞서서 본 것 처럼 자바스크립트는 클래스가 아니라 객체를 만들어서 상속을 구현합니다. 객체를 만들 수 없는 인터페이스가 존재할 수 없다는 것을 알 수 있습니다.

반응형

'language > javascript' 카테고리의 다른 글

자바스크립트 웹 프로그래밍  (0) 2019.03.29
자바스크립트 모듈  (0) 2019.03.29
자바스크립트에서 예외처리  (0) 2019.03.29
자바스크립트 함수  (0) 2019.03.29
자바스크립트의 데이터 타입  (0) 2019.03.29
donaricano-btn
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함