컴퓨팅의 복잡성을 탐구하려면 어떻게 작동하는지뿐만 아니라 이유 및 처음부터 어떻게 구축할 수 있는지를 이해해야 합니다. 이 기사에서는 Java를 참조점으로 사용하여 객체 지향 프로그래밍(OOP)의 인터페이스 개념을 살펴본 다음 기본적인 C 구현을 보여줍니다.
우리의 예는 차량 가격 계산에 중점을 둡니다. 자동차는 속도에 따라 가격이 책정되고, 오토바이는 엔진 배기량(cc)에 따라 가격이 책정됩니다. 핵심 차량 동작을 정의하는 Java 인터페이스로 시작합니다.
<code class="language-java">public interface Vehicle { Integer price(); }</code>
이 인터페이스는 Car
및 Motorcycle
클래스로 구현됩니다.
<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에는 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_price
및 switch
을 구현하여 다양한 차량 유형을 처리합니다.
<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의 다양한 노드 유형은 별도의 구조체로 표시될 수 있으며 모두 함수 집합으로 정의된 공통 "인터페이스"를 따릅니다.
C에는 내장 인터페이스가 없지만 신중한 구조 및 기능 설계로 인터페이스를 시뮬레이션하면 유사한 OOP 원칙을 달성할 수 있는 강력한 메커니즘이 제공됩니다. 이 수동 접근 방식은 유연성과 제어 기능을 제공하며 특히 파서 및 인터프리터와 같은 복잡한 프로젝트에 유용합니다.
위 내용은 C로 객체지향 프로그래밍을 하시나요? 처음부터 인터페이스 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!