상태와 행동을 구분 지을 수 있는 것.
아래와 같은 function 객체를 만들기 위한 틀로써 사용된 경우다.
위와 같은 항목을 객체로써 구현함.
function CommonMonster(name, HP, strength, defenceStat, spawnDelay, spawnTime) {
this.name = name;
this.HP = HP;
this.strength = strength;
this.defenceStat = defenceStat;
// 몬스터가 다시 스폰되는 딜레이
this.spawnDelay = spawnDelay;
// 몬스터가 나오는 시간
this.spawnTime = spawnTime;
this.isLive = false;
function attack() {
return this.strength * 5;
}
function defence(damage) {
this.HP -= (damage * ((100 - this.defenceStat) / 100));
if (this.HP <= 0) {
this.isLive = false;
}
}
function spawn() {
this.isLive = true;
}
}
바론, 용 등 정글 몬스터들을 하나하나 일일히 구현하기 어렵기도 하고 비효율적임.
객체지향언어에서는 commonMonster 와 같은 프레임/틀을 만들어서 중립 몬스터를 보다 쉽게 구현할 수 있음. 좀 더 쉽게 설명하자면 붕어빵을 떠올리면 된다. 붕어빵에도 슈크림붕어빵, 팥붕어빵 여러가지가 있는데 같은 틀을 실제로 사용한다. 이와 같은 이치라고 생각하면 된다.
// 이로써 우리는 CommonMonster 라는 function 을 통해서 틀을 만든 것임.
// 그 틀을 이용해서 우리는 아래와 같은 중립몬스터를 보다 편하게 만들 수 있음.
var dragon = new CommonMonster('드래곤', 2000, 500, 500, 600, 300);
var varon = new CommonMonster('바론', 5000, 1000, 1000, 600, 300);
var chicken = new CommonMonster('닭', 50, 50, 50, 60, 90);
chicken.spawn();
객체지향-프로그래밍(OOP, Object Oriented Programming)는 마치 블럭을 여러개 조합하는 프로그래밍 방식이다. 만약의 League of Legends 라는 게임을 OOP 를 통해서 만든다고 가정했을 때, 모든 것을 객체 단위로 생각해야 한다. 우리는 기본적으로 아래와 같은 단위로 생각할 수 있다.
이런식으로 모든 것을 한 단위로 묶고 공통적으로 틀을 만들고 그 틀 조합하고 이용해서 프로그래밍하는 방식이 바로 객체지향 프로그래밍이다. 즉 객체지향언어라는 것은 언어 자체가 객체지향적으로 프로그래밍하는 것을 지향하는 언어라는 것이다. 한마디로 객체지향언어를 사용하더라도 객체지향 프로그래밍을 안하고 프로그래밍 할 수 있다. 하지만 자바스크립트는 객체지향 프로그래밍을 하기 좋게 안성맞춤이고 그것을 지향도록 만들어진 프로그래밍 언어라는 것이다.
객체지향을 제대로 이해하지 못한 상태에서 객체 지향 언어를 사용하면 객체지향언어를 사용하는 의미가 없다. 즉 다른언어를 사용하는 것이랑 다를바가 없고 자바스크립트를 사용하는 의미가 없다는 것. 즉 언어의 이해와 장점을 제대로 활용하지 못하고 있다는 것과 다름이 없다.