Javascript – Class(클래스)
Javascrit 에서 class 정의 생성에 대한 방법에 대해 알아본다.
클래스 예제가 가장많이 나오는 animal 로 한번 알아보자
<script language=”javascript”>
class Animal {
// javascript 에서는 var , let 함수로 멤버변수 선언을 못함 – 오류남
// const legs; // 멤버변수를 생성자 밖에 선언하는 방법은 var , let , const 쓰지않고
// 그냥변수 명만 쓰면 선언됨
legs;
sounds;
isTale = true;
// 선언 후 this 접근 생성자 내부에 선언해도 멤버변수로 사용가능
// ★ 메서드 / 프로퍼티에는 function 을 붙이지 않는다.
// set 속성명() { } / get 속성명(value) {return value;}
}
set legs(value)
{
this.legs = value; // 오류발행 : Maximum call stack size exceeded
}
// get 프로퍼니 접근 : cat.legs;
let cat = new Animal(4 , “야옹” , true , false); // 생성과 함께 Constuctor 호출
console.log(“legs : ” + cat.legs) // 속성은 멤버 변수처럼 접근
console.log(“legs : ” + cat.legs) // 속성은 멤버 변수처럼 접근
멤버변수를 직접변경하지, 구지 프로퍼티를?
여기서 잠깐 한 가지를 집어 보고가자 , 가끔 멤버변수를 직접 수정해도되는데
왜 구지 번거롭게 프로퍼티를 작성해서 해야하는지 궁금해하는사람들이 있다.
아래소소를 보자
class Test {
constructor( no , nm)
{
this.myNo = no;
this.myName = nm;
}
getMyNo()
{
return this.myNo;
}
}
var myObj = new Test(1 , “test”);
myObj.myNo = 10; // 멤버변수에 직접할당 – 프로퍼티가 작성도 피료없고 편함
console.log(this.getMyhNo());
// 그런데, 만약에 할당되는 멤버변수에 제어를 하고싶어지만 문제가 달라진다.
// myNO 에 1 ~ 10 까지만 들어오게 해야한다면,,,
var inputNo;
inputNO = inNo; // 어딘가에서 No를 받아오고
var myObj = new Test(1 , “test”);
if (inputNo >= 1 and inputNo <= 10) // 직접 중간에 제어문을 넣어 제어해줘야함
myObj.myNo = 10;
else
console.log(“1 ~ 10입력만 가능”);”
console.log(this.getMyhNo());
위와 같이 조건문을 직접 작성해야하고 저 클래스를 사용하는 모든 개발자들은
제어문을 넣어 체크해줘야한다 간혹? 까먹을수도있겟지,,
class Test {
constructor( no , nm)
{
this.myNo = no;
this.myName = nm;
}
set myNo(v)
{
// 이렇게 제어를 프로퍼티 안에두고
if ( v < 1 && v > 10)
this._myNo = -1; // -1 에러코드로 지정함 또는 null
// throw exception() // 예외 발생을 해도 되고
// console.log(“1 ~ 10 까지만 가능”) // 오류메시지도가능
else
this._myNo = v;
}
get myNo()
{
return this._myNo;
}
}
var myObj = new Test(1 , “test”);
myObj.myNo = 100; // myNo 프로퍼티에 따라 체어가됨
console.log(this.getMyhNo());
제어 코드를 클래안에 두어 객체 사용시의 처리를 제어하지 않아도되는 깔끔함,,
그리고 , 무엇보다 가장 큰 이유는 캡슐화(encapsulation)이다.
javascript의class 에서도 다른 언어와 마찬가지로 상속을 지원한다.
class Animal {
canFly = false;
constructor( l, s, t, r ,f)
{
console.log(“animal constructor 실행”);
this.legs = l;
this.sounds = s;
this.isTale = t;
this.canRun = r;
this.canFly = f;
}
// 고양이과 동물을 포함하는 클래스 생성 Animal 상속 받는다.
// 부모 클래스(Animal) 에서 구현된 모든 것을 상속받는다
// 상속은 extends 키워드로 받음
console.log(“Cat constructor 실행”)
}