Search

프로그래밍 언어 활용

프로그래밍 언어란 컴퓨터의 시스템을 동작시키기 위한 프로그램 작성 언어
프로그램은 다소 단순해 보이는 명령어들의 조합으로 구성, 이러한 조합들은 Bit로 구성됨
비트 비트는 컴퓨터를 이해하기 위한 가장 기본적인 용어로, Binary Digit의 약칭
0과 1로 구성된 이진법을 이용하며, 1바이트는 8Bit를 의미함
구분
설명
바이트
8bit
킬로바이트
8,192bit
메가바이트
8,388,608bit
기가바이트
8.5899e + 9bit
테라바이트
8.7961e + 12bit
페타바이트
0.0072e + 15bit
엑사바이트
9.2234e + 18bit
2진수 표기
8 4 2 1
0 0 0 1 : 1
0 0 1 0 : 2
0 1 0 0 : 4
1 0 0 0 : 8
컴퓨터에 명령 전달 방법
컴퓨터에 명령을 전달할때에는 Bit로 전달이 됨
방법으로는 전기적 신호, 광 신호를 이용하는 방식이 있음
프로그래밍 언어는 점진적으로 발전해옴
컴퓨터 시스템 구조
컴퓨터는 전달 받은 0과 1의 값들을 정해진 순서대로 실행하며, 그 과정에서 처리(Processing), 저장(Store) 함
CPU (중앙처리장치)
프로그램 실행 및 데이터 처리
기억장치 (Memory)
저장
입출력 장치 (I/O Device)
중앙처리장치로부터 명령을 받아 데이터를 입력 또는 출력
명령어 실행 단계
인출 → 해석 → 실행 → 기록
명령어 형식
연산코드 : 수행될 연산을 지정 (LOAD, ADD 등)
오퍼랜드 : 연산을 수행하는데 필요한 데이터 또는 데이터 주소
프로그램의 구성요소
프로그램은 크게 자료구조와 알고리즘으로 구성
자료구조
의미 : 컴퓨터에 데이터를 삽입, 삭제, 수정하게 해 주는 논리적인 공간 구조
자료의 형태에 따라 단순구조, 선형 구조, 비선형 구조, 파일구조로 분류됨
자료구조 분류
유형
설명
단순 구조
프로그래밍 언어에서 제공하는 기본 데이터 타입
️ 선형 구조
자료들 사이의 선후 관계가 일대일인 구조 (스택, 큐, 댁 등)
️ 비선형 구조
자료들 사이의 관계가 계층또는 그물형태를 가지는 구조 ( 트리, 그래프 등)
파일 구조
보조 기억 장치에 데이터값이 실제로 기록되는 자료구조
알고리즘
의미 : 넓은 의미 : 자료구조와 함께 프로그램을 구성하는 요소 | 좁은 의미 : 어떠한 문제에 대한 답을 찾는 해법
알고리즘 5가지 특성
유형
설명
입력
외부로부터 입력되는 자료가 0개 이상이어야 함
출력
출력되는 결과가 1개 이상이어야 함
명확성
각 명령어의 의미가 명확해야 함
유한성
정해진 단계를 지나면 종료되어야 함
유효성
모든 명령은 실행이 가능한 연산이어야 함
알고리즘 표현은 자연어, 순서도, 의사코드, 프로그래밍 언어 등의 방법이 있으며, 언어가 아니여도 가능함
용어 정의
프로그래밍을 위한 대표적인 용어로 변수, 바인딩, 데이터 타입 등이 있음
️ 변수 : 어떤 값을 주기억 장치에 기억하기 위해서 사용하는 공간
️ 식별자 : 프로그램의 구성요소를 구별하기 위한 기준으로, 변수명이 식별자에 속함
️ 바인딩 : 변수와 변수 관련된 속성을 연결하는 과정 (정적 바인딩, 동적 바인딩)
정적 바인딩 : 프로그램 실행 시간 전에 속성을 연결하는 방식
동적 바인딩 : 프로그램 실행 시간에 속성을 연결하는 방식
선언 : 변수에 이름, 데이터 타입 등의 속성을 부여하는 작업 (명시적, 묵시적 선언)
명시적 선언 : 선언문을 이용하여 변수 이름을 나열하고 속성을 부여하는 방식
묵시적 선언 : 별도의 선언문 없이 디폴드 규칙에 의해 속성이 부여되는 방식
영역 : 이름이 사용되는 범위를 의미하며, 정적 영역과 동적 영역을 구분됨
정적 영역 : 변수를 찾을때 구조에 기반하는 방식
동적 영역 : 변수를 찾을때 구조보단 순서에 기반하는 방식
할당 : 변수에 메모리 공간을 바인딩하는 작업을 의미함
데이터 타입 : 변수가 가질 수 있는 속성값과 길이 및 성질을 의미함
연산자 : 데이터 처리를 위해 연산을 표현하는 기호로 +, - 등과 같은 연산자를 포함함
명령문 : 프로그램을 구성하는 문장으로, 지시 사항을 처리하는 단위를 의미함
데이터 타입의 유형
유형
설명
불린 타입
조건이 참인지 거짓인지 판단하고 할때 사용
문자 타입
문자 하나를 저장하고자 할때 사용
문자열 타입
여러개의 문자를 저장하고 할때 사용
정수 타입
정수값을 저장하고자 할때 사용
부동 소수점 타입
소수점을 표현하는 실숫값을 저장하고자 할때 사용
배열 타입
여러 데이터를 하나로 묶어서 저장하고자 할때 사용
변수 설정 규칙 (파이썬)
구분
설명
사용 가능 문자
영문 대소문자, 숫자, 밑줄의 사용이 가능 (대소문자 구분)
변수 사용 규칙
첫자리에 숫자 불가능, 변수 이름 중간에 공백 불가능
변수 의미 부여
데이터값의 의미나 역할 표현 가능, 예약어 사용 불가능
변수 설정 규칙 (C언어)
1.
영문자, 숫자, 밑줄문자만 사용가능
2.
첫 자는 영문자이거나 밑줄문자만 가능
3.
변수 사이에 공북 사용 불가
4.
예약어는 사용불가능 하지만 포함되는거는 가능
5.
대소문자는 서로 구별됨
연산자
연산자는 프로그램 실행을 위해 연산을 표현하는 기호임
산술연산자, 시프트연산자, 관계연산자, 논리연산자 등 이 있음
산술연산자
연산자
연산 내용
+
양쪽의 값을 더함
-
왼쪽 값에서 오른쪽 값을 뺌
*
두개의 값을 곱합
/
두개의 값을 나눔
%
왼쪽 값을 오른쪽 값으로 나눈 나머지를 계산
시프트연산자 (비트를 이동시키는 연산자)
연산자
연산 내용
<<
왼쪽 값을 오른쪽값만큼 비트를 왼쪽으로 이동시킴
>>
왼쪽 값에 오른쪽값만큼 부호비트를 채우면서 왼쪽으로 이동
관계연산자 (두 피연산자 사이의 크기를 비교하는 연산자)
연산자
연산 내용
>
왼쪽에 있는 값이 오른쪽 값보다 크다면 참 아니면 거짓
<
왼쪽에 있는 값이 오른쪽 값보다 작으면 참 아니면 거짓
>=
왼쪽에 있는 값이 오른쪽 값보다 같거나 크면 참 아니면 거짓
=<
왼쪽에 있는 값이 오른쪽 값보다 같거나 적다면 참 아님 거짓
==
왼쪽, 오른쪽값이 같으면 참 아니면 거짓
!=
왼쪽, 오른쪽값이 다르면 참 아니면 거짓
논리연산자
연산자
연산 내용
&&
두개의 논릿값이 모두 참이면 참 아니면 거짓
||
두개의 논릿값중 하나라도 참이면 참 아니면 거짓
비트연산자
연산자
연산 내용
&
두 값을 비트로 연산하여 모두 참이면 참 아니면 거짓
!
두 값을 비트로 연산하여 하나라도 참이면 참 아니면 거짓
^
두 값을 비트로 연산하여 서로 다르면 참 아니면 거짓
조건문
조건문 종류
종류
설명
if문
조건이 참인지 거짓인지에 따라 경로를 선택함
case / switch문
조건에 따라 여러 개의 선택 경로 중 하나를 취하고자 할때 사용함
반복문
반복문 종류
종류
설명
while문
수식이 거짓이 될때까지 해당 문장을 반복해서 실행
for문
시작과 종료조건을 지정하여 참 인동안에는 해댱문장 실행
do while 문
초깃값, 최종값, 증감값을 지정하여 반복 실행
연산 표기법
종류
설명
전위 표기법
연산자를 먼저 쓰고 피연산자를 뒤에 쓰는 표기법
중위 표기법
실생활에 사용되는 방식과 동일하게 쓰는 표기법
후위 표기법
피연산자를 먼저 쓰고 연산자를 맨 뒤에 쓰는 표기법
연산자 우선순위
연산자
연산 내용
(), []
괄호, 대괄호
!, ~, ++, —
부정, 증감, 산술 연산자
*, /, %
곱셉, 나눗셈, 산술 연산자
+, -
덧셈, 뺄셈 산술 연산자
<<, >>, >>>
시프트 연산자
<, <=, >, >=, ==, !=
관계 연산자
&, ^, |, &&, ||
논리 연산자
? :
삼항 연산자
=, +=, -= …
대입 연산자
사용자 정의 자료형
열거체
괄호안에 연속적인 값이 들어가는 자료형 (특정 값을 넣어주지 않으면 1씩 늘어남)
enum { 상수 멤버 1 상수 멤버 2 상수 멤버 3 }
C
복사
구조체
괄호안에 멤버 변수를 사용하는 자료형
struct { 자료형 변수명 1; 자료형 변수명 2; 자료형 변수명 3; 반환자료형 함수() {}; }
C
복사
공용체
구조체와 거의 유사하나 조금 더 범주가 크다고 볼 수 있음
열거체와 구조체와 다르게 공용체명을 작성하여야 하며, 구조체를 멤버로 사용 가능
union 공용체명 { 자료형 변수명 1; 자료형 변수명 2; 자료형 변수명 3; struct {}; }
C
복사
추상화와 상속
추상화
복잡한 문제의 본질을 이해하기 위해 세부 사항은 배제하고 중요한 부분을 중심으로 간략화 하는 기법
기능 추상화, 자료 추상화, 제어 추상화로 구분됨
기능 추상화
입력자료를 출력자료로 변환하는 과정을 추상화하는 방법
자료 추상화
자료와 자료에 적용할 수 있는 오퍼레이션을 함께 정의하는 방법
제어 추상화
외부 이벤트에 대한 반응을 추상화하는 방법
상속
상위 수준 그룹의 모든 특성을 하위 수준 그룹이 이어받아 재사용 또는 확장하는 특성을 의미
구체화
하위 수준 그룹이 상위 수준 그룹의 추상적인 부분을 구체화시키는 것을 의미
단일 상속, 다중 상속으로 구분됨
프로그래밍 언어별 특성
FORTRAN
1954년 초기 버전이 개발된 언어로 시스템 의존적이고, 프로그램 작성을 위해서는 컴퓨터지식이 많이 필요함
COBOL
FORTRAN과 마찬가지로 대문자만 작성가능, 미국 국방성에 의해 개발됨
PASCAL
사용자 정의 추상화 기능을 제공하였으나 정보 은닉 기능이 없어 현대 프로그램에는 맞지 않다는 단점을 가짐
C
UNIX 운영체제 구현에 사용되는 언어이며, 가장 많이 사용되는 시스템 프로그래밍 언어임
C++
C를 발전 시킨 언어로 클래스, 상속 등을 제공하는 객체 지향 프로그래밍 언어임
JAVA
컴파일을 거쳐야하며, 컴파일을 통해 생성된 class파일을 가상머신을 통해 실행해야함
JAVASCRIPT
객체 지향 스크립트 언어로, 웹 페이지 동작을 구현 할 수 있음
️ PERL
텍스트 처리에 주안점을 두고 개발된 인터프리터 언어
PYTHON
인터프리터 언어이며, 배우기 쉽고 이식성이 좋은 언어임
C#
.NET 환경에 맞춰 설계된 언어이며, VISUAL BASIC 과 같이 사용자 인터페이스를 쉽게 만드는 컴포넌트 기능을 제공하기도 함
GOLANG
구글에서 만든 언어로, C언어와 비슷한 문법을 가지고 있음, 하드웨어 사양이 낮더라도 빠른 컴파일이 가능함
DART
객체 지향적인 언어이며, 백그라운드에서 작동된다는 점에서 Javascript에서 차이를 가지고 있음
CEYLON
JAVA에 기반을 둔 언어로 모듈성을 주요 특징으로 가짐
프로그래밍 언어의 유형 분류
개발 편의성에 따른 분류
저급 언어
기계가 이해 할 수 있도록 만들어진 언어로, 기계어, 어셈블리어가 속함
고급언어
개발자가 소스코드를 작성할때 쉽게 이해할 수 있도록 작성된 언어로, C, C++, Java등이 속함
실행하는 방식에 따른 분류
명령형 언어
컴퓨터에 저장된 명령어들이 순차적으로 실행되는 방식으로 절차형 언어라고 불림
FORTRAN, COBOL, PASCAL, C 등이 속함
함수형 언어
수학적 수식과 같은 함수들로 프로그램을 작성하여 호출하는 방식으로 LISP 등의 언어가 속함
논리형 언어
규칙에 대한 활성화 조건이 만족되면 연관된 규칙이 실행되는 구조로, 추론과 관계 규칙에 의해 원하는 결과를 얻어내는 방식 PROLOG 등이 속함
객체 지향 언어
객체 간의 메시지 통신을 이용하여 프로그래밍 하는 방식으로 Java, C++등이 속함
구현 기법에 따른 분류
컴파일 방식
고급 언어를 기계어로 번역하는 방식의 언어로 FORTRAN, PASCAL, C, C++ 등이 속함
인터프리터 방식
고급언어 명령문을 하나씩 번역하고 실행하는 방식의 언어로 BASIC, PROLOG, LISP 등이 있음
혼합형
고급언어를 컴파일하여 중간언어로 변환한 후 인터프리터에 의해 번역 하는 방식의 언어로 JAVA 가 속함
컴파일러와 인터프리터
컴파일러
FORTRAN, C 등과 같은 고급 언어를 기계어로 번역하는 도구
인터프리터
프로그램 문장을 하나씩 번역하고 실행할 수 있도록 하는 프로그램
(실행속도가 느리고 메모리 사용량이 비효울적)
객체 지향 프로그래밍
절차지향 프로그래밍
객체라는 개념이 등장하기 이전에 모듈, 변수, 함수를 사용하여 개발하는 방법으로 프로그램을 순차적으로 수행 시키며 방법으로는 자료구조와 명령 중심으로 프로그램을 구성함
객체지향 프로그래밍
객체와 객체 간의 통신을 통해 프로그램이 구현되며, 객체와 속성, 메소드로 구성되는데 이는 절차 지향에서 모듈은 객체, 변수는 속성, 함수는 메소드에 대응된다.
객체 지향 프로그래밍 구성요소
1.
객체 : 개체, 속성, 메소드로 구성된 클래스의 인스턴스를 의미함
2.
클래스 : 객체의 타입을 정의하고 객체를 생성하는 틀을 의미함
3.
메시지 : 객체 간의 통신을 의미함
객체의 구성요소
1.
개체 : 현실 세계에 보이는 본질을 의미함
2.
속성 : 자료 저장소 역할을 하며, 절차 지향 프로그래밍의 변수와 대응함
3.
메소드 : 호출 단위를 의미하며, 절차 지향 프로그래밍의 함수와 대응함
클래스
객체 지향 프로그래밍에서 객체를 표현하는 추상 데이터 타입으로 객체를 생성하는 틀임
객체 지향 프로그래밍에서 사용하는 주요 디자인 패턴
디자인 패턴
설명
싱글톤 패턴
오직 하나의 인스턴스만을 가지도록 하는 패턴
팩토리 메소드 패턴
어떤 인스턴스를 생성할지는 서브클래스에서 정의하도록 하는 패턴
옵서버 패턴
하나의 오브젝트 상태가 변할 때 관련자에게 알리고 자동 업데이트를 수행하는 패턴
퍼사드 패턴
하나의 인터페이스로 제공하는 패턴
프락시 패턴
객체의 대리자를 이용하여 다른 객체로의 접근을 통제하는 패턴
커맨드 패턴
요청 자체를 캡슐화하여 파라미터를 전달하는 패턴
템플릿 메소드 패턴
템플릿을 정의하고 구체화는 서브클래스에서 정의하는 패턴
객체 지향 프로그래밍의 디자인 패턴 중 가장 유명한 패턴은 GoF의 23가지 디자인 패턴이며
(생성 패턴, 구조 패턴, 행위 패턴으로 구분됨)
소프트웨어 보안 약점
구분
설명
입력 데이터 검증 및 표현
입력값에 대하여 검증이 누락되거나 데이터 타입이 잘못 지정되어 있을때 발생할 수 있는 보안 약점
보안 기능
보안 기능 (인증, 접근 제어 등) 적절 하지 않은 경우 발생 할 수 있는 보안 약점
시간 및 상태
여러 개의 프로세스가 동작할때 시간 및 상태가 적절하게 관리 되지 않아 발생할 수 있는 보안 약점
에러 처리
에러의 처리가 미흡하거나 중요 정보가 노출될때 발생할 수 있는 보안 약점
코드 오류
프로그래밍 시 잘못된 코드 작성을 통해 오류가 발생하는 보안 약점
️ 캡슐화
캡슐화가 불충분하였을때 발생할 수 있는 보안 약점
API 오용
의도하지 않은 방법으로 API를 사용하거나, 보안에 취약한 API를 사용할때 발생할 수 있는 보안 약점
리팩토링
프로그램 개발 후 기능의 변화 없이 내부 구조만 변경하는 작업을 의미
아래의 방법을 통해 프로그램을 보다 최적의 상태로 만들어 주는 품질 활동임
Delete (제거)
Extract (추출)
Move (이동)
Merge (병합)
Replace (전환)
라이브러리 활용
라이브러리는 효율적인 프로그램 개발을 위해 필요한 프로그램을 모아 놓은 집합체
(일반적으로 도움말, 설치 파일, 샘플 코드 등을 제공함)
즉 필요할때 찾아서 쓸 수 있도록 모듈화 되어 제공되는 프로그램
라이브러리의 구성
1.
도움말 : 문서
2.
설치 파일 : 적용하기 위한 설치파일
3.
샘플코드 : 적용하기 위해 제공되는 코드
표준 라이브러리와 외부 라이브러리
표준 라이브러리
프로그래밍언어가 기본적으로 가지고 있는 라이브러리를 의미
외부 라이브러리
별도의 파일을 설치하여서 사용해야하는 라이브러리를 의미
모듈과 패키지
라이브러리는 모듈과 패키지를 총칭하며, 모듈이 개별 파일이라면, 패키지는 파일을 모아놓은 폴더를 의미
모듈 (한개의 파일에서 기능을 제공)
import (모듈명)
Markdown
복사
패키지 (여러개의 모듈을 한개의 폴더로 묶어서 제공)
import (패키지명).(모듈명)
Markdown
복사
회귀 테스트
결함 수정 후 수정된 프로그램뿐만 아니라 관련된 프로그램도 함께 테스트하는 방법
(결함 수정 과정에서 다른 프로그램에 영향을 미치는 부분이 있을 수 도 있다는 전체하에 테스트를 진행)