>백엔드 개발 >C++ >C로 객체지향 프로그래밍을 하시나요? 처음부터 인터페이스 구현

C로 객체지향 프로그래밍을 하시나요? 처음부터 인터페이스 구현

DDD
DDD원래의
2025-01-21 10:07:08876검색

Object-Oriented Programming in C? Implementing an Interface from Scratch

컴퓨팅의 복잡성을 탐구하려면 어떻게 작동하는지뿐만 아니라 이유처음부터 어떻게 구축할 수 있는지를 이해해야 합니다. 이 기사에서는 Java를 참조점으로 사용하여 객체 지향 프로그래밍(OOP)의 인터페이스 개념을 살펴본 다음 기본적인 C 구현을 보여줍니다.

간단한 차량 가격 책정 예시

우리의 예는 차량 가격 계산에 중점을 둡니다. 자동차는 속도에 따라 가격이 책정되고, 오토바이는 엔진 배기량(cc)에 따라 가격이 책정됩니다. 핵심 차량 동작을 정의하는 Java 인터페이스로 시작합니다.

<code class="language-java">public interface Vehicle {
    Integer price();
}</code>

이 인터페이스는 CarMotorcycle 클래스로 구현됩니다.

<code class="language-java">public class Car implements Vehicle {
    private final Integer speed;
    public Car(Integer speed) { this.speed = speed; }
    @Override public Integer price() { return speed * 60; }
}

public class Motorcycle implements Vehicle {
    private final Integer cc;
    public Motorcycle(Integer cc) { this.cc = cc; }
    @Override public Integer price() { return cc * 10; }
}</code>

도우미 기능이 가격을 인쇄합니다.

<code class="language-java">public static void printVehiclePrice(Vehicle vehicle) {
    System.out.println("$" + vehicle.price() + ".00");
}</code>

주요 방법은 사용법을 보여줍니다.

<code class="language-java">public static void main(String[] args) {
    Car car = new Car(120);
    Motorcycle motorcycle = new Motorcycle(1000);
    printVehiclePrice(car);  // Output: 00.00
    printVehiclePrice(motorcycle); // Output: 000.00
}</code>

이를 C로 복제하려면 다른 접근 방식이 필요합니다.

C에서 인터페이스 구현: 수동 접근 방식

C에는 Java의 내장 인터페이스 메커니즘이 없습니다. 데이터에는 구조체를, 메서드에는 함수를 사용하여 시뮬레이션하겠습니다. 컴파일러는 인터페이스 확인을 처리하지 않습니다. 수동으로 해야 합니다.

우리의 "인터페이스" 뼈대:

<code class="language-c">#include <stdio.h>
#include <stdlib.h>

typedef enum { VEHICLE_CAR, VEHICLE_MOTORCYCLE } VehicleType;

typedef struct {
    VehicleType type;
} Vehicle;

void vehicle_free(Vehicle *vehicle);
int vehicle_price(Vehicle *vehicle);</code>

Car 구현:

<code class="language-c">typedef struct {
    VehicleType type;
    int speed;
} Car;

Car *car_init(int speed) {
    Car *car = malloc(sizeof(Car));
    car->type = VEHICLE_CAR;
    car->speed = speed;
    return car;
}

void car_free(Car *car) { free(car); }
int car_price(Car *car) { return car->speed * 60; }</code>

Motorcycle 구현(Car과 유사):

<code class="language-c">typedef struct {
    VehicleType type;
    int cc;
} Motorcycle;

Motorcycle *motorcycle_init(int cc) {
    Motorcycle *motorcycle = malloc(sizeof(Motorcycle));
    motorcycle->type = VEHICLE_MOTORCYCLE;
    motorcycle->cc = cc;
    return motorcycle;
}

void motorcycle_free(Motorcycle *motorcycle) { free(motorcycle); }
int motorcycle_price(Motorcycle *motorcycle) { return motorcycle->cc * 10; }</code>

가격 인쇄 기능:

<code class="language-c">void print_vehicle_price(Vehicle *vehicle) {
    printf("$%d.00\n", vehicle_price(vehicle));
}</code>

결정적으로 vehicle_free 문을 사용하여 vehicle_priceswitch을 구현하여 다양한 차량 유형을 처리합니다.

<code class="language-c">void vehicle_free(Vehicle *vehicle) {
    switch (vehicle->type) {
        case VEHICLE_CAR: car_free((Car *)vehicle); break;
        case VEHICLE_MOTORCYCLE: motorcycle_free((Motorcycle *)vehicle); break;
    }
}

int vehicle_price(Vehicle *vehicle) {
    switch (vehicle->type) {
        case VEHICLE_CAR: return car_price((Car *)vehicle);
        case VEHICLE_MOTORCYCLE: return motorcycle_price((Motorcycle *)vehicle);
    }
}</code>

주요 기능의 사용법을 보여줍니다.

<code class="language-c">int main(void) {
    Car *car = car_init(120);
    Motorcycle *motorcycle = motorcycle_init(1000);
    print_vehicle_price((Vehicle *)car);  // Output: 00.00
    print_vehicle_price((Vehicle *)motorcycle); // Output: 000.00
    vehicle_free((Vehicle *)car);
    vehicle_free((Vehicle *)motorcycle);
    return 0;
}</code>

실용적 적용: 추상 구문 트리(AST)

이 수동 인터페이스 접근 방식은 AST(추상 구문 트리)가 유사한 구조를 통해 이점을 얻을 수 있는 구문 분석과 같은 시나리오에서 특히 유용합니다. AST의 다양한 노드 유형은 별도의 구조체로 표시될 수 있으며 모두 함수 집합으로 정의된 공통 "인터페이스"를 따릅니다.

결론

C에는 내장 인터페이스가 없지만 신중한 구조 및 기능 설계로 인터페이스를 시뮬레이션하면 유사한 OOP 원칙을 달성할 수 있는 강력한 메커니즘이 제공됩니다. 이 수동 접근 방식은 유연성과 제어 기능을 제공하며 특히 파서 및 인터프리터와 같은 복잡한 프로젝트에 유용합니다.

위 내용은 C로 객체지향 프로그래밍을 하시나요? 처음부터 인터페이스 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.