ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Modern JavaScript Object-Oriented Programming
    FrontEnd/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

    댓글

Designed by Tistory.