Menu
Coddy logo textTech

요약: 도형 계층 구조

Coddy C 여정의 Object Oriented Programming 섹션에 포함된 레슨 — 61개 중 32번째.

challenge icon

챌린지

쉬움

컴포지션(composition)을 통한 상속의 강력함을 보여주는 완전한 도형 계층 구조를 만들어 보겠습니다. 모든 구체적인 도형이 상속받을 수 있는 기본 Shape 타입을 만들고, 이를 확장하는 Rect를 구축할 것입니다.

코드는 세 개의 파일로 구성됩니다:

  • shape.h: 인클루드 가드(include guards)를 사용하여 구조체 계층을 정의합니다. 단일 color 필드(정수형)를 가진 Shape 구조체를 만듭니다. 그런 다음 Shape를 첫 번째 멤버로 포함하고 widthheight 필드(둘 다 정수형)를 추가하는 Rect 구조체를 정의합니다. 두 개의 함수를 선언합니다: Shape*와 새로운 색상 값을 받는 set_color, 그리고 Rect*를 받는 print_rect입니다.
  • shape.c: 두 함수를 구현합니다. set_color 함수는 기본 타입과 함께 작동하며, 모든 도형의 색상을 수정합니다. print_rect 함수는 상속된 색상을 포함하여 사각형의 모든 정보를 표시합니다.
  • main.c: Rect를 생성하고 모든 필드를 초기화합니다. 그런 다음 사각형을 Shape*로 캐스팅하여 set_color를 호출함으로써 업캐스팅(upcasting)을 시연합니다. 마지막으로 사각형을 출력하여 기본 타입 포인터를 통해 색상이 변경되었는지 확인합니다.

네 개의 입력을 받게 됩니다: 사각형의 너비(width), 높이(height), 초기 색상(initial color), 그리고 제네릭 함수를 통해 설정할 새로운 색상(new color)입니다.

메인 파일에서 초기 값으로 사각형을 생성한 다음, set_color를 사용하여 색상을 새로운 값으로 변경하고(이때 Rect*Shape*로 캐스팅해야 함을 기억하세요), 마지막으로 print_rect를 호출하여 결과를 표시합니다.

출력은 다음과 같아야 합니다:

Width: 10
Height: 5
Color: 7

여기서 10은 너비, 5는 높이, 7은 업데이트된 색상(초기 색상이 아님)입니다. 여기서 핵심적인 통찰은 set_color가 사각형에 대해 전혀 알지 못하며 오직 Shape와만 작동한다는 점입니다. 그럼에도 불구하고 첫 번째 멤버 규칙과 업캐스팅을 통해, 사각형의 색상이 이 제네릭 함수를 통해 수정됩니다.

직접 해보기

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

int main() {
    int width, height, initial_color, new_color;
    scanf("%d", &width);
    scanf("%d", &height);
    scanf("%d", &initial_color);
    scanf("%d", &new_color);
    
    // TODO: Rect를 생성하고 모든 필드를 초기화하세요
    // (width, height, 그리고 포함된 Shape의 color를 initial_color로 설정)
    
    // TODO: 사각형을 Shape*로 캐스팅하여 set_color를 호출하고
    // 색상을 new_color로 변경하세요
    
    // TODO: print_rect를 호출하여 결과를 출력하세요
    
    return 0;
}

Object Oriented Programming의 모든 레슨