정보처리기사/[주간컴공] 필기 (완)

(주간컴공) 제4과목 프로그래밍 언어 활용 / 절차지향 프로그래밍

web_seul 2022. 4. 13. 09:45
반응형

S1. C언어 - 데이터 가공 및 입출력

1. C언어의 특징과 작성 규칙

1) C언어의 특징

  - 고급 언어와 저급 언어의 특징을 고루 갖춤(중급언어)

  - 구조적(절차적) 프로그래밍

  - 이식성, 효율성, 다양한 기능

  - 하드웨어 제어가능한 시스템 프로그래밍 언어

2) 작성규칙

  - 프로그램의 시작은 main() 함수

  - 대소문자 구분

  - 블록({})구조, 세미콜론(;) 사용

  - 전처리기와 주석 사용

 

2. C언어의 상수

1) 정수형 상수

  - 10진수 : 일반적인 방식으로 표기 ex. 10, 34, -56, ..

  - 8진수 : 숫자앞에 0을 붙여 표기 ex. 023, 058, 07..

  - 16진수 : 숫자앞에 0x를 붙여서 표기 ex. 0xD2, 0x137, 0xFFF, ..

2) 실수형 상수

  - 10진수 : 10.0은 실수, 10은 정수 ex.3.14159, -0.2154, 0.15..

  - 지수표현 : 문자 e를 포함하여 표기 ex.12e3=12*10^3, 12e-3=12*10^-3=0.012000

3) 문자형 상수 : 작은 따옴표를 붙여서 표기 ex. 'a', 'x', 'C', ..

 

3. C언어의 변수 선언

1) 변수명 선언 규칙

  - 영문자와 언더바(_)로 시작

  - 이후 영문자, 숫자, 언더바(_)로만 구성, 공백x, 특수문자x

  - 사용전 초기화 진행

2) 변수 선언형 자료형

  - 데이터 저장공간 & 형태 결정

    [자료형][변수명]; - 변수 선언, [변수명]=[데이터]; - 데이터 할당

 

4. 서식 문자열

1) 이스케이프 시퀀스 : 문자 입출력 이외에 별도의 기능을 가진 확장 문자열

2) 서식 지정자 : 기억장치 내부에 저장되어 있는 데이터를 형식에 맞게 변환, %와 문자사이에 추가 옵션 지정

 

5. 표준 입출력 함수

1) 표준 입출력 : 키보드, 모니터로 데이터 입출력

2) 입력함수

  - 한 문자 입력 : getchar() : 키보드로 문자 하나를 입력

  - 문자열 입력 : gets(문자배열) : 키보드로 문자열을 입력

  - 서식 문자열 입력 : scanf(서식 문자열[, &변수명, &변수명, ..]) : 지정한 서식대로 키보드로부터 데이터 입력

3) 출력함수

  - 한 문자 출력 : putchar() : 모니터로 문자 하나를 출력

  - 문자열 출력 : puts(문자 배열) : 모니터로 문자열을 출력

  - 서식 문자열 출력 : printf(서식 문자열[, 변수명, 변수명, ...]) : 지정한 서식대로 모니터로 데이터 출력

 

6. 연산자

1) 연산자 우선순위(순서제어)

  - 단항 연산자 : 하나의 항으로 연산

  - 이항 연산자 : 두 개의 항으로 연산

  - 연산자 우선순위 : 우측 방향으로 진행, 괄호 안의 연산이 가장 먼저 진행, 단항 연산이 이항 연산보다 우선 진행, 곱셈과 나눗셈이 덧셈 뺄셈보다 우선 진행

 

 

S2. C언어 - 선택 및 반복 제어

1. 제어문

1) 분기분

   - if : 조건식에 따라 선택적으로 명령 실행, 블록구조로 묶여 있지 않으면 최초 하나의 명령만 실행

  - else : if문의 가장 마지막에 사용, 조건식이 '거짓'인 경우에 명령 실행, else만 단독으로 실행 불가능, 단순 할당 if문은 3항 연산자로 변환 가능

  - else if : 결과 분기가 셋이상일 때 사용, 분기마다 새로운 조건식 수립

 

  - switch-case : 특정 데이터를 숫자, 문자 값으로 비교하여 명령 실행, 일치하는 영역부터 아래의 모든 코드를 실행

  - break : break 문 아래의 코드를 진행하지 않고 블록구조 종료, 자신이 속해있는 블록구조에만 해당

  - default : 일치하는 값이 없을 경우 실행, 단독으로 사용 불가능

 

