본문 바로가기
C 언어/실무

C언어 구조체 실무 예제 (왜 구조체를 쓰는가?)

by Autosar 2026. 4. 15.
반응형

C언어를 공부하다 보면 배열, 포인터, 함수까지는 비교적 익숙하게 느껴진다.
하지만 구조체(Struct)는 처음 접할 때 “이걸 왜 쓰지?”라는 생각이 들 수 있다.

단순한 예제에서는 변수 몇 개만 선언해도 충분해 보이기 때문이다.

uint8 Temp;
uint8 Speed;
uint8 Error;

 

하지만 실무 코드에서는 데이터가 많아지고, 서로 관련된 값들을 함께 관리해야 하는 상황이 계속 발생한다.

예를 들어 차량 제어 소프트웨어에서는 아래와 같은 데이터가 하나의 모듈에 동시에 존재한다.

- 모터 현재 속도
- 모터 목표 속도
- 과전류 에러 상태
- 과온도 에러 상태
- 동작 모드
- 진단 상태

이 데이터를 각각 따로 관리하면 코드가 복잡해지고 유지보수가 어려워진다.
이때 사용하는 것이 구조체다.

구조체는 서로 관련된 여러 데이터를 하나로 묶어서 관리하는 사용자 정의 자료형이다.

이번 글에서는 구조체의 개념부터, 왜 실무에서 필수인지, 그리고 임베디드 / AUTOSAR 스타일 예제까지 자세히 설명한다.

 

구조체란 무엇인가?

 

구조체는 여러 개의 변수를 하나의 그룹으로 묶는 기능이다.

예를 들어 모터 상태 정보를 하나로 묶어보자.

typedef struct
{
    uint16 CurrentSpeed;
    uint16 TargetSpeed;
    uint8 Error;
} MotorStatusType;

 

설명:

- CurrentSpeed : 현재 속도
- TargetSpeed : 목표 속도
- Error : 에러 상태

이제 이 세 변수는 따로따로가 아니라 MotorStatusType이라는 하나의 데이터 형태가 된다.

 

구조체를 왜 사용할까?

 

1. 관련 데이터를 한 번에 관리할 수 있다

구조체를 사용하지 않으면, 변수가 많아질수록 이름도 길어지고 관리가 어렵다.


구조체를 사용하면,

MotorStatusType Motor;

 

이 한 줄로 관련 데이터를 묶어서 관리할 수 있다.

 

2. 코드 가독성이 좋아진다

Motor.CurrentSpeed = 1200U;
Motor.TargetSpeed  = 1500U;
Motor.Error        = 0U;

 

이 코드를 보면 어떤 데이터가 어떤 모듈 소속인지 바로 알 수 있다.

 

3. 함수 전달이 쉬워진다

변수 5개를 각각 전달하는 대신 구조체 하나를 전달할 수 있다.

 

구조체 기본 사용법

 

## 선언

typedef struct
{
    uint8 Temp;
    uint8 Humidity;
} SensorType;

 

## 변수 생성

SensorType RoomSensor;

 

## 값 저장

RoomSensor.Temp     = 25U;
RoomSensor.Humidity = 60U;

 

## 값 사용

if (RoomSensor.Temp > 20U)
{
    /* 처리 */
}

 

실무 예제 1: 모터 상태 관리

 

임베디드 시스템에서는 모터 관련 데이터가 여러 개 존재한다.

typedef struct
{
    uint16 CurrentRpm;
    uint16 TargetRpm;
    uint8 RunState;
    uint8 ErrorState;
} MotorInfoType;

 

사용:

MotorInfoType MotorInfo;

MotorInfo.CurrentRpm = 800U;
MotorInfo.TargetRpm  = 1000U;
MotorInfo.RunState   = 1U;
MotorInfo.ErrorState = 0U;

 

만약 구조체 없이 작성하게 되면, 데이터가 늘어날수록 관리가 어려워진다.

구조체는 모터 관련 정보를 하나의 객체처럼 다룰 수 있게 해준다.

 

실무 예제 2: AUTOSAR 스타일 상태 관리

 

AUTOSAR 프로젝트에서는 모듈 상태를 구조체로 관리하는 경우가 많다.

typedef struct
{
    uint8 InitState;
    uint8 NmState;
    uint8 SleepState;
    uint16 ErrorCode;
} EcuStateType;

 

사용:

EcuStateType EcuState;

EcuState.InitState  = 1U;
EcuState.NmState    = 2U;
EcuState.SleepState = 0U;
EcuState.ErrorCode  = 0U;

 

상태값이 여러 개여도 하나의 변수로 관리 가능하다.

 

이 변수(EcuState) 하나만 보면 ECU 상태를 확인할 수 있다.

 

정리

 

구조체는 단순 문법 기능이 아니다.
실무 코드에서 데이터를 체계적으로 관리하기 위한 핵심 도구다.

변수가 많아질수록 구조체의 가치가 커진다.
특히 임베디드 시스템처럼 상태값, 센서값, 통신 데이터가 많은 환경에서는 구조체 없이 큰 프로젝트를 관리하기 어렵다.

 

구조체는 흩어진 변수들을 의미 있는 단위로 묶어주는 실무 필수 도구다.

반응형