Spinspots 클래스는 Spin의 요소를 상속한다. Spindim 클래스와 마찬가지로 이것은 슈퍼클래스의 필드와 생성자를 사 용하지만 Spin에서 또 다른 필드를 추가함으로써 더 확장된다. 원의 크기를 변경하는 옵션을 추가하기 위해 dim 필드가 추가 되었다. 이 필드는 클래스의 상단에 선언되었고 생성자에 지정되었으며 원의 크기를 설정하기 위해 display() 메소드에서 접 근했다는 점에 주목하라.
class SpinSpots extends Spin {
float dim;
SpinSpots (float x, float y, float s, float d) 1
super(x, y, s);
dim = d;
}
void display () {
noStroke();
pushMatrix ();
translate(x, y);
angle += speed;
rotate (angle);
ellipse(-dim/2, 0, dim, dim):
ellipse (dim/2, 0, dim, dim);
popMatrix ();
}
}
서브클래스에서 객체를 생성하는 과정은 일반 클래스에서 객체를 생성하는 과정과 똑같다. 클래스는 데이터 유형이며 이 유형의 객체 변수는 닷 연산자로 선언, 생성, 접근된다. 아래 프로그램에서 SpinSpot 객체와 SpinArm 객체가 선언되고 생성되었다. 두 객체의 update() 메소드는 각도를 증가시키고 화면에 그리는 데 사용된다. Spin, SpinSpots, SpinArm의 클 래스 정의는 같은 페이지나 같은 스케치의 별개 탭에 포함되어야 한다.
//Requires the Spin, SpinSpots,and SpinArm class
SpinArm arm;
SpinSpots spots;
void setup() {
size (100, 100);
arm = new SpinArm(width/2, height/2, 0.01);
spots = new SpinSpots(width/2, height/2, -0.02, 33.0);
void draw() {
background (204); arm.update(); arm.display();
spots.update (); spots.display();
}
모듈식 프로그래밍은 중요한 기술이지만 너무 좋은 것일 수 있다. 코드가 다루기 너무 어려운 지점까지 나아가지 않도록 주의하라. 예를 들어 버튼Button 예시에서 3개의 클래스를 가진 단순한 버튼 동작의 정의는 실용적이지 않다. 이것은 객체지향 프로그래밍의 중요한 개념을 보여주기 위해 이러한 방식으로 만들어졌지만 1~2개 클래스로 단순화될 수 있다(단 순화되어야 한다).
종합
이번 장에서는 기본적인 스케치를 오브젝트 기반 프로그램으로 발전시키는 과정을 다룬다.
변수, 조건부 구문, 루프 등과 함께 함수와 오브젝트 기반 코드를 사용하는 작업기술은 코딩을 배우는 데 가장 필수적 인 요소들이다. 이전 두 장에서 다루었듯이 우리는 초보자들이 먼저 함수와 클래스가 없는 스케치를 작성하고 논리나 변수 를 확인한 후, 이 요소들을 포함할 것을 권했다.
프로그램을 익숙하고 더 기본적인 방식으로 시작한 후. 더 높은 고급기술을 차용하는 실행의 일환이었다. 더 많은 경험을 쌓은 후에는 함수와 클래스를 프로그램 작성 초기부터 작성해도 상관 없다. 이 접근법을 바탕으로 이번 장은 직접 제작한 함수나 오브젝트 없이 스케치를 작성하는 것으로 시작한다. 반복적인 스케치 이 후, 오브젝트 기반 스케치를 구성해볼 것이다.
모듈 방식과 재사용 가능성
예시를 살펴보기 전에 먼저 함수나 오브젝트를 사용하는 것이 왜 중요한지 확인할 것이다. 이전 장의 예시와도 관련 있 듯이 코드를 반복적으로 작성하는 것을 피하는 것이 가장 바람직하다. 과도한 잉여코드는 새로운 함수나 클래스화를 사용해 짧고 재사용성을 높게 만드는 것이 좋다.
다수의 도형을 만들어내는 코드를 파악한 후. 이 코드를 함수로 만들면 재사용 이 쉬워진다. 함수나 클래스를 만든 후에는 단순히 하나의 스케치에서만 재사용이 가능한 것이 아니라 이 코드의 블록들은 복사 후 붙여 넣기로 어떤 스케치에서든 사용될 수 있다.
모듈성 향상은 함수와 오브젝트 사용의 또 다른 장점이다. 모듈성은 변수에 기반해 코드를 다른 방향으로 재사용하는 기 능을 더 확장시킨다고 할 수 있다. 예를 들어 정육면체를 그리는 함수를 사용해 매개변수 값을 달리 입력해 모양이 다른 정 육면체를 그려낼 수 있다.
함수 장의 매개변수화 부분에서 설명했듯이 매개변수는 함수의 동작과 출력물을 조정하는 강력한 도구다. 잘 디자인된 모듈식 함수와 클래스는 코드에 내포된 아이디어의 기반을 확고히 하며 특정 목표나 문제를 다 른 방식으로 생각하는. 새로운 아이디어를 도출해낼 수 있다.
알고리즘
알고리즘을 정의하고 사용하는 것은 함수와 오브젝트의 재사용성과 모듈성 개념의 필수 아이디어다. ‘알고리즘’이 복잡 하게 들릴지 모르지만 의미는 전혀 복잡하지 않다. 간단히 말해 특정 결과를 도출하기 위한 지시사항이라고 생각하면 된다.
예를 들어 계란을 삶거나 목도리를 떠내는 데도 알고리즘이 필요한 것이다.
이번 장에서 다룰 예시에서 사용될 코드는 원이 직사각형에 겹치는지 계산해야 한다. 이것은 원의 기하학적 수치(위치와 반지름)와 직사각형의 기하학적 수치(위치, 너비, 높이)에 겹치는 부분이 있는지 산출하는 알고리즘을 통해 판단할 수 있다.
이 계산이 함수 내에 내포되면 이 계산은 코드를 다시 작성하지 않고도 프로그램 안에서는 어디서든 다시 사용될 수 있다.
알고리즘에 매개변수를 추가해 모든 원과 직사각형에 적용시킴으로써 모듈성이 향상되는 것이다.