class를 말하면서 객체 지향이라는 단어를 많이 듣게 된다.
객체 지향이 무엇이고, class가 무엇인지 먼저 살펴보자
원래 초장기의 프로그래밍 언어는 순차적 프로그래밍으로 이루어졌다.
순차적 프로그래밍이란 말 그대로 프로그램이 순서대로 실행된다는 이야기이다.
하지만 프로그램의 규모가 커질수록, 특정 위치의 코드를 반복해서 실행할 수 있도록 goto
구문( 말 그대로 이동하다라는 의미 )을 사용하다보니 순차적으로 프로그래밍을 이해하기 힘들고 코드를 제어하기 힘들어졌다.
// 순차적 프로그래밍
let hp = 100;
let mp = 100;
gameloop:
if( key = 'magic' ){
goto magic
}
goto gameloop
magic:
mp -= 10;
goto gameloop
이렇게 goto
로 프로그래밍을 하다보니 이해하기가 힘들다. 반복되는 코드는 묶어서 한번에 관리하고 해당 코드를 호출하고 나면 다시 돌아오는 방식을 통해 개발을 진행하게 된다. 이 것이 바로 함수
를 활용한 방식이다.
하지만 이것도 프로그램의 규모가 커지면 커질수록 변수에 같은 이름을 써서 관리할 수 없게 되어 변수명 관리가 어려워진다는 문제가 발생한다.
// 절차적 프로그래밍
const magician_name = "Max";
let magician_hp = 300;
let magician_mp = 300;
function magician_useSkill(){
magician_mp -= 50;
}
magician_useSkill();
// magician을 사용하는 유저가 많아지면
//magician1_name, magician2_name ... 변수가 지저분해지고 관리도 힘들다.
이런 식의 소제목이 맞을지 모르겠지만 연관있는 데이터들을 하나로 묶어 관리할 수 있도록 구조체의 개념이 등장하게 된다.
C
언어에서 자주 사용한다.
const magician = {
name : "Max",
hp : 300,
mp : 300
}
function useSkill( magician ){
magician.mp -= 50;
}
useSkill( magician );
// 아까보다 변수 길이가 짧아지고 좀더 명확하게 어떤 변수인지 알기 쉬워졌다.
데이터를 구조체로 관리하다보니 특정 구조체만 가지고 동작하는 함수들이 있다는 것을 알게 되고 그럼 구조체에 데이터만 관리하지 말고 함수도 한꺼번에 넣어서 관리하자는 개념이 등장하게 되었다.
이것이 바로 객체지향의 등장이다.
class Magician {
name = "Max",
hp = 300,
mp = 300
useSkill() {...};
}
let character = new Magician();
character.useSkill();
이렇게 하나의 모듈로 관리되면서 규모가 큰 프로젝트를 진행하더라도 설계된 class를 잘 조립하면 편리하게 프로그래밍이 가능하게 되고 그로 인해서 Class
가 탄생하게 된다.
구조체 + 함수 = Class
Class를 통해 만들어진 것 = Object
객체 내의 데이터를 사용자가 함부로 조작할 수 없도록 할 수 있다.
객체를 받아오되 전체 말고 일부분만 재사용하자.
객체의 공용된 부분을 모아서 상위 개념으로 새롭게 이름을 붙이자
참고 자료 - 자바스크립트에서 객체지향을 하는 게 맞나요?