04. C언어의 고급 기법
01. 기억 클래스(Storage Class)
1) 기억 클래스의 개념
- C언어에서 변수로 사용할 기억 장소 위치를 프로그래머가 직접 지정할 수 있음
- 기억 장소의 특성에 맞게 변수를 선언함으로써 기억 장소를 절약할 수 있음
- 개발할 프로그램의 특성에 맞게 기억 장소를 사용함으로써 실행 속도를 높일 수 있으며, 에러를 감소시킬 수 있음
2) 변수 선언에 따른 할당되는 기억 장소
- auto : 동적인 스택(Stack) 영역에 기억 장소가 할당
- static : 정적인 힙(Heap) 영역에 기억 장소가 할당
- extern : 정적인 힙(Heap) 영역에 기억 장소가 할당
- register : CPU 내의 고속 메모리인 레지스터에 기억 장소가 할당
3) 변수 선언에 따른 기억 장소의 생성 시기와 소멸
- auto
- 생성 시기 : 실행 시에 할당
- 소멸 시기 : 블록이나 함수 종료 시 소멸
- static
- 생성 시기 : 번역 시에 할당
- 소멸 시기 : 프로그램 종료 시 소멸
- extern
- 생성 시기 : 번역 시에 할당
- 소멸 시기 : 프로그램 종료 시 소멸
- register
- 생성 시기 : 실행 시에 할당
- 소멸 시기 : 블록이나 함수 종료 시 소멸
4) 변수 선언에 따른 프로그램에 미치는 사용 범위
- auto : 블록이나 함수 내에서만 사용함
- static : 하나의 프로그램 파일(모듈) 내에서만 사용함
- extern : 모든 프로그램 파일에서 사용함
- register : 블록이나 함수 내에서만 사용함
5) 변수 선언에 따른 기억 장소 안의 내용
- auto : 기존에 기억되어 있는 내용이 있으므로 초기화함
- static : 기존에 기억되어 있는 내용이 없으므로 초기화가 필요 없음
- extern : 기존에 기억되어 있는 내용이 없으므로 초기화가 필요 없음
- register : 기존에 기억되어 있는 내용이 있으므로 초기화함
6) 변수 선언에 따른 특징
- auto : auto 예약어는 생략할 수 있음
- static : 함수 내부의 선언과 외부의 선언 위치 차이가 있음
- extern : 프로그램에 속해 있는 모든 파일에 영향을 줌
- register : 개수의 제한이 있고, &를 사용할 수 없음
7) 변수 선언에 따른 사용 용도
- auto : 잠깐 사용하고 버리는 변수로 적당함
- static : 자주 사용하고 참조하는 변수로 적당함
- extern : 프로그램 전체에서 사용하고 참조하는 변수로 적당함
- register : 빠른 속도를 원하거나 시스템을 제어하는 변수로 적당함
02. 함수(Function)
1) 함수의 부품화된 기능
- 함수는 부품화된 기능을 가진 부분 프로그램
- 전체 프로그램을 한 번에 프로그래밍하는 것이 아니라 기능별로 구분하여 프로그래밍함
- 기능별로 구분한 부분 프로그램은 독립적으로 개발한 후, 결합하면서 전체 프로그램이 완성됨
- 함수는 프로시저, 서브루틴, 모듈, 부품 등 다양한 용어를 사용하지만 C언어에서는 함수란 용어를 사용함
- 함수는 하나의 파일에 한 개의 함수 또는 여러 개의 함수를 만들어 사용할 수 있음
- 유용한 함수들을 잘 정리하여 파일에 저장해 두면 새로운 프로그램을 개발할 때 재사용할 수 있음
- 유용한 함수들을 잘 정리해둔 파일을 라이브러리 혹은 헤더 파일이라고 함
- C 언어에서 많은 함수를 지원하므로 프로그래밍할 때 포함해서 사용하면 됨
2) 함수의 매개 변수 전달 기법
- Call By Value : 함수 호출 시에 인수의 값을 전달함
- Call By Address : 함수 호출 시에 인수의 절대 주소를 전달함
03. 구조체(Structure)
1) 구조체의 개념
- int, float, double 유형은 이미 C언어에서 제공되는 변수의 구조로, C언어에서 제공되는 변수 구조가 아닌 자신만의 변수 구조를 만들 때 구조체를 사용함
- 일반적으로 여러 개의 항목(Field)이 존재하는 레코드를 만들 때 사용함
- C언어에서는 레코드를 구조체라고 함
- 구조체 변수에서 항목 지정은 점(.)을 사용함
04. 매크로(Macro)
1) 매크로의 개념
- 매크로는 독립적으로 변역되지 않으며 번역 전에 해당 매크로로 확장 치환됨
- 함수는 독립적으로 번역되며 실행 시에 함수를 수행하지만 매크로는 매크로가 있는 곳에 매크로를 치환한 후 번역됨
- 매크로는 치환되는 형태이기 때문에 함수보다는 실행 속도가 빠르지만, 부작용이 많아 사용상의 주의가 요구됨
05. 부 프로그램의 재귀적 호출
1) 부 프로그램(Subprogram, Subroutine)의 정의
- 하나의 프로그램을 특징이나 기능별로 잘게 나누어 부품화(모듈화)된 단위 프로그램
2) 부 프로그램의 특징
- 자주 사용되거나 중복으로 사용되는 루틴은 부 프로그램으로 작성됨
- 부 프로그램은 여러 번 호출할 수도 있고, 호출 당할 수도 있음
- 호출 시에 제어는 부 프로그램으로 이동되며, 부 프로그램이 종료되면 호출되었던 곳으로 복귀됨
- 호출 시에 데이터를 가져갈 수 있고 복귀할 때고 데이터 값을 가져올 수 있음
- 호출 시에 가져가는 데이터 형식을 매개 변수라고 함
- 부 프로그램을 사용하면 수행 속도가 상대적으로 느림
- 부 프로그램을 사용하면 프로그램의 전체 크기를 상대적으로 줄일 수 있음
- 프로그램이 작아지므로 기억 장소가 적게 필요하게 됨
- 프로그램 실행 시마다 매번 부 프로그램을 호출해야 하기 때문에 실행 속도는 매크로보다 느림
- 부 프로그램은 독립적인 컴파일이 가능함
- 부 프로그램의 복귀 주소를 저장하고 조회하는 용도에 적합한 자료 구조는 스택
- 시스템 설계 시 효율적
- 가독성 및 유지 보수가 편리함
- 프로그래머는 동일한 프로그램을 한 번만 작성해서 필요하면 호출하여 사용할 수 있음
3) 활성 레코드(Activation Record)
- 호출 시에 활성 레코드가 만들어짐
- 부 프로그램 호출 시 생성되는 각종 정보를 담고 있는 레코드
- 정보 항목 : 함수 값, 정적 링크, 지역 변수, 매개 변수, 복귀 주소
4) 재귀적(Recursion) 부 프로그램
- 부 프로그램 자신이 자신의 부 프로그램을 호출하여 처리하는 루틴
- 재귀적 부 프로그램은 스택 메모리 구조를 사용함
- 자신이 호출한 부 프로그램에 의해 자신이 재호출되는 푸틴을 이용하여 진행 상태를 스택에 보관하게 됨
- 스택을 사용하여 처리하기 때문에 안정성과 처리 속도가 빠름
06. 지원 라이브러리 함수
1) 문자열과 숫자 변환 함수
- atoi() : 정수 문자열을 정수(int)로 변환함
- atol() : 정수 문자열을 정수(long)로 변환함
- atof() : 정수 문자열을 실수(float)로 변환함
- itoa() : 정수(int) 문자열을 2진, 8진, 10진, 16진 문자열로 변환함
- ltoa() : 정수(long) 문자열을 2진, 8진, 10진, 16진 문자열로 변환함
- ultoa() : 정수(unsigned) 문자열을 2진, 8진, 10진, 16진 문자열로 변환함
- fcvt() : 실수(float) 값을 문자열로 변환함
- ecvt() : 실수(double) 값을 문자열로 변환함
- gcvt() : 실수 값을 부호를 포함하여 문자열로 변환함
2) 수학 함수
- pow() : xy를 구함, pow(2, 3) = 23
- sqrt() : 거듭제곱근을 구함, sqrt(4) = 2
- ceil() : x보다 작지 않은 가장 작은 정수를 구함
- floor() : x보다 크지 않은 가장 큰 정수를 구함
- fabs() : x의 절대값을 구함
- fmod() : x를 y로 나눈 나머지를 구함
07. 메모리 할당 함수 - malloc()
1) 메모리 할당 함수 malloc()
- 프로그램을 실행하는 중간에 메모리 공간을 일시적으로 할당 받아 사용하는 함수
- 기존에 사용하는 정적 변수 선언은 프로그램 실행 전(컴파일 시)에 메모리를 정적으로 할당 받아 사용하고, 프로그램이 종료될 때 반납함
- malloc() 함수를 사용하는 동적 할당은 프로그램 실행 중에 힙 메모리 공간에 필요한 메모리 크기와 유형을 지정하여 할당 받아 사용하고, 실행 중에 반납(free())할 수 있음
- 반납은 사용하지 않는 메모리는 시스템 성능이 떨어지거나 프로그램 실행 중에 장애가 될 수 있으므로 운영체제에 사용하지 않는 메모리 공간임을 통보해주는 것
'정보처리기사 > 프로그래밍 언어 활용' 카테고리의 다른 글
객체지향 기술 1 (0) | 2023.05.29 |
---|---|
프로그래밍 언어 활용 5 (0) | 2023.05.29 |
프로그래밍 언어 활용 3 (0) | 2023.05.29 |
프로그래밍 언어 활용 2 (0) | 2023.05.29 |
프로그래밍 언어 활용 1 (0) | 2023.05.29 |