Menu
Coddy logo textTech

요약: Greeter

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

challenge icon

챌린지

쉬움

함수 포인터를 통해 다형성을 보여주는 Greeter 시스템을 구축해 보겠습니다. 이는 동일한 구조체 타입이 어떤 인사 함수와 연결되느냐에 따라 서로 다른 출력을 생성하는 방식입니다.

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

  • greeter.h: 여기에 greeter 인터페이스를 정의합니다. const char*(인사할 이름)를 인자로 받고 반환값이 없는 GreetFunc라는 함수 포인터 타입을 생성하세요. 그런 다음 language(const char*)와 GreetFunc 타입의 greet 함수 포인터를 포함하는 Greeter 구조체를 정의하세요.
  • greeter.c: 각 언어를 나타내는 인사 함수를 구현합니다:
    • greet_englishHello, name!을 출력합니다.
    • greet_spanishHola, name!을 출력합니다.
  • main.c: 모든 요소를 여기서 결합합니다. 영어와 스페인어용으로 각각 하나씩, 총 두 개의 Greeter 인스턴스를 생성하고 각 인스턴스를 해당 인사 함수에 연결하세요. 입력으로 이름을 읽어 들인 다음, 두 greeter의 greet 함수를 호출하여 다형성 동작을 확인합니다.

프로그램은 인사할 name이라는 단일 입력을 받습니다.

language가 English로 설정된 영어 greeter와 language가 Spanish로 설정된 스페인어 greeter를 생성하세요. 각 greeter에 대해 언어 이름을 출력하고 콜론과 공백을 붙인 뒤, 입력받은 이름을 인자로 하여 greet 함수를 호출하세요.

입력이 Maria일 때의 출력 예시:

English: Hello, Maria!
Spanish: Hola, Maria!

입력이 Carlos일 때의 출력 예시:

English: Hello, Carlos!
Spanish: Hola, Carlos!

두 greeter는 모두 동일한 Greeter 타입이지만, greet 멤버에 서로 다른 함수가 할당되어 있기 때문에 서로 다른 인사를 생성합니다. 헤더 파일에 include guard를 사용하는 것을 잊지 마세요.

직접 해보기

#include <stdio.h>
#include <string.h>
#include "greeter.h"

int main() {
    // 이름 입력을 읽습니다
    char name[100];
    scanf("%s", name);
    
    // TODO: 영어 greeter를 만듭니다
    // - language를 "English"로 설정합니다
    // - greet를 greet_english 함수로 설정합니다
    
    
    // TODO: 스페인어 greeter를 만듭니다
    // - language를 "Spanish"로 설정합니다
    // - greet를 greet_spanish 함수로 설정합니다
    
    
    // TODO: 각 greeter에 대해:
    // 1. language를 출력하고 이어서 ": "를 출력합니다
    // 2. name과 함께 greet 함수를 호출합니다
    
    
    return 0;
}

Object Oriented Programming의 모든 레슨