프로세싱 클래스와 객체
클래스를 정의하는 것은 독특한 데이터 유형을 생성하는 것이다. int, float, boolean과 같은 원시 데이터 유형과 달리 클 래스는 String, Plimage, PFon와 같은 복합 유형이며 이것은 클래스가 하나의 이름으로 많은 변수와 메소드를 담고 있을 수 있다는 의미다. 클래스를 생성할 때는 먼저 코드가 어떻게 작동하길 원하는지 사용자가 고민해야 한다.
이전에 언급했듯이 일반적으로 필요한 변수(이후에 필드가 된다) 목록을 만들고 그 변수가 어떤 유형이어야 할지 알아낸다. 이후의 페이지에 등 장하는 코드는 검은색 배경에 흰색 점이라는 똑같은 이미지를 만들어내지만 작성된 코드는 방식이 다르다.
첫 번째 예시 프 로그램에서 원은 화면 안에 있다. 위치를 저장하기 위해서는 2개의 필드가 필요하다. 이 변수는 원의 움직임을 더 유연하게 조절할 수 있는 foat값이다. 원은 크기도 필요하므로 여기서는 지름을 저장하기 위해 diameter 필드를 만들었다.
클래스 이름은 신중히 고려해야 한다. 이름은 변수와 똑같은 규칙만 따른다면 어떤 단어든 될 수 있지만 클래스 이 름은 항상 대문자로 써야 한다. 이것은 String, PImage와 같은 클래스를 int, boolcan과 같은 원시 유형의 소문자 이름과 쉽게 구별하게 해준다.
화면에 점이 그려져 있어 이 예시에서는 Spot이라는 이름을 채택했다(Circle이라는 이름도 가능했을 것이 다). 변수와 마찬가지로 목적에 부합하는 이름을 클래스에 지으면 도움이 될 수 있다.
필드와 클래스 정의의이름이 결정되었다면 객체를 사용하지 않고 프로그램을 어떻게 작성할지 고려해야 한다. 아래 예 시에서 타원의 위치와 지름 관련 데이터는 메인 프로그램의 일부다.
이 경우에는 아무 문제가 안 되지만 여러 개의 타원이나 복잡한 움직임을 사용한다면 프로그램 조작이 어려울 것이다.
float x = 33.0;
float y = 50.0;
float diameter = 30.0;
void setup() {
size (100, 100);
noStroke();
}
void draw() {
background(0);
ellipse(s, y, diameter, diameter);
}
이 코드를 더 일반적으로 사용할 수 있도록 다음 예시는 타원에 적용되는 필드를 클래스로 이동했다. 프로그램의 첫 줄 은 스팟STor 유형의 s 객체를 선언한다. Spor 클래스는 setp( )과 dEav() 이후에 정의되었다. 3P 객체는 이후에 필드에 접 속하거나 필드를 지정할 수 있는 new라는 키워드를 추가한 setup()으로 구축했다. 다음 세 줄은 Spot 안의 필드에 값을 지정한다. 이 값은 draw() 안에서 타원의 위치와 크기를 설정하기 위해 접근했다. 닷 연산자는 클래스 안의 변수를 지정하고 변 수에 접근하기 위해 사용한다.
Spot sp; // Declare the object
void setup () {
size(100, 100);
noStroke ();
sp = new Spot(); // Construct the obiect
sp.x = 33;
/ Assign 33 to the × field
sp.y = 50;
// Assign 50 to the y field
sp. diameter = 30; // Assign 30 to the diameter field
}
void draw() {
background(0);
ellipse(sp.x, sp.y, sp.diameter, sp.diameter);
}
class Spot {
float x, y;
// The x- and y-coordinate
float diameter; // Diameter of the circle
}
Spot 클래스 자체는 별로 유용하지 않지만 이제 겨우 시작이다. 다음 예시는 이전 예시의 Spot 클래스에 메소드를 추가 해 한 걸음 더 나아가며 이것은 객체지향 프로그래밍의 장점으로 나아가는 또 다른 한 걸음이다. displar() 메소드는 화면에 요소를 그리기 위해 클래스 정의에 추가되었다.
void display () 디스플레이 윈도우에 점을 그린다
아래 코드에서 drav( ) 안의 마지막 줄은 객체의 이름을 쓰고 연산자와 연결된 메소드의 이름을 써 Sp객체에 대한 display() 메소드를 실행한다. 코드 25-02와 25-03의 타원함수의 매개변수 사이의 차이점에 주목하라. 코드 25-03에서 객 체의 이름은 x, y, diameter 필드에 접근하기 위해 사용한 것이 아니다. 이것은 ellipse() 함수가 Spot 객체 안에서 호출되었기 때문이다. 그 줄의 코드는 객체의 display() 함수의 일부이므로 객체의 이름을 특정할 필요 없이 변수에 접근할 수 있다.
이 예시에서 Spot 클래스와 sp 객체의 차이를 강화하는 것이 중요하다. 코드는 , y, 지름diameter 필드와 display() 메소 드가 Spot에 속하는 것처럼 보이게 만들지만 이것은 그 클래스에서 만들어진 그 어떤 객체에도 해당되는 정의다. 이 각 요소 들은 Spot 데이터 유형의 인스턴스 중 하나인 sp 변수에 속한다(sp 변수에 의해 인캡슐레이션incapsulation된다).
Spot sp; // Declare the object
void setup() | size (100, 100): noStroke;
sp = new Spot); // Construct the object
sp.× = 33;
sp.y = 50;
sp, diameter = 30;
}
void draw() I
background(0);
sp.display();}
class Spot {
float x, y, diameter;
void display() 1
ellipse(x, y, diameter, diameter);
}
}