class란 틀(규칙)이 정해진 객체로 재사용이 가능하다. class는 흔히들 붕어빵 기계에 비교되곤 한다. 붕어빵을 예시로 들자면 붕어빵을 만들때 붕어빵 모양을 잡아주는 틀에 밀가루 반죽과 팥을 넣고 구우면 틀 그대로의 붕어빵이 완성된다. class도 정말 이와 비슷하지만 좀더 활용성이 높을 뿐이다. class또한 규칙을 미리 정해놓는다. 미리 변수에 디폴트가 될값을 정해두어 class가 불러와졌을때 정해진 변수의 기본값을 돌려줄수도 있고 생성자를 통한 정해진 변수가 아닌 커스터마이징한 값들로 반환될수도있다.
위 사진은 기본적으로 power라는 변수에 10을 부여했지만 생성자(constructor)의 매개 변수 자리에 다른 값을 부여하면 그 값을 기본값 대신 사용이 가능하다.
*여기서 if(attackStep)을 해준 이유는 기본값을 미리 정해놓은 상태엥서 조건문을 안걸어주고 바로 값을 넣으면 undefined를 리턴하기 때문이다.
여기 미리 지정해둔 SkyUnit이라는 class가 있다. 이 SkyUnit의 메소드를 사용하려면 class를 선언하여 만들고자 하는 class이름을 입력하고 extends SkyUnit을 해줌 으로서 SkyUnit의 메소드를 사용할수 있다.
oop는 class의 형태로 만든 객체를 만들어 다른 모듈에 재사용하며 프로그래밍을 만드는 형태의 방법이다. 결국 oop란 클래스안에 메소드를 생성하고 그 메소드를 프로그래밍에 적용하는 프로그래밍 작성 방법중에 하나이다.
OOP형태를 만들기 위해 여러 class와 메소드를 생성해야하는데 작성하다 보면 파일이 굉장히 많아지고 그러다보면 지저분해 진다. 그래서 class들을 controllers 라는 폴더안에 넣어 정리하는 방식이 MVC이다 (Models Views Controllers)
Models의 역할은 db의 스키마를 정리한 모델이 들어간다. 스키마에 어떤데이터가 들어올것이고 그 데이터의 타입은 어떤것일지 정해주는것이다.
views는 backend에서 화면을 렌더링할 html을 보내줫었찌만 최근엔 views는 잘 사용하지 않게되었다.
controllers는 서비스가 구동될때 필요한 컨트롤러(미들웨어)들을 정리한 폴더로 핵심 비지니스 로직은 services라는 폴더를 또 만들어 넣어준다.
위에서 언급했던 oop는 객체가 객체를 참고해서 프로그래밍을 작성하는 객체지향형 프로그래밍이라고 하였다. 그렇다면 객체가 객체를 참고하는데 있어 얼마만큼의 의존도를 갖고 참고 하느냐에 따라 tight coupling과 loose coupling으로 나뉜다. 우선 tight coupling부터 소개하자면 tight coupling으로 맺어진 객체는 결합되는 객체에 대한 의존성이 크다. tight coupling으로 결합된 객체는 다른 하나가 변경되거나 수정되는 점들을 놓치기 쉽다. 또한 tight coupling에서는 new 선언이 비교적 많다(new 선언은 메모리를 많이먹음!!)
그렇다면 loose coupling은 무엇일까? loose coupling은 서로간의 의존성이 낮다. loose coupling은 새로운 기능 개발이나 수정등이 쉽다. 그리고 new 선언이 비교적 적다.