랑아
article thumbnail

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
profile

랑아

@RangA

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!