ABOUT ME

-

Today
-
Total
-
  • [생활코딩] JavaScript 객체지향 : 생성자와 new
    Study/JavaScript 2019. 12. 7. 18:06
    반응형


    객체지향 프로그래밍

     

    프로그램을 만들면서 규모가 커질때, 변수나 함수와 같은것이 아주 많아지게 되고, 복잡해 지기 시작한다.
    그래서 비슷한 맥락의 변수와 메소드를 그룹핑하기로 하고 '객체'라는 것이 탄생하게 된다.
    즉, 로직을 상태와 행동(변수와 메소드)로 나누고 연관된 것들끼리 그룹핑한 것을 객체라 하고,

    이를 조립해 프로그래밍을 하는 것을 객체지향 프로그래밍이라고 할 수 있다.

    부품화와 재활용성을 극대화시키는 방법이다.
    소프트웨어의 설계란 현실을 프로그래밍적으로 추상화하는 것을 말한다.


    객체지향의 여러 가지 특성들 
    - 부품화 : 프로그램의 로직들을 기능별로 나눠 부품화하는 것
    - 은닉화, 캡슐화 : 로직을 온전히 부품화하기 위해 내부동작법은 케이스에(객체) 숨기고 사용법(메소드)만 노출하는 것
    - 인터페이스 : 부품들간의 접점에서의 규칙, 약속
    - 객체지향은 코드의 재활용성을 높인다.

     

     

    객체 - 생성자와 new

     

    자바스크립트 : prototype - based programming

    개발자에게 있어서 중복은 혐오의 대상이라고 할 수 있다.

    서로 다른 객체에서 중복되는 메소드의 코드가 들어간다면 가독성도 떨어질 뿐만 아니라 유지보수도 어렵다.
    따라서 객체의 구조를 재활용하는 방법이 필요한데, 그것이 바로 생성자이다.


    - 생성자 : 생성자(constructor)는 객체를 만드는 역할을 하는 함수다. 

    자바스크립트에서 함수는 재사용 가능한 로직의 묶음이 아니라 객체를 만드는 창조자라고 할 수 있다. 

    - 함수를 호출할 때 new를 붙이면 새로운 객체를 만든 후에 이를 리턴한다. 
    - 생성자 함수는 일반함수와 구분하기 위해서 첫글자를 대문자로 표시한다.

    예시)

    function Person(name){             // function Person(name) 함수가 생성자에 해당. 
        this.name = name; 
        this.introduce = function(){ 
            return 'My name is '+this.name;  
        }    
    } 
    var p1 = new Person('egoing');    // 새로운 객체 생성.
    console.log(p1.introduce()) // 'My name is egoing'
      
    var p2 = new Person('leezche'); 
    console.log(p2.introduce())  //  'My name is leezche'


    => 함수의 인자만 바꿔 넣으면 코드는 동일하게 재사용 가능하다.
    생성자 내에서 객체의 프로퍼티를 정의하고 메소드는 동일하게 들어간다. 

    이러한 것을 초기화(init) 이라고 하며, 코드의 재사용성이 대폭 높아졌다.

    생성자를 하나 만들어 놓으면 붕어빵 기계에서 붕어빵(객체)을 편하게 찍어낼 수 있다.
    여기서 붕어빵기계(생성자)에 안에 팥이 들어가냐, 크림이 들어가냐 , 얼마만큼 구울거냐 하는 속성들을 정의하는 과정을 초기화(init) 라고 할 수 있다.

    즉, 생성자를 통해 객체의 프로퍼티와 메소드를 미리 정의해두면 동일한 코드를 여러 개의 인자에서 여러 번 재사용 할 수 있다.

    일반적인 객체지향 언어에서 생성자는 클래스의 소속이다. 하지만 자바스크립트에서 객체를 만드는 주체는 함수다.

    함수에 new를 붙이는 것을 통해서 객체를 만들 수 있다는 점은 자바스크립트에서 함수의 위상을 암시하는 단서이면서 또 자바스크립트가 추구하는 자유로움을 보여주는 사례라고 할 수 있다.

     

     

    전역객체 window

     

    전역객체(Global object)는 특수한 객체다. 모든 객체는 이 전역객체의 프로퍼티다. 
    그리고 모든 전역변수와 함수는 사실 window 객체의 프로퍼티다. 

     

    ex) 

    let o = {'func':function(){ 
        alert('Hello?'); 
    }} 
    
    o.func(); 
    window.o.func(); 




    전역객체API


    :  ECMAScript에서는 전역객체의 API를 정의해두었다. 그 외의 API는 호스트 환경에서 필요에 따라서 추가로 정의하고 있다. 

    이를테면 웹브라우저 자바스크립트에서는 alert()이라는 전역객체의 메소드가 존재하지만 node.js에는 존재하지 않는다. 

    또한 전역객체의 이름도 호스트환경에 따라서 다른데, 웹브라우저에서 전역객체는 window이지만 node.js에서는 global이다. 

    반응형

    댓글