본문 바로가기
정보처리기사

정처기 #18 프로그래밍 언어 활용

by 싼쵸 2022. 2. 11.
반응형

프로그래밍 언어별 특성

 

1 ) 스크립트 언어

  • 원시 코드를 컴파일하지 않고도 실행할 수 있는 프로그래밍 언어
  • 스크립트 언어는 별도의 컴파일 없이 내장된 번역기에 의해 번역되므로 바로 실행
  • 스크립트 언어 : Javascript, PHP, Basic, Python

2 ) 컴파일 언어

  • 원시 코드를 컴파일러를 통해 기계어 코드로 변경해야 사용자가 실행할 수 있음
  • 컴파일용 언어: C언어, COBOL, PASCAL, Java

3 ) 객체 기반 언어

  • 클래스 선언, 상속, 객체 생성 등을 사용할 수 있는 언어, C++, Java 등

4 ) 객체 지향 언어

  • 클래스 선언, 상속 등을 할 수 없으며, 생성된  객체 사용하거나 객체 기술의 일부분만 사용할 수 있는 언어

5 ) 프로그램 수행 순서

  • 구현 단계 작업 절차 : 코딩 계획 -> 코딩 -> 컴파일 -> 코드 테스트
  • 프로그램 수행 순서(컴파일러 순서) : 원시 프로그램 -> 컴파일러 -> 목적 프로그램 -> 링커 -> 로더 -> 실행

 

 

 

1 ) 알고리즘 설계 기법

  • Dynamic Programming(동적 계획법) : 해결하고자 하는 문제의 최적해가 부분 문제들의 최적해들로 구성되어 있을 경우 이를 이용하여 문제의 최적해를 구하는 기법, 부분적으로 해결된 문제들을 이용하여 최적해를 구함
  • Greedy Algorithm(탐욕적 알고리즘) : 최적해를 구하는 데이 사용되는 근사적인 알고리즘으로, 문제의 해법을 욕심 형태로 선택하면서 최적의 해법에 도달하기를 바라는 방법, 가장 좋아 보이는 해법을 선택하는 알로리즘으로 결국 최적 해법을 구할 수는 없을지라도 근사적인 해답을 얻을 수 있음
  • Recursion Algorithm(재귀적 알고리즘) : 같은 알고리즘을 반복하여 수행하는 알고리즘
  • Approximation Algorithm(근사 알고리즘) : 최적화되는 답을 구할 수는 없어도 비교적 빠른 시간에 계산이 가능하도록 근사 해법을 수행하는 알고리즘
  • knapsack Algorithm(배낭 알고리즘) : 어떤 도둑의 배낭에 훔친 물건을 채우는 방법을 찾는 알고리즘
  • Divide and Conquer(분할 정복법) : 전체 문제를 부분적으로 나누어 해결하고 부분적으로 해결된 문제들을 결합하면 전체 문제를 해결, 분할 정복법은 Top-Down 방식, 동적 계획법은 Bottom-up 방식 존재
  • Backtracking(퇴각 검색법) : 최적해를 구하기 위한 모든 가능성을 찾아가는 방법

2 ) 코드의 품질 향상

  • Refactoring : 코드의 외부 행위는 바꾸지 않고, 내부 구조를 개선하여 소프트웨어를 변경하는 프로세스로 버그 발생을 최소화하는 코드 정화 방법
  • Clean Code : 가독성이 높고, 단순하며, 의존성을 줄이고 중복을 최소화하여 깔끔하게 잘 정리된 코드, 클린 코드가 높을수록 가독성이 좋아져서 유지보수 비용이 낮아지고, 수정 속도는 빠름

3 ) 클린 코드의 작성 원칙

  • 가독성 : 이해하기 쉬운 명령어를 사용, 코드 작성 시 들여쓰기 기능을 사용
  • 단순성 : 한 번에 한 가지만 처리가 되도록 코딩, 클래스, 메소드 등을 최소 단위로 분리
  • 의존성 : 영향도, 결합도를 최소화, 코드의 변경이 다른 부분에 영향이 없게 작성
  • 중복성 : 중복된 코드를 제거, 공통된 코드를 사용
  • 추상화 : 클래스, 메소드, 함수에 동일한 수준의 추상화, 상세 내용은 하위 클래스에서 코딩

4 ) 코드 품질 분석 도구

  • 정적 분석 도구 : pmd, cppcheck, SonarQube, checkstyle
  • 동적 분석 도구 : Avalanche, valgrind

5 ) C언어 변수명 작성 규칙

  • 영문자, 숫자, 밑줄 문자를 사용
  • 첫 글자는 반드시 영문자로 시작, 밑줄 문자는 영문자로 취급
  • 영문자는 대소문자를 다른 문자로 취급(ABC와 abc는 다른 문자로 취급)
  • 공백을 포함하거나 다른 특수 문자를 포함해서는 안 됨
  • 예약어를 변수명으로 사용할 수 없음

