키콤백신 개발 이야기 - 파이썬의 기본문법 (변수, 숫자, 문자열)
1. 들어가며
키콤백신 프로젝트는 파이썬으로 진행되고 있다. 파이썬을 처음 접하는 이들에게 도움이 되고자 간단히 악성코드를 진단하는 백신을 만들어보면서 파이썬의 기본 문법을 익혀보기로 한다.
2. 변수
변수는 파이썬에서는 개체를 다루는 포인터이다. 정적 프로토타이핑 언어인 C/C++와는 달리 특별히 변수를 미리 선언하지 않아도 된다. 파이썬은 실행 시점에 변수의 type(형)이 정해지기 때문에 동적 프로토타이핑 언어라고 말한다.
2.1 변수형의 규칙
다른 프로그래밍 언어들과 마찬가지로 파이썬에서 변수명을 선언하는데 몇가지 규칙이 있다.
- 영문자(대, 소문자 구분), 숫자, 언더바(_)를 사용할 수 있다.
- 첫 자리에는 숫자를 사용할 수 없다.
- 파이썬 키워드는 변수 명으로 사용할 수 없다.
False, None, True, and, as, assert, break, class, continue, def, del,
elif, else, except, finally, for, from, global, if, import, in, is,
lambda, nonlocal, not, or, pass, raise, return, try, while, with,
yield
2.2 변수에 값 대입하기
변수에 값을 대입할 때에는 =
을 사용하면 된다.
예) 간단한 백신의 버전을 변수에 저장하기
major_version = 1 # 주 버전을 저장한다.
minor_version = 0 # 부 버전을 저장한다.
위의 예제는 각 변수에 정수 1과 0을 대입하고 있다. 참고로 #
이후의 내용은 주석문을 의미한다.
2.3 변수 삭제하기
파이썬은 동적 프로토타이핑 언어인만큼 한번 값이 대입된 변수는 프로그램이 종료될때까지 유지될 가능성이 크다. 물론 함수등 특정 범위내에서만 동작하고 그 함수에서 빠져나오면 사라진다. 하지만 프로그래머의 의도에 따라 강제로 변수를 삭제할 수도 있다.
>>> a = 1
>>> print a
1
>>> del(a) # del 명령어로 a 변수를 메모리에서 삭제할 수 있다.
>>> print a
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined
>>> _
3. 숫자
파이썬에서 숫자는 정수, 실수. 복소수등을 다양하게 표현할 수 있다. 정수는 다시 10진수, 16진수, 8진수, 2진수플 표현할 수 있다. 앞 예문에서 정수는 다루었으므로 다른 형태의 숫자를 변수에 대입해보자.
pi = 3.14 # 실수를 저장한다.
complex = 1+2j # 복소수를 저장한다.
hex_i = 0xFF # 10진수 255를 16진수로 저장한다.
oct_j = 0o10 # 10진수 8을 8진수로 저장한다.
bin_k = 0b1000 # 10진수 8을 2진수로 저장한다.
4. 문자열
문자열은 연속된 문자를 표현한 것으로 따옴표(“”) 혹은 싱글 따옴표(‘’) 로 묶어서 표현할 수 있다.
예) 간단한 백신이 진단하는 악성코드의 이름을 저장하기
malware_name = "EICAR"
4.1 변수의 내용 출력하기 : print
지금까지 간단하게 변수에 숫자와 문자열을 저장해 보았다. 이제 변수에 저장된 내용을 출력해보자. 파이썬에서는 print 명령어를 통해 변수의 내용을 출력할 수 있다.
예) 간단한 백신의 로고를 출력하기
print "-------------------------------------------------"
print "%s for KICOM Anti-Virus ver%d.%d" % (malware_name, \
major_version, \
minor_version)
print "-" * 50
[실행 결과]
-------------------------------------------------
EICAR for KICOM Anti-Virus ver1.0
--------------------------------------------------
4.2 문자열 포맷팅
[리스트1]의 두번째 줄에서 %
로 표현된 부분이 문자열에 포함되어 있지만 출력 결과에서는 % 문자를 볼 수 없다. 그 자리에는 다른 문자열 혹은 숫자로 치환된 것을 볼 수 있다. 이처럼 특정 변수의 값을 특별한 형식(포맷)으로 표현한 문자열을 문자열 포맷팅이라고 한다.
문자열 포맷팅은 종류도 다양하기 때문에 다음 표로 정리하였다.
포맷 문자열 | 의미 |
---|---|
%c | 글자 하나를 표현 |
%s | 문자열을 표현 |
%i | 부호 있는 정수를 표현 |
%d | 부호 있는 정수를 표현, %i와 동일한 의미 |
%u | 부호 없는 정수를 표현 |
%o | 8진수 정수를 표현 |
%x | 16진수 정수를 표현 (소문자로 표현) |
%X | 16진수 정수를 표현 (대문자로 표현) |
%e | 지수를 표현 (소문자 ‘e’ 로 표현) |
%E | 지수를 표현 (대문자 ‘e’ 로 표현) |
%f | 실수를 표현 |
%g | %f와 %e를 짧게 표현 |
%G | %f와 %E를 짧게 표현 |
4.3 문자열 연산
리스트의 세번째 줄은 출력 결과에서 볼 수 있듯이 동일한 문자를 50번 반복한 것이다. 즉, 문자 혹은 문자열에 곱셈 연산을 통해 해당 숫자만큼 반복 할 수 있다. 곱셈 이외에도 문자열은 덧셈도 가능한데 다음의 예를 보자.
예) 백신의 버전을 출력하기
print str(major) + "." + str(minor)
[실행 결과]
1.0
4.4 문자열 함수
문자열에는 다양한 함수를 지원하고 있다. 이 함수들은 향후 백신 개발에 중요하므로 그 사용법을 익혀두는 것이 좋다.
- string.split()
특정 문자를 기준으로 문자열을 나눈다. 결과는 리스트로 리턴된다.
>>> 'KICOM Anti-Virus'.split(' ')
['KICOM', 'Anti-Virus']
- string.strip()
문자열이 가진 앞쪽, 뒤쪽의 공백 및 엔터키를 제거한다.
>>> ' KICOM Anti-Virus '.strip()
'KICOM Anti-Virus'
- string.find()
문자열에서 특정 단어를 찾아 위치를 리턴한다.
>>> 'KICOM Anti-Virus'.find('Virus')
11
- string.rfind()
문자열에서 특정 단어를 오른쪽에서 왼쪽 방향으로 찾아 위치를 리턴한다.
>>> 'KICOM Anti-Virus'.rfind('i') # 오른쪽에서 왼쪽 방향으로 탐색
12
>>> 'KICOM Anti-Virus'.find('i') # 왼쪽에서 오른쪽 방향으로 탐색
9
- string.replace()
문자열에서 특정 단어를 다른 단어로 교체한다.
>>> 'KICOM Anti-Virus'.replace('-', '')
'KICOM AntiVirus'
- string.join()
리스트를 합쳐서 문자열로 만든다.
>>> test = ['KICOM', 'Anti-Virus']
>>> ''.join(test)
'KICOMAnti-Virus'
5. 결론
키콤백신 프로젝트를 위해 간단히 파이썬의 변수 선언, 숫자, 문자열에 대해 알아보았다. 다음에는 파이썬의 자료구조1에 대해서 알아보기로 한다.
Update
- 2015-09-10 : 문서 링크 추가 작성
- 2015-09-08 : 문자열 함수 추가 작성
- 2015-09-03 : 최초로 작성