봉봉의 개인 블로그
2018-09-05(JavaScript 클래스를 정의하는 3가지 방법) 본문
자바스크립트 클래스를 정의하는 3가지 방법
자바스크립트는 문법측면에서 아주 유연한 객체지향 언어이다. 이 글에서 객체를 정의하고 생성하는 3가지 방법을 찾을 수 있다. 이미 자주 쓰는 방법이 있다 하더라도 다른사람들이 작성한 다른 방법들을 이해하는데 도움이 될것이다.
먼저 자바스크립트에는 클래스라는 개념이 없다는 것을 알고 있어야한다 함수는 클래스를 흉내내기 위하여 사용될 수 있지만 일반적으로 자바스크립트는 클래스가 없는 언어이다.
자바스크립트에서 모든것은 객체이다. 그리고 상속은 객체가 객체로 부터 상속을 받지, 다른 클래스가 있는 언어들 처럼 클래스가 클래스로부터 상속받지 않는다.
1. 함수 이용하기
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | function apple (type) { this.type = type; this.color = "red"; this.getInfo = getAppleInfo; } // 안좋은 방법! 아래 계속 읽어보세요. function getAppleInfo() { return this.color + ' ' + this.type + ' apple'; } //apple 생성자 함수를 사용하여 객체를 생성하기 위해서는 //다음과 같이 속성에 값을 입력하고 메소드를 호출하면 된다. var apple = new apple('macintosh'); apple.color = "reddish"; alert(apple.getInfo()); | cs |
1.1 내부에 메소드 정의하기
위 예제를 보면 apple 클래스의 getInfo() 메소드가 별개의 함수인 getAppleInfo() 에 고정되어 있다. 이렇게 해도 되긴하지만 한가지 단점이 있다. 이렇게 정의된 많은 함수들은 전역 네임스페이스에 정의되고 만다. 이렇게 되면 사용하는 다른 라이브러리나 동일한 함수이름을 사용해야 된다면 함수이름이 충돌될 수 있게 된다. 무분별한 전역 네임스페이스의 사용을 막기 위해, 아래 같이 메소드를 생성자 함수 안에 정의할 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 | function apple (type) { this.type = type; this.color = "red"; this.getInfo = function() { return = this.color + ' ' + this.type + ' apple'; }; } //이렇게 바뀌어도 위에서 같이 객체를 생성하고 //속성값과 메소드를 사용하면 된다. var apple = new apple('macintosh'); apple.color = "reddish"; alert(apple.getInfo()); | cs |
1.2 prototype에 메소드 추가하기
1 2 3 4 5 6 7 8 9 10 | function Apple (type) { this.type = type; this.color = "red"; } Apple.prototype.getInfo = function() { return this.color + ' ' + this.type + ' apple'; }; //다시 1. 과 1.1과 같은 방법으로 새 객체를 사용하면 된다. | cs |
2.객체리터럴(literal) 사용하기
1 | var o = {}; | cs |
아래의 방법또한 가능하다.
1 | var o = new OBject(); | cs |
배열은 아래와 같이 가능하다.
1 | var a = []; | cs |
배열또한 아래의 방법또한 가능하다.
1 | var a = new Array(); | cs |
보통의 클래스를 생성하기 위한 작업들을 하지 않고 바로 객체를 생성할 수 있다.
이번에는 앞의 예제들과 동일한 기능을 하지만 객체 리터널을 이용해보면
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | var apple = { type : "macintosh", color : "red", getInfo : function () { return this.color + ' ' + this.type + ' apple'; } } //이경우, 클래스의 인스턴스를 생성할 필요가없다. //이미 생성되어있다. 그러므로 //생성된 인스턴스를 바로 사용하면 된다. apple.color = "reddish"; alert(apple.getInfo()); | cs |
이런 객체를 싱글튼(singleton) 이라고 부르기도 한다. 자바와 같이 클래스가 있는 언어에서 싱글튼같이 싱글튼은 언제나 하나의 클래스 인스턴스만을 가질수 있다, 동일한 클래스의 객체를 더 생성할 수 없다. JavaScript는 모든 객체가 처음부터 싱글튼이기 때문에 JavaScript에서 이 개념은 더이상 의미가 없다.
3.함수를 이용한 싱글튼
1 2 3 4 5 6 7 8 9 10 11 12 | var apple = new function () { this.type = "macintosh"; this.color = "red"; this.getInfo = function () { return this.color + ' ' + this.type + ' apple'; } } //위의 1.1과 아주 비슷하지만 객체를 사용하는 방법은 2.와 같다. apple.color = "reddish"; alert(apple.getInfo()); | cs |
new function () {...} 구문은 2가지를 동시에 한다. 함수(익명 생성자 함수)를 정의하고 new 로 작동(invoke)시킨다. 이렇게 써본적이 없으면 다소 복잡해 보일수 있고, 그렇게 많이 쓰이지도 않는다, 그래도 한번만 사용하거나 이름짓기 어려운 생성자 함수가 꼭 필요할때 사용할수 있는 방법이다.
'입사후 공부한내용' 카테고리의 다른 글
2018-09-11(동적인 웹페이지를 위한 CGI) (0) | 2018.09.11 |
---|---|
2018-09-06(intellij JavaScript Version 변경) (0) | 2018.09.06 |
2108-07-26(아키텍처 패턴 요약) (0) | 2018.07.26 |
2018-06-01(MSSQL merge) (0) | 2018.06.01 |
2018-04-27(Outer Apply) (0) | 2018.04.27 |