Javascript생성자 함수란?

Posted by negabaro kim on Saturday, March 9, 2019 Tags: js   2 minute read

생성자 함수를 왜 알아야할까?

다른언어와 javascript는 생성자 함수의 역할이 다르므로

그 차이를 이해해서 용어에서 오는 혼동을 없애기 위해

javascript에서 생성자 함수란

인스턴스를 만들기 위한 상자

함수라는 말을 생략하고 생성자라고도 많이 부름

영어로 constructor라고도 부름

생성자 함수에 인스턴스에 만들어질 속성과 메서드를 정의하고, 생성자 함수를 이용해서 인스턴스를 생성할 수 있음.

음?? 내가 알던 생성자 함수는 그게 아닌데??

Java에서 쓰는 생성자 함수와 Javascript에서의 생성자 함수는 역할이 틀림

먼저 용어 정리부터 해보자

Java에서의 클래스/생성자/인스턴스 개념

통상적인 언어에서 클래스는 붕어빵기계 같은건데 복수의 붕어빵을 효율적으로 찍어내기 위해 클래스가 필요하다.

붕어빵을 만들때 초기설정을 담당하는 함수를 생성자 함수라 부른다.

클래스안에 있어야하며 클래스명과 동일한 이름이어야 한다.

붕어빵기계로 붕어빵을 만들면 그것을 인스턴스라고 부른다.

정리하면 이런구조

클래스(생성자 함수) -> 인스턴스

예제도 살펴보자.

class 붕어빵기계 { //클래스
    int 팥, 빵;

    public 붕어빵기계(int 팥, int 빵) { //생성자
        this.팥 = 팥;
        this.빵 = 빵;
    }
}

붕어빵기계 붕어빵 = new 붕어빵기계(30, 70); //인스턴스

Javascript에서의 클래스/생성자/인스턴스

Javascript에서 Java와 같은 클래스 개념은 없다.

그대신 생성자 함수클래스의 역할을 한다.

그러므로 Javascript에서는 이런구조다.

생성자 함수 -> 인스턴스

클래스가 없다보니 생성자 함수를 클래스의 땜빵으로 쓰는 이미지

Java생성자 함수일반함수의 구분방법

Java에서의 생성자 함수는 class명과 이름만 똑같이 생긴 함수였다.

그래서 일반함수와 생성자함수의 구분을 함수명으로 알 수 있었다.

Javascript생성자 함수일반함수의 구분방법

Javascript에서는 클래스가 없으므로 애초에 비교대상이 존재하지 않는다. 즉 일반함수와 생성자 함수의 차이를 구분할 수 없는것

그래서 선조 JS개발자들은 생성자 함수명에는 첫글자를 대문자로 붙이기로 약속하고 안붙어 있는 함수들은 일반함수라는 식으로 구분하고 있다.

일반 함수예)

function girl_group(){
    return "twice";
}

생성자 함수예)

function GirlGroup(name){
    return this.name = name;
}