6 ) C 언어 변수 선언의 예약어

유형 예약어 대형 기종 소형 기종
문자형 char 1byte 1byte
정수형 short 2byte 2byte
int 4byte 2byte
long 4byte 4byte
unsigned 4byte 4byte
실수형 float 4byte 4byte
double 8byte 8byte

7 ) Java 변수 용량

종류 용량
boolean 1bit
byte 1byte
char 2byte
short 2byte
int 4byte
long 8byte
float 4byte
double 8byte

8 ) C 언어와 Java의 문자 선언 형태

  • C 언어 문자형 : char a;
  • C 언어 문자열 : char b [10];
  • Java 문자형 : char a;
  • Java 문자열 : String b ;

9 ) C언어, Java의 연산자의 종류와 우선순위

10 ) C언어 삼항 연산자

  • 조건식이 참이면 A 명령문, 거짓이면 B 명령문을 수행

조건식? A : B

11 ) PHP 연산자

  • === --> ==는 값만 같으면 참이지만 ===는 데이터 타입까지 같아야만 참
  • !== -->!= 는 값이 다르면 참이지만!==는 데이터 타입까지 달라야 참
  • > -->!=과 같은 연산자
  • and --> &&와 같은 연산자
  • xor --> XOR(^) 연산자
  • or --> | | 와 같은 연산자
  • @ --> 오류 제어 연산자로 명령어가 정상이면 수행, 오류가 발생하면 수행하지 않게 하는 연산자

12 ) C 언어 반복문

  • for문 : 초기 값, 최종 값, 증감 값을 지정하여 반복을 실행
  • while문 : 프로그램의 특정 부분을 반복 횟수와 상관없이 특정 조건이 만족할 때까지 반복하는 제어문
  • do ~ while문 : 조건식이 참이 아니어도 반복 구간은 반드시 한번 수행
  • break문 : 반복문을 중지하도록 명령, 반복 구간을 무조건 벗어남
  • continue문 : 반복 구간의 처음으로 이동, 다음 반복으로 넘어갈 수 있도록 하는 명령어

13 ) C 언어 1차원 배열의 초기화

  • 배열은 다음과 같이 선언되며 배열의 개수와 초기 값의 개수가 일치

  • 배열의 개수를 생략하면 자동으로 초기 값의 개수만큼만 배열이 확보
  • 정수형 배열의 개수가 초기 값보다 많은 면 0으로 채움
  • 문자형 배열의 개수가 초기 값보다 많으면 Null로 채움

14 ) C 언어 지원 라이브 함수

문자열과 숫자 변환 함수

함수명 설명
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 실수 값을 부호를 포함하여 문자열로 변환

수학 함수

함수명 설명
pow pow(2,3) 2의 3제곱근
sqrt 거듭제곱근 sqrt(4) = 2
ceil x 보다 작지 않은 가장 작은 정수를 구함(올림 함수)
floor x 보다 크지 않은 가장 큰 정수를 구한다(내림 함수)
fabs x의 절댓값을 구한다.
fmod x를 y로 나눈 나머지를 구한다.

15 ) Python의 변수 작성 규칙

  • 첫 글자에 숫자를 사용할 수 없음
  • 영문, 대문자, 소문자, 숫자, 밑줄 문자(_)를 사용
  • 영문 대소문자는 다른 문자로 인식
  • 변수 이름의 중간에 공백을 사용할 수 없음
  • 이미 사용되는 있는 예약어(Reserved Word)를 사용할 수 없음
  • 변수 명의 길이에 제한이 없음
  • 한글도 가능하지만 가능한 사용하지 않는 것이 좋음

16 ) Python의 숫자형 슬라이싱

  • a = [0,1,2,3,4,5,6,7,8,9]
  • print(a [2]) -> 2
  • print(a [7:]) -> a [7] 포함하여 이후 모두 출력, [7,8,9]
  • print(a [:3]) -> a [3] 제외하고 이전 모두 출력, [0,1,2]
  • print(a [3:7]) -> a [3] ~ a [7] 출력, a[7] 제외, [3,4,5,6]
  • print(a [:7]) -> a [7] 제외하고 이전 모두 출력, [0,1,2,3,4,5,6]
  • print(a [:7:1]) -> 1칸씩 띄고 출력, [0,1,2,3,4,5,6]
  • print(a [:7:2]) -> 2칸씩 띄고 출력, [0,2,4,6]
  • print(a [:7:3]) -> 3칸씩 띄고 출력, [0,3,6]

17 ) Python의 반복문 흐름 제어

  • pass : 실행할 코드가 없으므로 명령으로 이동
  • continue : 반복문의 시작으로 이동
  • break : 반복문을 멈추고 반복문을 벗어남
출처 이기적 정보처리 기사
반응형

댓글