본문 바로가기
GD's IT Lectures : 기초부터 시리즈/프로세싱(Processing) 기초부터 ~

[프로세싱(Processing) : 중급] 객체지향 프로그래밍 (OOP) 기본

by GDNGY 2023. 5. 1.

1. 객체지향 프로그래밍 (OOP) 기본

프로세싱(Processing)은 Java를 기반으로 한 프로그래밍 언어로, 객체지향 프로그래밍(Object-Oriented Programming, OOP)을 지원합니다. 이번 장에서는 객체지향 프로그래밍의 핵심 개념인 클래스와 객체, 생성자와 메서드, 캡슐화, 상속, 다형성에 대해 알아보고, 프로세싱에서 어떻게 적용되는지 살펴봅니다.

 

1.1. 클래스와 객체

클래스(Class)는 객체(Object)를 생성하기 위한 틀로, 데이터와 함수를 하나로 묶어서 관리할 수 있게 합니다. 객체는 클래스의 인스턴스로, 실제 프로그램에서 사용되는 개별적인 요소입니다. 프로세싱에서 클래스는 다음과 같이 정의합니다.

 

class Car {
  int x;
  int y;
  color c;

  Car(int x, int y, color c) {
    this.x = x;
    this.y = y;
    this.c = c;
  }

  void display() {
    fill(c);
    rect(x, y, 30, 10);
  }
}

 

1.2. 생성자와 메소드

생성자(Constructor)는 객체가 생성될 때 호출되는 특별한 메서드로, 객체의 초기화를 담당합니다. 일반 메서드(Method)는 객체의 행동을 정의합니다. 프로세싱에서 생성자와 메서드는 다음과 같이 작성합니다.

 

class Car {
  // ...
  Car(int x, int y, color c) { // 생성자
    this.x = x;
    this.y = y;
    this.c = c;
  }

  void display() { // 메소드
    fill(c);
    rect(x, y, 30, 10);
  }
}

 

1.3. 캡슐화, 상속, 다형성

캡슐화(Encapsulation)는 클래스 내부의 데이터와 메소드를 외부로부터 보호하기 위한 방법입니다. 프로세싱에서 private 키워드를 사용해 캡슐화를 구현할 수 있습니다.

 

상속(Inheritance)은 기존 클래스의 속성과 메서드를 새로운 클래스에 물려주는 개념입니다. 프로세싱에서 extends 키워드를 사용해 상속을 구현할 수 있습니다.

 

class ElectricCar extends Car {
  int battery;

  ElectricCar(int x, int y, color c, int battery) {
    super(x, y, c);
    this.battery = battery;
  }
}

 

다형성(Polymorphism)은 하나의 인터페이스를 여러 객체가 다양한 방식으로 구현할 수 있는 기능입니다. 프로세싱에서 메서드 오버라이딩(Overriding)을 사용해 다형성을 구현할 수 있습니다.

 

class ElectricCar extends Car {
  int battery;

  ElectricCar(int x, int y, color c, int battery) {
    super(x, y, c);
    this.battery = battery;
  }

  // 메소드 오버라이딩
  void display() {
    fill(c);
    rect(x, y, 30, 10);
    fill(255, 0, 0);
    rect(x, y - 5, 30, 5);
  }
}

 

1.4. 객체지향 프로그래밍 예제

다음 예제는 객체지향 프로그래밍의 개념을 적용한 프로세싱 코드입니다. Car 클래스와 ElectricCar 클래스를 사용해 두 종류의 차량을 생성하고 화면에 표시합니다.

 

class Car {
  int x;
  int y;
  color c;

  Car(int x, int y, color c) {
    this.x = x;
    this.y = y;
    this.c = c;
  }

  void display() {
    fill(c);
    rect(x, y, 30, 10);
  }
}

class ElectricCar extends Car {
  int battery;

  ElectricCar(int x, int y, color c, int battery) {
    super(x, y, c);
    this.battery = battery;
  }

  void display() {
    super.display();
    fill(255, 0, 0);
    rect(x, y - 5, 30, 5);
  }
}

Car[] cars = new Car[5];

void setup() {
  size(400, 200);
  for (int i = 0; i < 5; i++) {
    if (i % 2 == 0) {
      cars[i] = new Car(10 + i * 40, 50, color(0, 0, 255));
    } else {
      cars[i] = new ElectricCar(10 + i * 40, 50, color(0, 255, 0), 100);
    }
  }
}

void draw() {
  background(255);
  for (int i = 0; i < 5; i++) {
    cars[i].display();
  }
}

 

이 예제에서 Car 클래스와 ElectricCar 클래스를 정의하고, 배열을 사용해 여러 개의 차량 객체를 생성하여 관리합니다.  ElectricCar 클래스는 Car 클래스를 상속받아 기능을 확장하며, display 메서드를 오버라이딩하여 다른 표시 방식을 구현합니다. 이렇게 객체지향 프로그래밍을 사용하면 코드를 재사용하고 확장하기 쉬워지며, 프로젝트를 보다 체계적으로 관리할 수 있습니다.

반응형

댓글