생성자 함수를 왜 알아야할까?
다른언어와 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;
}