https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Objects/Object_building_practice
해당 글에 나와있는 기본 소스를 가지고 실습을 하며 만드는 과정이다.
자바스크립트의 클래스는 자바의 클래스와 만드는 방법이 조금 다르다. Java의 경우 클래스 파일을 만들어서 클래스를 분리하면서 생성하는 반면, 자바스크립트는 클래스는 JS는 프로토타입 기반 객체 지향 프로그래밍 언어이며, 초기 자바스크립트에 클래스란 개념은 없었으나, ES6 자바스크립트에서 클래스가 도입되었다. 하지만 클래스도 JS에서는 프로토타입 기반으로 구현된 것이다. 정확히 말하면 function과 new를 통해 클래스처럼 쓸 수 있는 것이다.
javascript와 java의 클래스 차이를 조금 정리하면 다음과 같다
1. Class
2. Object
3. Function
4. 생성자
5. 상속
JavaScript : Class가 존재하지 않아 Prototype을 이용하여 상위 Function을 복제하여 상속받음
Java : extends를 사용하여 상위 Class를 상속받음
추가적으로 주의할 점은 1개의 클래스에 constructor 는 1개만 올 수 있다. 따라서 Java와 달리 생성자 오버로딩이 불가능하다, 그렇지만 마찬 가지로 다른 방법을 통해 오버로딩과 비슷한 기능을 만들어낼 수 있다.
다음은 부모클래스를 인 Shape와 자식 클래스인 Ball 클래스를 만드는 예제이다.
마찬가지로 shpae 클래스의 자식 클래스인 evil 클래스이다.
ball 객체를 담는 배열 balls[] 를 만든 후 무한정 찍어낼 수 없기 때문에 갯수에 제한을 건다.
이후 각기 다른 크기와 색상을 만들기 위해 객체를 생성할 때 무작위의 크기와 색상을 입혀준다.
객체를 생성할 때
함수단위스코프(var,let,const) + 변수명 = new + Class명 방식으로 생성하면 된다.
생성 방식은 동일하며 매서드 쪽 부분의 차이가 있다.
loop를 통해 기능을 반복적으로 수행하며, 게임을 정상적으로 작동하게끔 만드는 핵심 영역이다. 여기에서 사용되는 ball과 evilball의 반복되는 부분은 매서드로 따로 빼주었다.
w,a,s,d 키로 저 흰 원을 움직여서 공과 닿으면 닿은 공이 사라지면 우측 위의 count가 한개씩 줄어든다.