자격증 정복/임베디드기사(기능사)

임베디드기능사 필기 07 — 프로그래밍 언어 (C언어·객체지향 프로그래밍)

올드 IT직장인 2026. 9. 17. 05:00

임베디드기능사 필기 07 — 프로그래밍 언어 (C언어·객체지향 프로그래밍)

출제기준 대단원 6: 프로그래밍 언어 활용
2026년 개편으로 새로 추가된 파트! 기존 전자계산기기능사에 없던 내용이에요.


C언어 기본 문법

데이터 타입 ⭐

char    — 문자, 1바이트
int     — 정수, 4바이트
float   — 단정도 실수, 4바이트
double  — 배정도 실수, 8바이트
void    — 반환값 없음

기억 클래스 ⭐⭐

auto     — 지역 변수 기본값, 쓰레기값으로 초기화
extern   — 다른 파일의 전역 변수 참조
static   — 함수 종료 후에도 값 유지, 0으로 자동 초기화
register — CPU 레지스터에 저장 요청

⚠️ "internal"은 기억 클래스 아님!

printf 형식 지정자 ⭐

%d — 10진 정수
%u — 부호 없는 10진 정수
%f — 부동소수점
%c — 문자
%s — 문자열
%x — 16진수
%p — 포인터 주소 ← 자주 출제!

포인터 ⭐⭐

int a = 10;
int *p = &a;   // p = a의 주소

*p    // 역참조: a의 값 (10)
&a    // a의 주소

// 배열과 포인터
int arr[5] = {10,20,30,40,50};
int *p = arr;

*(p+2) == p[2] == arr[2]  // 모두 30

 

포인터 연산 ⭐

p++     — 다음 원소로 이동 (sizeof(int)만큼)
*(p+3)  — p[3]과 동일 (역참조)
*p + 3  — p[0]의 값에 3을 더함 (전혀 다름!)

동적 메모리 할당 ⭐⭐

malloc(size)    — 초기화 없이 메모리 할당 (쓰레기값)
calloc(n, size) — 0으로 초기화된 메모리 할당 ← 자주 출제!
realloc(p, size)— 크기 재조정
free(p)         — 메모리 해제

⚠️ malloc vs calloc 차이: 초기화 여부!
⚠️ double-free → 오류!

구조체 ⭐

struct Point {
    int x;
    int y;
};

struct Point pt = {3, 4};
struct Point *p = &pt;

pt.x     // 변수로 접근: . 연산자
p->x     // 포인터로 접근: -> 연산자
(*p).x   // 위와 동일

엔디안 (Endianness) ⭐⭐

빅 엔디안 (Big-Endian)
  MSB가 낮은 주소에 저장
  int 0x01020304 → 첫 바이트 = 0x01

리틀 엔디안 (Little-Endian)
  LSB가 낮은 주소에 저장
  short 0x1234 → 첫 바이트 = 0x34

네트워크 = 빅 엔디안 (Network Byte Order)
ARM = 리틀 엔디안 (임베디드에서 중요!)

비트 연산 ⭐⭐ (임베디드 필수!)

& (AND)   — 비트 클리어(CLEAR)에 활용
| (OR)    — 비트 셋(SET)에 활용
^ (XOR)   — 비트 토글(TOGGLE)에 활용
~ (NOT)   — 비트 반전
<< (좌이동)— 2배 증가
>> (우이동)— 2배 감소

특정 비트 SET:    x |= (1 << n)
특정 비트 CLEAR:  x &= ~(1 << n)
특정 비트 TOGGLE: x ^= (1 << n)

예: 24 & 22
  11000 & 10110 = 10000 = 16

예: 24 ^ 22
  11000 ^ 10110 = 01110 = 14

객체지향 프로그래밍 (OOP) ⭐⭐⭐

4대 원리

캡슐화 (Encapsulation):

데이터와 메서드를 하나로 묶고 내부 구현 숨김
결합도↓ + 응집도↑

⚠️ "캡슐화 = 결합도↑" → 오답! (낮아짐)

 

상속 (Inheritance):

부모 클래스의 속성·메서드를 자식이 물려받음
코드 재사용성 향상

 

다형성 (Polymorphism):

하나의 메시지에 객체에 따라 다르게 응답
오버라이딩 = 재정의 / 오버로딩 = 매개변수 다름

 

추상화 (Abstraction):

추상화 3종류: 자료 / 기능 / 제어
⚠️ "상속 추상화"는 없음!

 

C++ 특징 ⭐

생성자 — 객체 생성 시 자동 호출, 오버로딩 가능
소멸자 — 객체 소멸 시 자동 호출, 오버로딩 불가!
가상함수 — virtual, 다형성 구현
순수가상함수 — virtual f()=0; 추상 클래스

기출 문제

Q. 기억 클래스에 속하지 않는 것은?

A. internal (auto/static/register/extern이 4가지)

 

Q. 캡슐화의 효과는?

A. 결합도↓ + 응집도↑ ("결합도↑"은 오답!)

 

Q. 빅 엔디안에서 int 0x01020304를 char 포인터로 첫 바이트 출력?

A. 0x01 (MSB가 낮은 주소)


💡 임베디드에서 왜 중요한가?

MCU(마이크로컨트롤러) 펌웨어는 거의 C언어로 작성해요. 특히:

  • 비트 연산으로 GPIO 제어 (LED, 버튼)
  • 포인터로 메모리 직접 제어
  • 엔디안 변환 (ARM↔네트워크)
  • 동적 메모리는 임베디드에서 주의 (calloc vs malloc)

핵심 정리

✅ 기억클래스: auto/static/register/extern ("internal"없음!)
✅ %p = 포인터 주소 출력
✅ calloc = 0초기화 / malloc = 쓰레기값
✅ *(p+3)=p[3] / *p+3=값에3더함 (완전히 다름!)
✅ Big-endian=첫바이트 MSB / Little=LSB
✅ 캡슐화 = 결합도↓ ("↑"오답!)
✅ 추상화 = 자료/기능/제어 ("상속추상화"없음!)
✅ 생성자=오버로딩가능 / 소멸자=불가
✅ SET: |= / CLEAR: &=~ / TOGGLE: ^=

 

다음 편에서는 시스템소프트웨어·펌웨어·개발도구로 이어갑니다!

반응형