자격증 정복/컴퓨터시스템기사

컴퓨터시스템기사 필기 09 — 프로그래밍 언어 활용 (C언어·객체지향·BNF)

올드 IT직장인 2026. 8. 14. 18:00

컴퓨터시스템기사 필기 09 — 프로그래밍 언어 활용 (C언어·객체지향·BNF)

3과목 [3-2] 프로그래밍 언어 활용 파트입니다.
C언어 포인터, 객체지향 캡슐화, 기억클래스는 매 회차 출제돼요.


C언어 기초

기억 클래스 (Storage Class) ⭐⭐

auto     — 자동 변수 (블록 내 기본값, 지역 변수)
static   — 정적 변수 (프로그램 종료까지 유지, 초기화는 한 번)
register — 레지스터 변수 (CPU 레지스터에 저장 시도, 빠름)
extern   — 외부 변수 (다른 파일에서 선언된 전역 변수 참조)

⚠️ "internal"은 기억 클래스에 속하지 않음!

 

포인터 연산 ⭐⭐

int *p;
int arr[5] = {10, 20, 30, 40, 50};
p = arr;

*(p+3)  // p[3]과 동일 → 40 (역참조)
*p + 3  // p[0] 값에 3을 더함 → 10+3=13

p++     // 포인터를 다음 원소로 이동 (sizeof(int)만큼)

 

구조체 포인터 ⭐

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

p->x    // 구조체 포인터로 멤버 접근
(*p).x  // 위와 동일 (p->x == (*p).x)

 

malloc/free ⭐

int *p = (int *)malloc(sizeof(int) * 10);  // 동적 메모리 할당
free(p);   // 메모리 해제

⚠️ 이중 해제(double-free) → 오류 발생!
⚠️ 메모리 누수: malloc 후 free 안 하면 메모리 누수

 

기출 문제

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

A. internal — auto, static, register, extern이 4가지 기억클래스

 

Q. 다음 코드에서 *(p+3)의 값은? (p는 배열 첫 번째 원소 가리킴)

A. 배열의 인덱스 3 위치의 값 (p+3)은 p[3]과 동일


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

핵심 개념

캡슐화 (Encapsulation):

데이터(속성)와 메서드(행동)를 하나의 단위로 묶음
결합도 낮아짐 + 응집도 높아짐

⚠️ "캡슐화하면 결합도가 높아진다" → 오답! (낮아짐)

 

상속 (Inheritance):

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

 

다형성 (Polymorphism):

같은 이름의 메서드가 다른 동작을 하는 것

오버라이딩(Overriding): 부모 메서드를 자식이 재정의
오버로딩(Overloading): 같은 이름, 다른 매개변수

 

추상화 (Abstraction):

불필요한 세부 사항을 숨기고 핵심만 표현
인터페이스(Interface) 사용

 

기출 문제

Q. 캡슐화의 효과로 올바른 것은?

A. 결합도 낮아짐 + 응집도 높아짐 ("결합도 높아짐"은 오답!)

 

Q. 부모 클래스의 메서드를 자식 클래스에서 재정의하는 것은?

A. 오버라이딩(Overriding)


BNF (Backus-Naur Form) ⭐

프로그래밍 언어의 문법을 형식적으로 표현하는 메타언어예요.

<symbol> ::= expression

<digit>  ::= 0|1|2|3|4|5|6|7|8|9
<number> ::= <digit> | <number><digit>

기호:
  ::= 정의된다 (is defined as)
  |   또는 (OR)
  <>  비단말 기호
  ""  단말 기호

정렬 알고리즘 시뮬레이션

버블 정렬

매 패스마다 인접 원소를 비교·교환
패스 수: n-1번

[5, 3, 1, 4, 2]
1패스: [3,1,4,2,5] — 5가 맨 뒤로
2패스: [1,3,2,4,5] — 4가 자리 잡기
...

삽입 정렬

각 원소를 이미 정렬된 부분에 삽입

거의 정렬된 경우: O(n) — 가장 빠름!
최악(역순): O(n²)

프로그래밍 언어 특성

컴파일 언어: C, C++, Java
  → 전체 번역 후 실행, 속도 빠름

인터프리터 언어: Python, JavaScript
  → 한 줄씩 번역·실행, 수정 용이

절차지향: C (함수 중심)
객체지향: C++, Java, Python (클래스 중심)

💡 실무에서는?

보안 솔루션이나 임베디드 에이전트 개발에서 C언어 포인터와 메모리 관리가 핵심이에요. 이중 해제(double-free) 취약점은 실제 보안 취약점(CVE)으로 자주 등장하는 항목이에요. 캡슐화·상속·다형성은 마이크로서비스 아키텍처 설계 시 모듈 분리 기준으로 그대로 적용됩니다.


핵심 정리

✅ 기억클래스: auto/static/register/extern ("internal"없음!)
✅ *(p+3) = p[3] (역참조) / *p+3 = p[0] 값에 3 더함
✅ p->x == (*p).x
✅ 캡슐화 = 결합도↓ + 응집도↑ ("결합도↑"은 오답!)
✅ 오버라이딩=재정의 / 오버로딩=매개변수다름
✅ double-free = 오류!

 

다음 편에서는 네트워크 프로그래밍 구현 — 소켓·TCP·UDP으로 이어갑니다!

 

궁금한 점은 댓글로 남겨주세요!

 

2026.08.14 - [자격증 정복/컴퓨터시스템기사] - 컴퓨터시스템기사 필기 08 — 자료구조 활용 (스택·큐·트리·정렬·해싱)

 

컴퓨터시스템기사 필기 08 — 자료구조 활용 (스택·큐·트리·정렬·해싱)

컴퓨터시스템기사 필기 08 — 자료구조 활용 (스택·큐·트리·정렬·해싱)3과목 [3-1] 자료구조 활용 파트입니다.트리 순회, 정렬 시간복잡도, 해시 함수 종류는 매 회차 출제돼요.선형 자료구조스

tech.seanney.pe.kr

2026.08.12 - [자격증 정복/컴퓨터시스템기사] - 컴퓨터시스템기사 필기 07 — 컴퓨터 구조 응용 (병렬처리·Flynn분류·클라우드컴퓨팅)

 

컴퓨터시스템기사 필기 07 — 컴퓨터 구조 응용 (병렬처리·Flynn분류·클라우드컴퓨팅)

컴퓨터시스템기사 필기 07 — 컴퓨터 구조 응용 (병렬처리·Flynn분류·클라우드컴퓨팅)2과목 [2-3] 컴퓨터 구조 응용 파트입니다.Flynn 분류 4가지와 클라우드 서비스 모델(IaaS/PaaS/SaaS)은 매 회차 출

tech.seanney.pe.kr

 

반응형