| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | ||
| 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 13 | 14 | 15 | 16 | 17 | 18 | 19 |
| 20 | 21 | 22 | 23 | 24 | 25 | 26 |
| 27 | 28 | 29 | 30 |
- 정보보안기사
- defcon.mem
- Code Up
- Defcon DFIR CTF 2019
- 코드업
- 악성코드
- ctf
- 해킹
- 랜섬웨어
- 정처기
- 보안동향
- 필기
- Volatility
- codeup
- 보안
- SQLD
- 리버싱 핵심원리
- 코딩
- sql
- C language
- 리버싱
- Memory Forensics
- 정처기 실기
- c언어
- 정보처리기사
- 정처기 필기
- 오늘의 보안
- 오늘의 영어
- 멀웨어
- C
- Today
- Total
오브의 빛나는 별
[정보처리기사] 10장 프로그래밍 언어 활용 본문
주요 자료형
- 정수형(int): 4Byte (C언어) , 4Byte(Java)
- 문자형(char): 1Byte (C언어), 2Byte(Java)
- 실수형 (float): 4Byte (C언어), 4Byte(Java)
- 실수형 (double): 8Byte (C언어), 8Byte(Java)
주요 서식 문자열
- %d: 정수형 10진수의 입출력에 사용
- %o: 정수형 8진수의 입출력에 사용
- %x: 정수형 16진수의 입출력에 사용
- %c: 문자의 입출력에 사용
- %s: 문자열의 입출력에 사용
- %f: 소수점을 포함한 실수의 입출력에 사용
10진수 → n진수 변환: 10진수 값을 몫이 n보다 작을 때까지 n으로 나누고 최종 몫으로부터 나머지 값들을 나온 순서의 반대로 읽음
n진수 → 10진수 변환: 각 자리 숫자에 자릿값 n의 i 제곱을 곱한 수를 모두 더함
ex) 16진수 → 10진수: C9 = (12x16의 1제곱) + (9 x 16의 0제곱 = 192+9 = 201
주요 제어문자
- \n :커서를 다음줄의 처음으로 이동
- \t: 커서를 일정 간격으로 띄움
- \0: 널 문자 출력
연산자 우선순위
- 단항 연산자: !, ~, ++, --, sizeof
- 산술 연산자: * / %, + -
- 시프트 연산자: <<(x<<n=x∗2의 n제곱), >>
- 관계 연산자: < <= >= >, == !=
- C: 참이면 1 / 거짓이면 0
- Java: 참이면 true / 거짓이면 false
- Python: 참이면 True / 거짓이면 False
- 비트 연산자: &두 값을 비트로 연산하여 같은 비트의 값이 모두 1이면 해당 비트 값이 1이 되고, 그렇지 않으면 0이 되는 연산자 (AND 연산자), ^ 두 값을 비트로 연산하여 같은 비트의 값이 서로 다르면 해당 비트 값이 1이 되고, 그렇지 않으면 0이 되는 연산자 (XOR 연산자), | 두 값을 비트로 연산하여 같은 비트의 값이 하나라도 1이면 해당 비트 값이 1이 되고, 그렇지 않으면 0이 되는 연산자 (OR 연산자), ~ 모든 비트의 값을 반대로 바꾸는 반전 기능을 하는 연산자 (NOT 연산자) → 부호를 반대로 바꾼 값에 1을 뺀 값과 같다
- 논리 연산자: && ||
- 조건 연산자: ?
- 대입 연산자: = += -= *- /= %= <<= >>=
- 순서 연산자: .
Java 표준 라이브러리
- java.lang: 자바에 기본적으로 필요한 인터페이스, 자료형, 예외 처리 등에 관련된 기능을 제공
- java.util: 날짜 처리, 난수 발생, 복잡한 문자열처리 등에 관련된 기능을 제공
Java 자료형
-HashSet: set의 자식 클래스로 중복을 허용하지 않는 집합의 성질을 가진 클래스
-ArrayList: List의 자식 클래스로 크기가 가변적으로 변하는 선형리스트의 성질을 가진 클래스. 순서 중요. 데이터 검색 시 빠름
-LinkedList: List의 자식 클래스로 데이터를 저장하는 노드가 이전 노드와 다음 노드의 상태를 알고 있는 링크드 리스트의 자료구조를 구현한 클래스. ArrayList와 동일한 기능과 메서드를 갖음. 데이터 삽입/삭제 시 빠름
-HashMap: 키와 값으로 구성된 객체를 저장하는 구조로 되어있는 자료구조를 구현한 클래스
Python 자료형
-Set: 중복된 원소를 허용하지 않는 집합의 성질을 가지고 있는 자료구조
-List: 크기가 가변적으로 변하는 선형리스트의 성질을 가지고 있는 자료구조
-List 슬라이싱: 리스트명[시작: 끝: 스텝]
- 시작 인덱스를 생략할 경우 처음부터(index 0) 슬라이싱. 끝 인덱스를 생략할 경우 마지막까지(index n-1) 슬라이싱. 끝 인덱스가 e라면 슬라이싱의 범위는 e 바로 앞까지임. 스텝을 생략할 경우 기본값은 1
-Tuple: 초기에 선언된 값에서 값의 생성/삭제/수정이 불가능한 자료구조. 튜플의 인덱싱과 슬라이싱 모두 리스트와 같은 방식. 메서드가 없음
-Dictionary: 키와 값으로 구성된 객체를 저장하는 구조로 되어있는 자료구조
변수: 데이터를 저장할 수 있는 메모리의 기억공간
- 지역변수: 함수/블록 안에서 선언하는 변수. 함수/블록의 종료와 함께 메모리상에서 소멸. 초기값이 없으면 쓰레기 값이 들어감. 스택 영역에 저장됨
- 전역변수: 함수 블록 밖에서 선언하며 전체 함수에 영향을 미침. 프로그램이 종료될 때 메모리상에서 소멸. 초기값이 없으면 0 값이 들어감. 데이터 영역에 저장됨
- 정적변수: static으로 선언하며 선언된 블록 내에서만 사용 가능. 함수가 종료되어도 소멸되지 않고 값이 그대로 유지. 프로그램이 종료될 때 메모리상에서 소멸. 초기값이 없으면 0이 입력되고, 단 한번만 초기화. 데이터 영역에 저장됨
- 동적변수: 메모리 동적할당으로 생성되는 변수. Run time 시간에 메모리를 할당. 동적 기억장소에 할당하여 메모리 낭비를 피하려는 목적. 무조건 포인터를 사용해야 함. 힙 영역에 저장됨
식별자(Identifier): 변수, 상수, 함수 등 서로 구분하기 위해 사용되는 이름
- 명명 규칙
1. 영문 대/소문자, 숫자, 밑줄(_) 사용O
2. 첫째 자리에 숫자 사용X
3. 공백X(공백 대신 밑줄(_) 사용)
4. 데이터 값의 의미/역할 표현
5. 이미 사용되고 있는 예약어 사용X(ex: int, short, long, for, while, continue 등)
- 표기법
1. 카멜 표기법(Camel Case): 여러 단어가 이어지면 첫 단어 시작만 소문자로 표시, 각 단어의 첫 글자는 대문자로 지정 ex) inputFuncion
2. 파스칼 표기법(Pascal Case): 여러 단어가 이어지면 각 단어의 첫글자를 대문자로 지정 ex) InputFunction
3. 스네이크 표기법(Snake Case): 여러 단어가 이어지면 단어 사이에 밑줄(_) 삽입 ex) input_function
4. 헝가리 표기법(Hungarian Case): 첫째 자리에 자료형을 붙임(정수형: n, 문자형: c, 문자열: sz) ex) nScore(정수형)
while문: 시작과 종료조건을 지정하여 참인 동안에는 해당 문장을 반복해서 실행하는 명령문
do ~ while문: 참, 거짓과 관련 없이 무조건 한 번은 실행하고, 그 다음부터는 조건이 참인 동안에 해당 분기를 반복해서 실행하는 명령문
do{
명령문; // 참, 거짓과 관련 없이 do안의 명령문은 무조건 한 번은 실행
}while(조건문); // 괄호 안의 조건문이 참이라면 위의 명령문을 반복하고, 거짓이라면 탈출
for문: 초깃값, 최종값, 증감값을 지정하여 반복을 실행하는 명령문
for (초기식; 조건식; 증감식){ // 초기식부터 시작해서 조건식을 만족하면 명령문 실행후, 증감식에 따라 값을 변경
명령문; // 조건식이 참일 경우 명령문 실행 -> 명령문 끝나고 증감식에 따라 값 변경 후 다시 반복
} // 조건식이 거짓일 경우 for문 종료
루프 제어 명령어: 반복문에서 무한 루프를 방지하기 위한 명령어
- break 문: 반복문이나 switch문을 중간에 탈출하기 위한 명령어
- continue 문: 반복문에서 다음 반복으로 넘어갈 수 있도록 하는 명령어
사용자 정의 자료형: 사용자가 상황에 맞게 기존 자료형들을 조합해서 만드는 자료형
- 열거체: 서로 연관된 정수형 상수들의 집합. 정수형 상수에 이름을 붙여서 코드를 이해하기 쉽게 해줌. C언어에서는 멤버에 초깃값을 설정하지 않으면 0부터 차례대로 할당
enum 열거체명{
멤버1,
멤버2, ...
};
배열: 같은 타입의 변수들로 이루어진 집합. 같은 자료형의 변수를 연속적으로 묶어 놓은 저장공간
2차원 배열: 같은 자료형의 변수를 행과 열의 연속적인 공간으로 묶어 놓은 것
포인터: 변수의 주소 값을 저장하는 공간
ex) 정수 a가 변수일 때 int* b = &a – int* b(a의 주소를 저장하는 포인터 변수 b), *(주소에 해당하는 값을 가리킴), &a(변수 a의 주소값)
ex) a가 1차원 배열일 때
- (a+1): a가 가리키는 값에서 1칸 떨어진 곳의 주소
- *(a+1): a가 가리키는 값에서 1칸 떨어진 곳의 주소가 가리키는 값
- &a[0] == a, &a[1] == (a+1), &a[2] == (a+2)
- a[0] == *a, a[1] == *(a+1), a[2] == *(a+2)
ex) int a = 10;
int* b = &a;
printf(%d %d, a, *b);
10 10
- 배열[i] = *(배열+i)
- &배열[i] = 배열 + i
- a[] 형태는 1차원 포인터와 같으므로 앞에 *을 붙이면 값을 가리킴
- a 형태는 2차원 포인터와 같으므로 앞에 **을 붙여야 값을 가리킴
구조체: 사용자가 기본 타입을 가지고 새롭게 정의할 수 있는 사용자 정의 자료형. 여러 변수들을 모아서, 하나의 객체를 구성할 때 사용하는 사용자 정의 타입 객체
struct 구조체명
{
멤버변수1;
멤버변수2;
}
- 일반 구조체 변수로 접근할 때는 .으로 접근
- 구조체 포인터로 접근할 때는 ->으로 접근
- 배열명만 단독으로 사용할 경우 1차원 구조체 포인터와 동일
- 1차원 구조체 배열일 때 배열명[요소].변수명, (*(배열명+요소)).변수명, 배열명->변수명, (배열명+요소)->변수명 형태로 값을 가리킴
- 1차원 구조체 포인터일 때 포인터[요소].변수명, (*(포인터+요소)).변수명, 포인터->변수명, (포인터+요소)->변수명 형태로 값을 가리킴
함수 포인터: 함수의 주소를 저장하고, 해당 주소의 함수를 호출하는 데 사용하는 포인터
매개변수 전달: 함수가 필요로 하는 값을 매개변수로 만들면, 함수를 호출하는 쪽에서 매개변수를 사용하여 해당 함수에 변수의 값과 주솟값을 전달하는 방식
- 전달인자(Argument): 함수를 호출하는 쪽에서 전달하는 변수의 값 또는 주솟값. 실 매개변수(Actual Parameters)
- 매개변수(Parameter): 함수를 호출하는 쪽에서 전달받는 변수의 값 또는 주솟값. 형식 매개변수(Formal Parameters)
매개변수 전달 방법
- Call by Value: 변수의 값을 넘겨주고, 이 값은 새로운 공간에 할당되어 사용하는 방식. 형식 매개변수의 어떠한 변화도 실 매개변수에 아무런 영향을 미치지 X. 실 매개변수(전달인자)는 변수 선언과 동일하게 작성하고, 형식 매개변수(매개변수)는 변수명을 작성
- Call by Reference: 변수가 사용중인 메모리 공간의 주소를 넘겨주는 방식. 실 매개변수의 주소를 형식 매개변수로 보냄. 형식 매개변수(매개변수)는 간접값연산자(*)를 이용해서 포인터변수 선언과 동일하게 작성. 실 매개변수(전달인자)는 주소연산자(&)를 이용해서 변수의 주솟값을 작성
재귀함수: 함수가 자기 자신을 부르는 함수
배열포인터: 배열의 시작 주소값을 저장할 수 있는 포인터 2차원 배열의 구조. 그냥 하나의 포인터일 뿐
Java
- 출력 함수
1. Systehttp://m.out.print(변수명) // 출력 후 엔터x
2. System.out.println(변수명) // 출력 후 엔터o
3. Systehttp://m.out.printf(포맷스트링, 변수명) // 포맷스트링을 사용하여 변수 출력
- 입력 함수
Scanner 스캐너변수명 = new Scanner(System.int);
입력받을변수명 = 스캐너변수명.nextInt(); //nextInt, nextFloat, nextLine
- 조건문, 반복문은 C언어와 동일
- for each문: 배열 or 리스트 크기만큼 반복하되, 반복할 때마다 배열 or 리스트의 항목을 순차적으로 변수에 대입하는 반복문
Python
- 출력 함수
1. print(문자열, end = ' ') // 출력 후 엔터x
2. print(문자열) // 출력 후 엔터
3. print(변수명)
- 입력 함수
1. 문자열 입력
변수명 = input()
2. 숫자 입력: 문자열로 저장한 후에 eval() 함수를 사용하여 숫자로 변환
변수명 = input()
변수명 = eval(변수명)
- 조건문: Python에서는 switch문 존재x
- 반복문: Python에서는 do~while문 존재x
for 변수 in range(시작, 종료, 스텝)
- 내장 함수
1. all: 모든 요소가 참인지 확인하는 함수. 모든 요소가 참일 경우 True를 반환하고, 하나라도 거짓이면 False를 반환
2. any: 하나 이상의 요소가 참인지 확인하는 함수. 하나라도 참인 요소가 있으면 True를 반환하고, 모든 요소가 거짓이면 False를 반환
3. chr: 정수형 값에 해당하는 문자로 변환
4. divmod: 두 수의 몫과 나머지는 튜플로 변환하는 함수. divmod(a, b)는 a를 b로 나누었을 때 몫과 나머지를 반환하며, 반환 값은 (몫, 나머지) 현태의 튜플을 반환
접근제어자: 지정된 클래스, 변수, 메서드를 외부에서 접근할 수 있도록 권한을 설정하는 기능
- public: 외부의 모든 클래스에서 접근 가능
- protected: 같은 패키지 내부에 있는 클래스, 하위 클래스에서 접근 가능. 자기 자신과 상속받은 하위 클래스 둘 다 접근 가능
- default: 접근 제어자를 명시하지 않은 경우, 같은 패키지 내부에 있는 클래스에서 접근 가능. Java에만 존재
- private: 같은 클래스 내에서만 접근 가능
클래스: 객체 지향 프로그래밍에서 특정 개체를 생성하기 위해 변수와 메서드를 정의하는 틀. 변수 + 메서드(함수). 클래스에서 변수는 '변수 선언'과 동일. 클래스에서의 메서드는 '사용자 정의 함수'와 문법이 동일
- 자기 클래스 참조: 현재 객체를 가리키는 포인터 사용(보통 매개변수 값과 클래스 내 변수명 구분하기 위해 사용). Java는 this 포인터, Python은 self 포인터 사용
- static 메서드: 클래스가 메모리에 올라갈 때 자동적으로 생성되는 메서드. 인스턴스를 생성하지 않아도 호출 가능(인스턴스: 클래스로부터 만들어진 객체)
- 클래스 선언: 클래스를 일반 변수로 선언한 경우, 선언함과 동시에 생성자가 호출되고 함수가 종료되면 소멸자 호출
생성자(Constructor): 해당 클래스의 객체가 생성될 때 자동으로 호출되는 특수한 종류의 메서드. 일반적으로 클래스의 멤버 변수를 초기화하거나 클래스를 사용하는데 별도로 설정이 필요한 경우 사용. 클래스명과 동일한 이름을 가진 메서드
소멸자(Destructor): 객체의 수명이 끝났를 때 객체를 제거하기 위한 목적으로 사용되는 메서드
상속(Inheritance): 어떤 개체가 있을 때 그 객체의 변수와 메서드를 다른 객체가 물려받는 기능. 자식 클래스를 생성하면 무조건 부모 클래스의 생성자를 실행한 후에 자식 클래스의 생성자 실행
오버라이딩(Overriding): 하위 클래스에서 상위 클래스 메서드를 재정의할 수 있는 기능. 오버라이드하고자 하는 메서드가 상위클래스에 존재해야 함. 메서드 이름은 같아야 함. 메서드 매개변수 개수, 데이터 타입이 같아야 함. 메서드 반환형이 같아야 함. 부모, 자식 간 동일한 이름의 메서드여야 함. 생성자는 오버라이딩 불가능. 매서드 이름이 클리거나 매개변수가 다르면 컴파일 오류 발생. 매서드가 부모 클래스의 메서드를 재정의한 것임을 명확하게 표시
- @Override
Super: 상위 클래스의 변수나 메서드에 접근할 수 있는 키워드(참조 변수). 기본적으로 부모 클래스의 생성자는 파라미터가 없는 생성자 호출. 만약, 부모 클래스에서 파라미터가 있는 생성자를 호출하고 싶을 때 super 키워드 사용
super.메서드명()
추상 클래스: 미구현 추상 메서드를 한 개 이상 가지며, 자식 클래스에서 해당 추상 메서드를 반드시 구현하도록 강제하는 기능. 추상 클래스로 선언하면 추상 메서드와 일반 메서드를 가질 수 있음
abstract class 클래스명{
abstract 데이터타입 메서드명();
Java
1. 클래스
- this 포인터: 현재 객체를 가리키는 포인터. 내부의 변수와 함수를 가리킬 수 있음(자신 클래스 참조 가능). '매개변수 값'과 '클래스 내 변수명'을 구분하기 위해 사용
this.변수;
this.함수(매개변수);
- 클래스 선언 기본 문법
클래스명 클래스변수명 = new 클래스명(매개변수); // 클래스 생성
클래스변수명.finalize(); // 클래스 소멸
2. 생성자(클래스명과 동일한 메서드명을 가지며 반환값x)
3. 소멸자(finalize라는 메서명을 사용하며 반환값x)
4. 상속
class 부모클래스명{
}
class 자식클래스명 extends 부모클래스명{
}
- 오버로딩: 동일한 이름의 메서드를 매개변수만 다르게해서 여러 개 정의할 수 있는 기능. 메서드 이름이 같아야 함. 매개변수 개수가 달라야 함. 매개변수 개수가 같은 경우, 데이터 타입이 달라야 함. 반환형은 같거나 달라도 됨
- 오버라이딩: 상위 클래스의 메소드를 하위 클래스에서 재정의해서 사용하는 것
- 인터페이스: 다형성을 극대화하여 코드 수정을 줄이고 프로그램 유지보수성을 높이기 위한 문법. 일종의 추상클래스. 오직 추상 메서드와 상수만을 멤버로 가질 수 있음. 구현된 것은 아무것도 없고 밑그림만 그려진 기본 설계도와 같음. 상속받을 때 implements 키워드 사용
interface 클래스명{
데이터타입 메서드명();
}
Python
클래스: Python은 별도의 변수 선언을 하지 않기 때문에 메서드 형태로 구성됨. 함수명에 입력받을 값(매개변수) 앞에 self라는 키워드를 적어야 함(입력받은 값이 없을 경우 self만 사용
class 클래스명:
def 메서드명(self, 변수명1, 변수명2, ...)
명령어
return 반환값
- self 포인터: 현재 객체를 가리키는 포인터. Python에서 사용하는 개념으로 클래스 내부의 변수와 함수를 가리킬 수 있음(=자신 클래스 참조 가능). 보통은 '매개변수로 받는 값'과 '클래스 내 변수명'을 구분하기 위해 사용
self.변수명
self.함수명(매개변수)
- 클래스 선언
클래스변수명 = 클래스명(매개변수) ## 클래스 생성
del 클래스변수명.finalize() ## 클래스 소멸
생성자: Python에서는 __init__이라는 메서드명을 사용하고, 첫 번째 매개변수로 self를 적어주며 반환값이 없음
class 클래스명:
def __init__(self, 변수명1, 변수명2, ..):
명령어
소멸자: Python에서는 __del__이라는 메서드명을 사용하고 매개변수에 self를 적어주며, 반환값이 없음
class 클래스명:
def __del__(self):
명령어
상속
class 부모클래스명:
-
class 자식클래스명(부모클래스명:
-
오버라이딩(Overriding)
class 부모클래스명:
def 메서드명(self, 변수명):
-
class 자식클래스명(부모클래스명):
def 메서드명(self, 변수명):
- ## 부모 클래스의 메서드명과 매개변수가 동일해야함
spuper().메서드명()
추상 클래스
class 클래스명:
def 메서드명(self):
pass
Python 함수
- extend(): 요소를 확장해주는 역할을 하며, 모든 항목을 하나로 추가
- pop(): 리스트 내부 요소를 꺼내주는 함수. 해당 함수를 호출하면 리스트에서 해당 값을 삭제하면서 리턴
- reserve(): 리스트 내부의 요소의 순서를 뒤집어주는 역할
프로그래밍 언어의 유형 분류
1) 개발 편의성에 따른 분류
- 저급 언어: 기계가 이해할 수 있도록 만들어진 언어 ex) 기계어, 어셈블리어
- 고급 언어: 개발자가 소스코드를 작성할 때 쉽게 이해할 수 있도록 작성된 언어 ex) C, C++, Java, Python
2) 실행 방식에 따른 분류
- 명령형 언어(절차형 언어): 컴퓨터에 저장된 명령어들이 순차적으로 실행되는 프로그래밍 방식 ex) Fortran, Cobol, Pascal, C
- 객체 지향 언어: 객체 간의 메시지 통신을 이용한 프로그래밍 방식 ex) Java, C++
- 함수형 언어: 수학적 수식과 같은 함수들로 프로그램을 구성하여 호출하는 방식 ex) Lisp
- 논리형 언어: 논리 문장을 이용해 프로그램을 표현하고 계산을 수행하는 개념에 기반한 프로그래밍 방식 ex) 프롤로그
3) 구현 기법에 따른 분류
- 컴파일 방식의 언어(번역): 고급언어를 기계어로 번역하는 방식의 언어. 컴파일러에 의해 실행에 필요한 정보가 미리 계산되어 실행 속도가 높음. 인간이 만든 고급언어를 컴퓨터가 해석할 수 있는 저급언어로 변역. 기계어와 가장 가까운 형태의 언어. 고급언어로 작성된 프로그램을 컴퓨터에서 실행하기 위해 컴퓨터가 이해할 수 있는 언어로 변역. 전체를 번역하므로 변역시간이 오래 걸리지만, 한 번 번역한 후에는 다시 번역하지 않으므로 실행 속도가 빠름. ex) Fortran, Pascal, C, C++
- 인터프리터 방식의 언어(통역): 소스코드를 한 줄 한 줄 읽어가며 명령을 바로 처리하는 방식의 언어. 고급 프로그램을 즉시 실행시킬 수 있어 프로그램 수정이 간단함. 고급언어로 작성된 프로그램을 한 줄씩 읽어 들여서 실행하는 프로그램. 번역과 실행이 동시에 디루어지므로 별도의 실행파일이 존재하지 않음 ex) Basic, 프롤로그, Lisp, php, javascript
- 혼합형 방식의 언어: 고급 언어를 컴파일하여 중간 언어로 변환 후 인터프리터에 의해 번역을 실행하는 방식의 언어 ex) Java
C언어 컴파일 과정
- .c 전처리기 -> .i 컴파일러 -> .s 어셈블러 -> .o 링커 -> .exe
- 전처리기: 전처리 구문을 처리하는 과정 ex) #include<stdio.h>
- 컴파일러: 고수준 언어를 저수준 언어로 변환
- 어셈블러: 완전히 기계어로 바꾸어 주는 역할
- 링커: 여러 개의 오브젝트 파일을 합치거나 라이브러리를 합치는 역할
프로그래밍 언어별 특성
1) 절차적 프로그래밍 언어
- Algol: 알고리즘 연구개발에 이용. 재귀 호출 가능
- C: Unix 운영체제에서 사용. 모든 컴퓨터 시스템에서 사용 가능하도록 설계됨. 일련의 처리 절차를 정해진 문법에 따라 순서대로 기술하는 언어
- Basic: 교육용으로 개발. 문법 쉬움, 종류 다양(서로 다른 종류끼리 소스코드 호환X)
- Fortran: 과학계산에서 필수적인 벡터, 행렬 계산 내장. 수학 함수 사용 가능
2) 객체 지향 프로그래밍 언어
- C++: C문법 + 객체 지향 프로그래밍 + 일반화 프로그래밍을 위한 템플릿 기능. 많은 작업을 성능 하락 없는 형태로 개발 가능. 메모리 관리 같이 고려해야 할 요소가 많아서 개발이 어려움
- C#: 마이크로소프트에서 개발. C++, Java와 비슷한 문법. 불안전 코드와 같은 기술을 통해 플랫폼 간 상호 운용성 확보
- Java: 썬 마이크로 시스템즈가 개발. 웹 애플리케이션 개발에 가장 많이 사용됨. 자바 컴파일러는 자바 언어로 작성된 프로그램을 바이트 코드라는 특수한 바이너리 형태로 변환. 현실 세계의 개체를 하나의 객체로 만들어 객체들을 조립해서 프로그램을 작성하는 기법
- Delphi: 파스칼 문법 + 추가 기능. Windows 아래에서 모든 부분 프로그래밍 가능. 높은 생산성, 간결한 코드, 저수준 시스템 프로그래밍 가능
3) 스크립트 언어
- PHP: 동적 웹페이지 제작을 위해 설계됨. HTML에 입력 시 웹서버에서 해당 코드를 인식해 작성자가 원하는 웹페이지 생성. 인터페이스 방식의 자체 인터프리터 제공
- Perl: 인터프리터 방식의 언어. 실용성을 모토로 하고 있어 다른 프로그램이 언어로부터 뛰어난 기능 도입. 데이터 길이 제약 없이 문자열 처리 기능 제공
- Python: 다양한 플랫폼에서 사용 가능. 라이브러리(모듈) 풍부. 유니코드 문자열 지원. 들여쓰기 사용, 블록 구분 문법 채용. 다른 언어로 쓰인 모듈들을 연결. 플랫폼에 독립적이고 문법이 간단하여 배우기 쉬움
- Javascript: 객체 기반의 언어. 웹 브라우저 내에서 사용. 다른 응용 프로그램의 내장 객체에 접근 가능. 브라우저마다 지원되는 버전 상이
4) 선언형 언어
- 함수형 언어(Haskell): 패턴 맞춤, 커링, 조건제시법, 가드, 연산자 정의 등의 기능 지원. 재귀 함수, 대수적 자료형 지원
- 함수형 언어(LISP): 수학 표기법을 나타내기 위한 목적. 트리 구조, 가비지 컬렉션, 동적 자료형, 인터프리터 개념 제시. 함수 호출 시: 함수이름(연산자 피연산자1 피연산자2)
- 논리형 언어(Prolog): 논리식 기반으로 객체 간 관계 문제 해결하기 위해 사용. AI, 계산 언어학, 자연어 처리 분야에서 사용
- 특수 분야 언어(SQL): RDBMS의 데이터를 관리하기 위해 설계된 특수 목적 언어. DB 관련 프로그램들이 SQL을 표준으로 채택
객체 지향 프로그래밍: 객체와 객체 간의 통신을 통해 구현되는 프로그램
객체 지향 구성요소
- 클래스(Class): 특정 객체 내에 있는 변수와 메서드를 정의하는 일종의 틀. 객체 지향 프로그래밍에서 데이터를 추상화하는 단위. 하나 이상의 유사한 객체들을 묶어서 하나의 공통된 특성을 표현. 속성은 변수의 형태로, 행위는 메서드 형태로 선언
- 객체(Object): 물리적, 추상적으로 자신과 다른 것을 식별 가능한 대상. 클래스에서 정의한 것을 토대로 메모리에 할당됨. 객체마다 각각의 상태와 식별성을 가짐
- 메서드(Method): 클래스로부터 생성된 객체를 사용하는 방법. 객체가 메시지를 받아 실행해야 할 객체의 구체적인 연산. 전통적 시스템의 함수 또는 프로시저에 해당하는 연산 가능
- 메시지(Message): 객체 간 상호 작용을 하기 위한 수단. 객체에게 어떤 행위를 하도록 지시하는 방법. 객체 간의 상호 작용은 메시지를 통해 이루어짐. 메시지는 객체에서 객체로 전달됨
- 인스턴스(Instance): 객체 지향 기법에서 클래스를 통해 만든 실제의 실형 객체. 클래스에 속한 각각의 객체. 실제로 메모리상에 할당
- 속성(Attribute): 한 클래스 내에 속한 객체들이 가지고 있는 데이터 값들을 단위별로 정의. 성질, 분류, 식별, 수량, 현재 상태 등에 대한 표현 값
라이브러리: 필요할 때 찾아서 쓸 수 있도록 모듈화되어 제공되는 프로그램
1) 구성요소(도/설/샘)
- 도움말: 라이브러리를 이해하기 쉽게 설명한 문서
- 설치 파일: 라이브러리를 적용하기 위해 제공되는 파일
- 샘플 코드: 개발자가 라이브러리를 손쉽게 적용하기 위해 제공되는 소스코드
2) 기능
- 문자열 연산 기능
- 문자열 탐색/치환 기능
- 수치 계산 기능
- 난수 생성 기능
- 파일 경로 조작 기능
- 디렉터리 생성 기능
- 날짜 조작 기능
- 로그 출력 기능
3) 종류
- 표준 라이브러리: 프로그래밍 언어가 기본적으로 갖고 있는 라이브러리. 각 프로그래밍 언어의 표준 라이브러리는 여러 종류의 모듈과 패키지를 갖음, 별도의 파일 설치 없이 날짜, 시간 등의 기능 이용 가능
- 외부 라이브러리: 누구나 개발하여 설치 가능. 인터넷을 이용하여 공유 가능. 별도의 파일을 설치해야 함
4) 표준 라이브러리
(1) 문자열 라이브러리 함수: string.h 헤더 파일을 include하여 사용해야 함
- strcat: 문자열끼리 연결하는 함수. strcat(a, b); // a의 문자열 뒤에 b의 문자열을 이어 붙임
- strcpy: 문자열을 복사하는 함수. strcpy(a, b); // b의 문자열이 a에 복사되어 a와 b 모두 b의 문자열이 됨
- strcmp: 문자열의 아스키코드를 비교하는 함수. strcmp(s1, s2);. s1 < s2 : -1, s1 == s2 : 0, s1 > s2 : 1
- strlen: 문자열의 길이(length)를 알려주는 함수. strlen(s);
(2) 표준 라이브러리 함수: stdlib.h 헤더 파일을 include 해서 사용해야 함
- atoi: 문자열(str) → 정수(int) 변환. atoi(str);
- atof: 문자열(str) → 실수형(float, double) 변환. atof(str);
- itoa: 정수(int) → 문자열(str) 변환. itoa(value, str, radix); // 정수인 value를 변환하여 버퍼인 str에 radix 진수로 저장
(3) 수학 라이브러리 함수: math.h 헤더 파일을 include 하여 사용해야 함
- ceil: 소수점 올림 함수. ceil(n);
- floor: 소수점 내림 함수. floor(n);
모듈과 패키지
- 모듈(Module) : 개별 파일. 전역변수, 함수 등을 모아둔 파일. import 모듈명
- 패키지(Package) : 파일들을 모아 놓은 폴더. 모듈을 디렉터리 형식으로 구조화한 라이브러리. import 패키지명.모듈명
- 라이브러리 : 모듈 + 패키지
'정보처리기사' 카테고리의 다른 글
| [정보처리기사] 12장 제품 소프트웨어 패키징 (0) | 2026.07.24 |
|---|---|
| [정보처리기사] 11장 응용 SW 기초 기술 활용 (0) | 2026.07.23 |
| [정보처리기사] 9장 소프트웨어 개발 보안 구축 (0) | 2026.07.21 |
| [정보처리기사] 8장 SQL 응용 (0) | 2025.10.24 |
| [정보처리기사] 7장 애플리케이션 테스트 관리 (1) | 2025.03.26 |