2) 반복문

  - for : 지정한 횟수만큼 코드를 반복, 시작값, 종료분기, 증감식 지정, break문 사용가능

  - while : 지정한 조건을 만족할때까지 코드를 반복, 조건을 먼저 판단한 다음 코드 반복, 단 한번도 실행이 안될 수 있음( -> do-while), break문 사용가능

  - continue : continue 아래의 코드를 무시하고 다음 단계 반복진행, break와 함께 모든 반복문에서 사용 가능

  - do-while : 지정한 조건을 만족할 때까지 코드를 반복, 코드를 먼저 실행한 다음 조건 판단, 조건이 맞지 않아도 최소 한번은 실행, break문 사용 가능

 

S3. C언어 - 고급

1. 배열

1) 개념 : 하나의 식별자로 같은 타입의 여러 데이터 제어, 연속적인 공간에 생성된 데이터를 첨자로 탐색

2) 배열의 선언 : 변수명 작성규칙과 동일한 규칙을 적용, <타입><식별자>[<데이터 개수>];

3) 배열의 초기화  : <타입><식별자>[<데이터 개수>] = {<값>,<값>,...}; , 일부분만 초기화되는 경우 나머지는 0으로 초기화, 초기화를 별도로 하는 경우, 하나씩 초기화 해야함

4) 주소상수 : 배열이름은 주소상수(데이터 할당 불가능), 배열의 첫 데이터 주소값, 주소값에 정수를 더하면 포인터 연산 진행됨

5) 포인터 연산  배열 데이터는 동일한 크기(ex. 4byte)로 나열되어 있음, 주소 지정 단위는 1byte이며 각 데이터의 첫번째 byte주소를 대표 주소값으로 지정, 주소값+N : N번째 데이터 주소값

6) 첨자(Index) : 배열 요소 중 원하는 위치에 접근하기 위해 사용, 첫 위치는 1이 아닌 0으로 시작, <배열이름>[<첨자>]

7) 2차원 배열 : 배열의 요소로 다른 배열이 구성되어 있는 구조, 2쌍의 대괄호와 첨자로 선언, 제어, 중첩 중괄호로 데이터 초기화, 중괄호가 하나인 경우엔 순서대로 초기화 진행, 편의상 첫번째 인덱스를 행, 두번째 인덱스를 열이라고 표현

8) for문 활용 : for문을 이용하여 배열 할당, 출력 반복, 인덱스 위치에 반복용 변수 활용, 시작값과 종료갑 설정에 주의(0부터 시작)

 

2. 포인터 연산자

1) 개념 

  - 데이터 주소값으로 직접접근이 가능한 연산자

  - 데이터 원본 가공가능, 포인터 연산가능

  - 포인터 변수는 값이 아닌 주소를 저장

  - <참조 데이터 타입>*<식별자> : 포인터 변수 선언

  - <포인터 변수> = &<데이터 변수> : 데이터 주소값 할당

  - *<포인터 변수>=<값> : 포인터 변수가 가리키는 데이터 공간에 값을 할당

2) 배열과 포인터

  - 배열이름은 주소상수기 때문에 주소값 재 할당이 불가능

  - 포인터 변수에 배열이름을 할당하여 포인터 연산 가능

  - 배열주소를 포인터 변수에 할당하여 배열 제어 가능

 

3. 함수

1) 개념

  - 기능별로 구분하여 반복적으로 재사용할 수 있는 작은 프로그램 코드

  - 정의된 함수를 호출하여 반복적으로 사용

  - main 함수 블록 바깥에서 정의, 블록안에서 호출

  - main 함수 내에서 함수 호출 -> main 함수 진행 일시정지 -> 호출된 함수 진행 -> main 함수 진행

  - 함수 호출시 필요한 인수 전달 가능(선택적)

  - 기본 라이브러리(미리 만들어둔 함수) 제공

  - #include<라이브러리 파일>

