티스토리 뷰
Python Basic-level Practice
파이썬은 참 쉬우면서 단순한 언어이다. 그러한 점 때문에 파이썬을 사용해 누구나 쉽게 자기가 원하는 도구를 개발할 수 있다. 또한 데이터 처리에 있어 용이하다. 본인 역시 디지털 포렌식을 함에 있어 주 언어로 Python을 사용해왔고, 많은 기능을 구현해왔다. 그러나 이전에 파이썬을 공부함에 있어 야매(?)로 공부를 해온 덕에 고급적인 기능이나 코드 리뷰에 어려움을 겪어 왔다.
이번 포스팅에서는 파이썬의 함수, 클래스, 모듈 등에 대해 코드를 작성하며 공부 및 복습하는 시간을 가져보려고 한다. 디지털 포렌식과는 크게 관련 없는 포스팅이기는 하나 후에 오픈소스 포렌식 도구의 원활한 코드 리뷰와 효율적인 개발을 위해 해당 요소들을 공부하면 좋을 것이라고 생각한다.
Function
도구를 개발하다보면, 유사한 기능을 여러 번 사용해야할 경우가 있다. 예를 들어 여러 디스크 이미지 파일을 분석하는 프로그램을 만들 때, 매 번 디스크 이미지 파일을 연결 시키거나 로드 시키기에는 시스템 자원 낭비 뿐만이 아니라 코드 또한 길어지는 불상사를 만들게 된다. 이러한 점에서 특정 기능을 여러 번 사용해야 할 때, 이런 기능을 함수화 하게 되면 여러 상황에서 쉽게 사용이 가능해져 코드가 간결해진다. 또한 코드 리뷰를 하는 입장에서 원하는 기능을 찾기 편리해진다. 본인의 경우 보통 Main 함수 하나만 선언하고 해당 함수 안에 모든 기능을 넣는 습관이 있었는데, 이는 후에 코드 리뷰를 하는 입장에서나 다시 유지 보수를 해야하는 입장에서나 불편을 초래 할 수 밖에 없다. 이러한 점에서 함수라는 개념을 유용하게 사용하는 것은 매우 중요하며, 좋은 코드를 만드는 지름길이 될 것이다.
파이썬에서는 함수를 선언 할 때 def (define)을 사용한다. 함수의 이름은 임의로 정할 수 있으며 뒤의 괄호 안에는 넣을 인자를 정의 해준다. 이렇게 함수를 선언 한 뒤에는 조건문, 반복문과 같이 실행할 코드를 입력하여 주면 된다. 아래의 예시를 보자.
만약 함수의 인자 값이 많거나, 그 수를 예상 할 수 없다면 어떻게 처리해야 할까? 여러 개의 인자 값을 받도록, 함수의 인자 값 선언 앞에 *를 붙여주면 된다. (예시 - *args) 여러 개의 인자 값을 받도록 하는 함수의 예시는 아래와 같다.
위의 코드와 결과를 보게 되면 Exam1 함수에서 인자 값을 Tuple 형태로 변환하여 내부의 연산에 사용하는 것을 볼 수 있다. 또한 Exam2 함수에서 cal이라는 인자 값을 먼저 받고, 그 후의 값은 개수에 상관 없이 여러 개의 숫자를 받을 수 있게 된다.
다음 코드와 결과를 보게 되면 Count, Count2 2개에 대하여 Return을 하게 된다. 이 때 결과는 2개의 Return 값인 Count, Count2가 Tuple 형태로 변환되어 출력됨을 볼 수 있다. 하지만 콤마(,)를 통해 두 개의 변수에 Return 값을 넣어주게 되면 의도한 대로 각각의 Return 값을 확인 할 수 있게 된다.
위의 코드 같은 경우에는 한 인자 값을 기본으로 고정해주었다. 그 결과 고정 값이 그대로 반환되어 함수가 실행된 모습인데, 인자 값을 따로 넣어준다면 지정해준 고정 값 대신 인자 값이 들어가 함수가 실행 될 것이다. 이렇게 인자 값을 고정할 때 유의해야할 점은 "순서"이다. 기본적으로 기본 값을 설정해 놓게 되면 그 뒤의 인자 값 또한 기본 값으로 설정하지 않는다면 인자를 사용할 수 없게 된다. 그러한 점에서 기본 값으로 설정하고자 하는 인자들은 항상 뒤쪽에 위치 하도록 코드를 작성하는 것이 좋다.
*의 경우 Tuple 형태로 인자 값을 반환해주지만, **의 경우에는 Dictionary 형태로 반환을 해준다. 사용 예시는 아래와 같다.
Dictionary 자료형에 대해서는 나중에 필요하다면 게시를 하겠지만, Key와 Value로 구성되어 Key에 맞는 Value를 찾기 용이하도록 "사전" 형태를 가지고 있다. 위의 결과는 그에 맞추어 값들의 유형과 결과를 정리한 결과이다.
지금까지 Python에서 함수 사용법과 인자 값을 사용하는 법을 복습 해보았다. 포스팅을 통해서 함수의 사용에 익숙해지고, 기능을 분할하여 구현 할 줄 알게되었다면 성공이라고 생각한다. 다음 포스팅에서는 Class 개념에 대하여 복습을 해볼 것이다.
'Computer Programming' 카테고리의 다른 글
Preprocessor Directives - #define & Macro Function (0) | 2017.09.13 |
---|---|
Computer Programming (2) - Variables and Constants (0) | 2017.09.07 |
- Total
- Today
- Yesterday