최근에는 JSP 구조적 이해와 MVC2 패턴에 대해 집중적으로 공부하면서, Servlet과 JSP 컨트롤러·뷰 간의 유기적인 통신 흐름을 파악하고, DAO 구현(Impl)과 Service 계층에서의 역할 분담이 어떻게 진행되는지 꼼꼼히 살펴보고 있습니다.
또한 JavaScript와 jQuery의 문법을 보다 탄탄히 다져서 실무에 적용할 수 있는 커스텀 함수(common)를 구상하고 로직을 체화하기 위해 노력 중입니다.
반가운 소식으로 지난달 첫째 주에 시행된 정보처리기사 필기시험을 꽤 높은 점수로 합격했고, 그 기세를 이어 실기시험도 한 번에 붙겠다는 목표로 열심히 달리고 있습니다.
1. C언어란?
C언어는 시스템 프로그래밍부터 임베디드, 각종 응용 소프트웨어 개발에 이르기까지 폭넓게 사용되는 프로그래밍 언어입니다. 절차지향적 언어이면서 하드웨어와 밀접한 저수준(Level)이 가능하기 때문에, 운영체제나 하드웨어 제어가 필요한 영역에서 많이 쓰입니다.
- 절차 지향적 언어: 프로그램을 순차적으로 처리하는 구조를 기반으로 함
- 시스템 프로그래밍에 최적화: 하드웨어 제어가 용이하고 빠른 속도를 가짐
- C++이나 Java 등의 기초: 다른 언어들을 학습할 때도 도움이 됨
정보처리기사 실기에서도 C언어 문법과 기초 알고리즘 구현 능력을 평가하는 문제가 종종 출제됩니다.
2. C언어 특징
- 이식성(Portability)
- 운영체제나 하드웨어 환경에 비교적 독립적
- 다양한 플랫폼에서 큰 수정 없이 동작 가능
- 빠른 실행 속도
- 컴파일 과정을 거쳐 기계어로 변환되므로 실행 속도가 빠름
- 포인터 사용
- 메모리 주소를 직접 다룰 수 있어 유연성이 높음
- 하지만 잘못 다루면 에러가 발생하기 쉬움
- 풍부한 연산자 및 라이브러리 함수
- 수학 연산, 논리 연산 등 다양한 연산자와 표준 라이브러리가 잘 갖추어져 있음
3. 정보처리기사 실기의 C언어 출제 경향
정보처리기사 실기에서는 단순 문법 암기보다, 문제를 해결하기 위한 로직 구현에 초점을 맞춥니다. 그러나 C언어 기초 문법에 대한 숙지가 제대로 되어 있지 않으면, 코드 작성 시 에러가 발생하거나 문제 해결이 어렵기 때문에, 다음과 같은 주요 개념을 반드시 학습해야 합니다.
- 자료형과 변수 사용법
- 연산자(산술, 관계, 논리, 대입, 비트, 증감, 삼항 등)
- 제어문(if, switch, for, while, do~while)
- 배열, 문자열 처리
- 포인터 활용(문자열, 배열, 함수 포인터 등)
- 함수 정의 및 호출
- 구조체와 공용체
- 파일 입출력(fopen, fprintf, fscanf, fclose 등)
4. 자료형(자료형 분류와 의미)
C언어의 자료형은 크게 기본 자료형(Primary Data Type), 사용자 정의 자료형(User-defined Data Type), 포인터 자료형(Pointer Type) 등이 있습니다.
4.1 기본 자료형
- int: 정수형(보통 4바이트)
- float: 실수형(단정도 부동소수점, 4바이트)
- double: 실수형(배정도 부동소수점, 8바이트)
- char: 문자형(1바이트, 문자 1개 저장)
- void: 반환값이나 포인터 형식에 사용되는 자료형(데이터형 없음)
4.2 사용자 정의 자료형
- typedef: 기존 자료형에 새 이름을 부여
- enum: 열거형 (상수 집합을 정의할 수 있음)
- struct: 구조체
- union: 공용체
4.3 포인터 자료형
- int *p: int형 변수를 가리키는 포인터
- char *p: char형 변수를 가리키는 포인터
- double *p: double형 변수를 가리키는 포인터
포인터는 정보처리기사 실기 문제에서 배점이 높거나 로직 구현에 중요한 역할을 하기 때문에 반드시 숙지해야 합니다.
5. 변수와 상수
5.1 변수
- 변수 선언: 자료형 변수명;
- 변수 초기화: 자료형 변수명 = 초기값;
- 변수는 사용 전 반드시 선언해야 함
int a; // 정수형 변수 a 선언
int b = 10; // 정수형 변수 b 선언 및 초기화
5.2 상수
- 값이 고정되어 바뀌지 않는 데이터
- 상수 선언: #define 상수이름 값, const 자료형 상수이름 = 값;
#define PI 3.14159 // 전처리기 지시자 사용
const int MAX_SIZE = 100; // const 키워드 사용
6. 연산자
C언어에서 주로 사용하는 연산자들은 다음과 같습니다.
- 산술 연산자: +, -, *, /, %
- 관계 연산자: ==, !=, >, <, >=, <=
- 논리 연산자: &&, ||, !
- 비트 연산자: &, |, ^, ~, <<, >>
- 증감 연산자: ++, --
- 대입 연산자: =, +=, -=, *=, /=, %=
- 삼항 연산자: ?:
int x = 10, y = 20;
int result = (x > y) ? x : y; // 삼항 연산자 예시
7. 제어문
7.1 if문
if (조건식) {
// 조건이 참일 때 실행
} else if (조건식2) {
// 조건식2가 참일 때 실행
} else {
// 앞의 조건이 모두 거짓일 때 실행
}
7.2 switch문
switch (변수 or 식) {
case 값1:
// 값1일 때 실행
break;
case 값2:
// 값2일 때 실행
break;
default:
// 위의 값들과 일치하지 않을 경우 실행
break;
}
7.3 반복문
- for문
for (초기식; 조건식; 증감식) { // 반복 실행되는 코드 }
- while문
while (조건식) { // 조건이 참인 동안 반복 실행 }
- do~while문
do { // 일단 한번은 실행 } while (조건식);
8. 배열과 문자열
8.1 배열
- 동일한 자료형을 연속적으로 저장
- 1차원 배열 선언: int arr[크기];
- 2차원 배열 선언: int arr[행][열];
int arr[5] = {1, 2, 3, 4, 5};
for (int i = 0; i < 5; i++) {
printf("%d ", arr[i]);
}
8.2 문자열
- 문자 배열로 표현 (문자열 끝에는 \0이 자동으로 들어감)
- 문자열 처리 함수: strcpy, strcat, strcmp, strlen 등
char str[20] = "Hello";
printf("%s", str); // 출력: Hello
9. 포인터
C언어에서 포인터는 매우 중요하며, 정보처리기사 실기 문제에서도 자주 다뤄집니다.
9.1 포인터 선언과 사용
int *p; // 정수형 포인터 p 선언
int a = 10;
p = &a; // a의 주소를 p에 저장
printf("%d\n", *p); // 포인터를 이용해 a의 값 출력
- & 연산자: 변수의 주소를 구함
- * 연산자: 포인터가 가리키는 주소의 값을 참조
9.2 배열과 포인터
- 배열의 이름은 배열의 시작 주소를 나타냄
- arr[i]는 *(arr + i)와 동일
int arr[3] = {10, 20, 30};
int *p = arr; // &arr[0]과 동일
printf("%d\n", *(p+1)); // 20
printf("%d\n", arr[2]); // 30
9.3 포인터와 함수
- 함수에 배열을 인자로 넘길 때, 포인터를 활용
- 문자열 처리 함수 역시 인자로 char * 형태를 사용
10. 함수
10.1 함수 정의와 선언
반환형 함수이름(매개변수 목록) {
// 함수 본문
return 값; // 반환형이 void가 아니라면 반환값 필요
}
- 프로토타입 선언: 반환형 함수이름(매개변수 자료형, ...);
(헤더나 상단에 미리 선언하여 인식시킴)
10.2 매개변수 전달 방식
- 값에 의한 호출(Call by Value): 복사된 값이 매개변수에 전달됨
- 주소에 의한 호출(Call by Reference): 변수의 주소(포인터)가 전달되어 함수 내에서 원본 값을 변경할 수 있음
// Call by Reference 예시
void swap(int *x, int *y) {
int temp = *x;
*x = *y;
*y = temp;
}
11. 구조체 및 공용체
11.1 구조체(struct)
- 서로 다른 자료형을 하나의 묶음으로 다룰 수 있게 함
struct Student {
char name[20];
int age;
double grade;
};
struct Student s1 = {"홍길동", 20, 4.0};
printf("이름: %s, 나이: %d, 학점: %.1f\n", s1.name, s1.age, s1.grade);
11.2 공용체(union)
- 구조체와 달리 모든 멤버가 동일한 메모리 공간을 공유
- 메모리를 절약할 수 있지만, 동시에 하나의 멤버만 유효
union Data {
int i;
float f;
};
union Data data;
data.i = 100; // data.f에 접근하면 값이 변형되어 있을 수 있음
12. 파일 입출력
12.1 파일 열기
- fopen(파일이름, 모드): 파일을 열고, FILE * 형태의 포인터 반환
- 모드 예시: "r"(읽기), "w"(쓰기), "a"(추가)
FILE *fp;
fp = fopen("data.txt", "r");
if (fp == NULL) {
printf("파일 열기 실패\n");
return 1;
}
12.2 파일 읽기/쓰기
- fprintf, fscanf: 파일에 대해 printf, scanf와 유사한 동작
- fgets, fputs: 텍스트 파일에 문자열 단위로 입출력
// 쓰기
fp = fopen("data.txt", "w");
fprintf(fp, "%d %d\n", 10, 20);
fclose(fp);
// 읽기
fp = fopen("data.txt", "r");
int x, y;
fscanf(fp, "%d %d", &x, &y);
printf("x: %d, y: %d\n", x, y);
fclose(fp);
12.3 파일 닫기
- fclose(fp): 파일 포인터를 닫아주는 함수
Tip
- 기본 문법 점검(자료형, 제어문)
- 문제 풀이 예제 코드 다시 훑어보기
- 출력 형식 유의
'📜 Certs' 카테고리의 다른 글
[정보처리기사 실기] C언어 - (2) (0) | 2025.03.07 |
---|---|
2025년 상반기 자격증 플랜: 정보처리기사부터 AWS, Kubernetes까지 (1) | 2025.01.17 |