Menu
Coddy logo textTech

다형성 활용

Coddy C 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 61개 중 47번째.

challenge icon

챌린지

쉬움

기본 Shape* 포인터를 통해 Circle이든 Rectangle이든 any shape를 처리할 수 있는 function을 작성하여 다형성이 실제로 작동한다는 것을 증명해 봅시다.

기존 Circle 및 Rectangle 구현을 기반으로, 모든 shape type을 동일한 방식으로 처리하는 단일 function이라는 강력한 추상화를 추가합니다.

프로젝트에는 다음 파일이 포함됩니다:

  • shape.h: DrawFuncAreaFunc type을 포함하는 기본 Shape 인터페이스입니다.
  • circle.hcircle.c: 이전 레슨에서 작성한 Circle 구현입니다.
  • rectangle.hrectangle.c: 이전 레슨에서 작성한 Rectangle 구현입니다.
  • shape.c: Shape* pointer를 받는 process_shape라는 새로운 function을 구현합니다. 이 function은 shape의 draw function을 호출한 다음, 해당 area function을 호출하고 결과를 소수점 이하 2자리 형식인 Area: X.XX로 출력해야 합니다.
  • main.c: 다형성이 실제로 작동하는 모습을 보여 줍니다. shape type 표시자(c는 원, r은 직사각형)를 필요한 치수와 함께 읽습니다. 적절한 shape를 생성한 다음, 내장된 Shape member에 대한 pointer를 process_shape에 전달합니다. 동일한 function이 두 type을 모두 처리합니다!

프로그램에는 다음 중 하나가 입력됩니다:

  • radius 값이 뒤따르는 c, 또는
  • width 및 height 값이 뒤따르는 r

입력이 c5.0일 때의 출력 예시:

Drawing Circle with radius: 5.00
Area: 78.54

입력이 r, 4.0, 3.0일 때의 출력 예시:

Drawing Rectangle with width: 4.00 and height: 3.00
Area: 12.00

여기서 중요한 점은 process_shape가 Circle과 Rectangle 중 어느 것과 작업하는지 전혀 알 필요가 없다는 것입니다. Shape 인터페이스에 대해서만 알고 있습니다. 구체적인 shape의 내장된 Shape member를 Shape*로 캐스팅하면 모든 shape type을 이 단일 function에 전달할 수 있습니다. 이것이 다형성입니다. 하나의 function이 실제 객체 type에 따라 여러 동작을 수행하는 것입니다.

process_shapemain.c에서 호출할 수 있도록 shape.h에 선언하는 것을 잊지 마세요.

직접 해보기

#include <stdio.h>
#include "shape.h"
#include "circle.h"
#include "rectangle.h"

int main() {
    // TODO: 도형 유형을 위한 문자를 읽기 ('c'는 원, 'r'은 사각형)
    // TODO: 'c'인 경우, 반지름을 읽고 Circle을 생성한 다음 그 base로 process_shape를 호출
    // TODO: 'r'인 경우, 너비와 높이를 읽고 Rectangle을 생성한 다음 그 base로 process_shape를 호출
    return 0;
}

객체 지향 프로그래밍의 모든 레슨

직접 연습해 보세요: 온라인 C 컴파일러