Menu
Coddy logo textTech

객체로서의 Struct

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

객체 지향 언어에서 객체는 데이터(상태)와 해당 데이터를 조작하는 함수(메서드)를 하나로 묶는 실체입니다. C에는 내장된 객체가 없지만, structs와 functions를 사용하여 동일한 개념을 구현할 수 있습니다.

struct를 객체의 "데이터" 부분이라고 생각하세요. 이것은 상태, 즉 객체의 현재 상태를 정의하는 값들을 보유합니다:

typedef struct {
    int value;
} Counter;

Counter 구조체는 단일 상태 조각인 현재 값을 가진 엔티티를 나타냅니다. 여기에 동작을 부여하기 위해, 구조체를 매개변수로 받는 함수를 작성합니다:

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와 같은) 명명 규칙은 코드를 정리하는 데 도움을 주며, 함수가 어떤 구조체에 속하는지 명확하게 해줍니다. 이 패턴은 C 언어에서 객체 지향 프로그래밍의 기초가 됩니다.

challenge icon

챌린지

쉬움

구조체를 동작을 가진 객체처럼 다루는 간단한 Counter 모듈을 만들어 보겠습니다. 데이터와 그 데이터를 조작하는 함수를 하나로 묶는 패턴을 연습하기 위해 코드를 세 개의 파일로 나누어 구성할 것입니다.

다음 세 개의 파일을 생성해야 합니다:

  • counter.h: 단일 int value 멤버를 가진 Counter 구조체를 선언하는 헤더 파일입니다. 또한 카운터의 "메서드" 역할을 하는 두 개의 함수를 선언하세요: counter_increment (Counter에 대한 포인터를 받아 값을 1 증가시킴)와 counter_get (Counter에 대한 포인터를 받아 현재 값을 반환함). COUNTER_H 심볼을 사용하여 include guard를 적용하세요.
  • counter.c: 두 함수를 구현하는 소스 파일입니다. 헤더 파일을 포함하는 것을 잊지 마세요.
  • main.c: Counter를 생성하고, 연산을 수행하며, 결과를 표시하는 메인 파일입니다.

두 개의 정수 입력을 받게 됩니다: 카운터의 시작 값(starting value)과 이를 증가시킬 횟수(number of times)입니다.

메인 파일에서 시작 값으로 Counter를 초기화한 다음, 지정된 횟수만큼 counter_increment를 호출하세요. 마지막으로 counter_get을 사용하여 최종 값을 가져와 출력하세요.

결과를 다음 형식으로 출력하세요:

Final value: {result}

예를 들어, 시작 값이 5이고 3번 증가시킨 경우, 출력은 다음과 같습니다:

Final value: 8

치트 시트

C 언어에서는 구조체(데이터)와 해당 구조체에서 작동하는 함수(동작)를 결합하여 객체 지향 프로그래밍을 시뮬레이션할 수 있습니다.

상태를 유지하기 위한 구조체를 정의합니다:

typedef struct {
    int value;
} Counter;

구조체를 매개변수로 받아 "메서드" 역할을 하는 함수를 생성합니다:

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

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

구조체와 함수를 함께 사용합니다:

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

typename_action (예: counter_increment)이라는 명명 규칙은 코드를 정리하고 함수가 어떤 구조체에서 작동하는지 명확하게 하는 데 도움이 됩니다.

직접 해보기

#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실력 점검

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

Object Oriented Programming의 모든 레슨