2) return

  - 리턴값이 있는 함수의 정의와 호출 : 함수의 결과를 호출 위치로 돌려받는 방식, 돌려받은 결과를 바로 사용하거나 변수 할당가능, 결과값에 대한 타입을 사전에 정의, return <결과값>;

 - 리턴값이 없는 함수의 정의와 호출 : 함수의 결과를 돌려주지 않고 종료되는 방식, 결과값이 없으므로 타입대신 void 선언

3) 참조에 의한 매개변수 전달 (Call By Reference)

  - 값에 의한 매개변수 전달 (Call By Value) : 함수에 인수를 전달하면 원본값이 복사되어 진행, 함수 내에서 가공된 값은 원본에 반영되지 않는다.

  - Call By Reference : 인수로 데이터의 주소값(&) 전달, 포인터(*) 변수를 매개변수로 선언, 호출된 함수에서 데이터 원본 가공가능

 

4. 구조체

1) 개념 : 이미 제공되는 자료형을 이용하여 새로운 자료형 구성, 배열과 달리 데이터 형식 통일 불필요, 구조를 먼저 저으이하고 변수를 선언하여 사용

2) 구조체 정의 : main함수 블록 바깥에서 블록 구조로 정의, 구조체 내부 변수는 데이터 초기화 안함(레이아웃), <struct><타입 식별자>{<변수 선언}>;

3) 구조체 변수 선언 : 정의된 구조체 타입의 변수 선언, <struc><타입 식별자>,<변수 식별자>={<초기값>,<초가깂>, ..}의 형태로 선언 및 초기화, <변수 식별자>.<내부 변수명>으로 접근

 

S4. 코드의 품질 향상

1. 코드 최적화 기법

1) 개념 : 코드의 구조를 개선하여 성능을 개선, 나쁜 코드를 없애고 클린 코드 작성, 소스 품질 분석 도구를 활용하여 지속적인 개선

2) 나쁜 코드 : 로직을 이해하기 어려운 스파게티 코드, 식별자의 역할 및 기능을 한번에 이해하기 어려움, 중복되거나 유지보수 비용이 높은 코드

3) 클린 코드 : 중복을 최소화, 가독성 향상, 유지보수 비용 감소

 

2. 클린코드

1) 클린코드 작성 원칙

  - 가독성 : 이해하기 쉬운 식별자, 명령어, 구조

  - 단순성 : 하나의 기능만 수행하도록 기능을 분리

  - 의존성 : 결합도 최소화

  - 고유성(중복성 제거)

  - 추상화 : 각 기능들의 공통된 부분을 재사용 모듈로 구성

2) 표준화된 코딩 형식

  - 하나의 라인, 하나의 명령

  - 코드의 정의 후 사용

  - 가독성 좋은 식별자와 코드 사용

  - 적절한 주석문 사용

 

3. 코드의 품질 향상

1) 코드의 품질 향상 기법

  - 테스트(Test) : 가장 일반적인 코드 검증 방법

  - 코드 인스펙션(Code Inspection) : 코드에 존재하는 결함을 확인

  - 정적 분석(Static Analysis) : 프로그램을 실행하지 않고 코드 구조 분석

   - 동적 분석(Dynamic Analysis) : 프로그램을 실행하여 결과를 분석

    - 증명(Proof) : 소프트웨어 품질이 아주 중요한 경우에 활용되는 가장 이상적인 방법

2) 리팩토링 : 코드의 기능이 아닌 구조를 개선(안정성 향상), 소프트웨어 디자인 개선(가독성 향상)

3) 정적 분석 도구 

  - pmd : Java 및 다른 언어의 버그와 데드 코드 분석

  - cppcheck : C/C++에 대한 결함 및 오류 분석

  - SonarQube : 소스코드의 품질을 체크하는 통함 플랫폼 도구

  - checkstyle : Java 코드의 표준 준수 여부를 분석

4) 동적 분석 도구

  - valanche : 프로그램의 결함 및 취약점을 분석

  - valgrind : 메모리 누수, 쓰레드 결함 등을 분석

 

반응형