-
Modern JavaScript Object-Oriented ProgrammingFrontEnd/JavaScript 2023. 2. 11. 18:05
1. 객체지향 프로그래밍 개요
- Obejct : 다양한 특성(property)을 통해 한개념을 특정짓는 것
- 절차지향 프로그래밍과 다른점으로, 관계성있는 객체들의 집합 (프로그램을 구성하는 부품)
프로토타입 및 용어정리 : https://isaac-yoon.tistory.com/7
2. 클래스 기반 vs 프로토타입 기반
- 클래스기반 언어 : java, C++, Python, PHP, Ruby, Object-C
- Class(집합체)로 Object(객체)의 자료구조와 기능(Function)을 정의, 생성자를 통해 인스턴스 생성 (new 연산자)
- 집단에 속하는 속성과 행위를 사용자가 정의한 데이터 형태 (user define data type)
- 모든 instance는 Class에서 정의되 범위(Scope) 내에서만 작동하며 Runtime에서 Structure를 변경할 수 없다.
- 정확성, 안정성, 예측성에서 프로토타입 기반 언어보다 좀더 나은 결과를 보여줌
- 프로토타입 기반 언어 : javascript
- Multi paradigm Language : 명령형, 함수형, 프로토타입기반 객체지향 언어
- 객체생성방법 : 객체리터럴, Object()생성자 함수, 생성자함수
- 동적인 구조 : 이미 생성된 인스턴스의 자료구조와 기능을 동적으로 변경 가능
- 객체지향 특징 : 상속, 캡슐화 -> 프로토타입 체인과 클로저으로 구현
// 객체 리터럴 var obj1 = {}; obj1.name = 'Lee'; // Object() 생성자 함수 var obj2 = new Object(); obj2.name = 'Lee'; // 생성자 함수 function F() {} var obj3 = new F(); obj3.name = 'Lee';
3. 생성자 함수와 인스턴스, 프로토타입 체인과 메소드
- 생성자 함수와 인스턴스 : 생성자 함수는 클래스이자 생성자 역할
// 생성자 함수(Constructor) function Person(name) { // 프로퍼티 this.name = name; // 메소드 this.setName = function (name) { this.name = name; }; // 메소드 this.getName = function () { return this.name; }; } // 인스턴스의 생성 var me = new Person('Lee'); console.log(me.getName()); // Lee // 메소드 호출 me.setName('Kim'); console.log(me.getName()); // Kim
- 프로토타입 체인과 메소드
function Person(name) { this.name = name; } // 프로토타입 객체에 메소드 정의 Person.prototype.setName = function (name) { this.name = name; }; // 프로토타입 객체에 메소드 정의 Person.prototype.getName = function () { return this.name; }; var me = new Person('Lee'); var you = new Person('Kim'); var him = new Person('choi'); console.log(Person.prototype); // Person { setName: [Function], getName: [Function] } console.log(me); // Person { name: 'Lee' } console.log(you); // Person { name: 'Kim' } console.log(him); // Person { name: 'choi' }
- 상속 : 프로토타입을 통해 다른 객체로 직접상속 할 수 있다.
프로토타입 패턴 상속 / 의사 클래스 패턴 상속 - 프로토타입 패턴 상속
var parent = { name: 'parent', sayHi: function() { console.log('Hi! ' + this.name); } }; // create 함수의 인자는 객체이다. var child = Object.create(parent); child.name = 'child'; // var child = Object.create(parent, {name: {value: 'child'}}); parent.sayHi(); // Hi! parent child.sayHi(); // Hi! child console.log(parent.isPrototypeOf(child)); // true
- 캡슐화, 모듈패턴
- java Script 는 키워드를 제공하지 않지만, get/set 기능을 차용하여 public / private 개념을 적용할 수 있다.
Closure Concept : https://isaac-yoon.tistory.com/12
'FrontEnd > JavaScript' 카테고리의 다른 글
Modern JavaScript 다양한 객체 (0) 2023.02.18 Modern JavaScript Built-in Object (0) 2023.02.11 Modern JavaScript 클로저 (0) 2023.01.29 Modern JavaScript 함수 호출방식 (0) 2023.01.28 Modern JavaScript Strict mode (1) 2023.01.28