Menu
Coddy logo textTech

객체로서의 Struct

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

객체 지향 언어에서 객체는 데이터(상태)와 해당 데이터에서 작동하는 함수(메서드)를 하나로 묶는 엔터티입니다. C에는 기본 제공 객체가 없지만, struct와 함수를 사용하여 동일한 개념을 구현할 수 있습니다.

struct를 객체의 "데이터" 부분이라고 생각해 보세요. struct는 상태, 즉 객체가 현재 무엇인지를 정의하는 값을 담고 있습니다:

typedef struct {
    int value;
} Counter;

Counter struct는 단 하나의 상태인 its current value를 가진 엔터티를 나타냅니다. 여기에 동작을 부여하기 위해 struct를 매개변수로 받는 함수를 작성합니다:

void counter_increment(Counter *c) {
    c->value++;
}

int counter_get(Counter *c) {
    return c->value;
}

이 함수들은 메서드처럼 작동합니다. 이 함수들은 Counter 데이터를 대상으로 특별히 작업합니다. 구조체를 함수에 전달함으로써, 다른 언어에서 counter.increment()를 호출할 때 자동으로 수행되는 동작을 시뮬레이션합니다.

int main() {
    Counter my_counter = {0};
    counter_increment(&my_counter);
    printf("%d\n", counter_get(&my_counter)); // 출력: 1
    return 0;
}

typename_action(예: counter_increment) 명명 규칙은 코드를 체계적으로 구성하고 함수가 어떤 struct에 속하는지 명확하게 보여 줍니다. 이 패턴은 C에서 객체 지향 프로그래밍의 기초입니다.

challenge icon

챌린지

쉬움

동작을 포함하는 객체로 struct를 다루는 간단한 Counter 모듈을 만들어 보겠습니다. 데이터를 해당 데이터에 대해 작업을 수행하는 함수와 함께 묶는 패턴을 연습할 수 있도록 코드를 세 개의 파일로 구성합니다.

세 개의 파일을 만듭니다.

  • counter.h: 단일 int value member가 있는 Counter struct를 Declare하는 header file입니다. 또한 counter의 "메서드" 역할을 하는 두 함수를 Declare합니다. counter_increment는 Counter를 가리키는 pointer를 takes하며 해당 값이 1 increases되도록 하고, counter_get은 Counter를 가리키는 pointer를 takes하며 현재 값을 returns합니다. COUNTER_H symbol을 사용하여 include guards를 사용합니다.
  • counter.c: 두 함수를 모두 Define하는 source file입니다. header file을 include해야 한다는 점을 기억하세요.
  • main.c: Counter를 Create하고, 이에 대해 작업을 수행하며, result를 표시하는 main file입니다.

두 개의 정수 입력을 받습니다. 하나는 counter의 starting value이고, 다른 하나는 이를 증가시킬 times입니다.

main file에서 starting value로 Counter를 initialize한 다음, counter_increment를 specified number of times만큼 Call합니다. 마지막으로 counter_get을 using하여 final value를 retrieve하고 print합니다.

result를 다음 format으로 Print합니다.

Final value: {result}

예를 들어 starting value가 5이고 3번 increases하는 경우 output은 다음과 같습니다.

Final value: 8

직접 해보기

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

int main() {
    // 입력 읽기
    int starting_value;
    int num_increments;
    scanf("%d", &starting_value);
    scanf("%d", &num_increments);
    
    // TODO: Counter를 생성하고 starting_value로 초기화하세요
    
    // TODO: 지정된 횟수만큼 counter_increment를 호출하세요
    
    // TODO: counter_get을 사용하여 최종 값을 가져와 출력하세요
    // 출력 형식: "Final value: {result}"
    
    return 0;
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

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

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