코딩 스타일

우리는 무엇을 다룰 것인가?
몇개의 새로운 주석사용법
들여쓰기를 사용하여 가독성을 개선하기 위하여 코드의 전체적인 모양을 조감하는법
그리고 우리의 프로그램을 저장하기 위하여 모듈의 사용법을 소개한다

주 석

나는 이미 '연속열에 대하여 더 자세히'의 섹션에서 주석에 관하여 언급하였다. 그렇지만 우리가 주석으로 할 수 있는 일이 더 있다. 나는 여기에 그것에 관하여 더 자세히 설명할 것이다:

버전의 역사 정보

각 파일의 시작부분에 파일 머리부를 작성하는 것은 좋은 습관이다. 이것은 작성날짜, 저자, 버전 그리고 내용에 관한 일반적인 정보, 때로는 변경의 기록과 같은 상세한 정보를 제공하여야 한다. 이 부분은 주석으로 나타날 것이다:


#############################
# Module:   Spam.py
# Author:   A.J.Gauld
# Date:     1999/09/03
# Version:  Draft 0.4
#
# Description: This module provides a Spam object which can be
# combined with any other type of Food object to create
# interesting meal combinations.
#
###############################
# Log:
# 1999/09/01    AJG - File created
# 1999/09/02    AJG - Fixed bug in pricing strategy
# 1999/09/02    AJG - Did it right this time!
# 1999/09/03    AJG - Added broiling method(cf Change Req #1234)
################################
import sys, string, food
...

쓸모없는 코드를 주석처리해 버리기

이 기술은 때때로 코드의 잘못된 부분을 격리하고자 할때 사용된다. 예를 들어, 프로그램이 어떤 데이타를 일고, 그것을 처리하고, 결과를 출력하고 그리고 그 결과를 다시 데이타 파일에 저장한다고 가정해 보자. 만약 그 결과가 우리가 예상한 것이 아니라면, 임시적으로 (그 잘못된) 데이타가 파일에 다시 저장되지 못하도록 막고 그런식으로 망가지는 것을 막는 것이 유용할 것이다. 우리는 단순히 그 부적절한 코드를 삭제할수는 있겠지만 거의 급진에 가까운 접근법은 간단히 그 라인을 주석으로 다음과 같이 변경하는 것이다:

data = readData(datafile)
for item in data:
    results.append(calculateResult(item))
printResults(results)
######################
# Comment out till bug in calculateResult fixed
# for item in results:
#     dataFile.save(item)
######################
print 'Program terminated'

그 오류가 수정되고나면 우리는 간단히 주석표식을 지워서 그 코드를 다시 한번 살릴 수 있다.

문서화 문자열

모든 언어들은 여러분이 함수 혹은 모듈이 무슨일을 하는지 문서에다 주석을 작성할 수 있도록 해준다. 그러나 파이썬과 스몰톡 같은 것들은 한 단계 더 전진하여 통합환경이 프로그래밍중에 대화적인 도움말을 제공하는데에 사용하는 것과 같은 방식으로 여러분이 함수를 문서화할 수 있도록 해준다. 파이썬에서 이것은 다음가 같은 """documentation""" 문자열 스타일을 사용하여 실현된다:

class Spam:
    """A meat for combining with other foods

    It can be used with other foods to make interesting meals.
    It comes with lots of nutrients and can be cooked using many
    different techniques"""

    def __init__(self):
        ...

print Spam.__doc__

주 의: 우리는 특별한 변수 __doc__ 을 출력함으로써 그 문서화 문자열 에 접근할 수 있다 모듈, 함수 그리고 클래스/메쏘드는 모두 문서화 문자열을 가질 수 있다. 예를 들어 다음을 시험해 보라:

import sys
print sys.__doc__

들여쓰기

이것은 프로그래밍에서 가장 뜨거운 논쟁이 되는 주제중의 하나이다. 모든 프로그래머는 자신만의 방법을 최선으로 생각하여 코드를 들여쓰기 하는 것처럼 보인다. 약간의 연구가 진행된 후에 적어도 어떤 요소들은 겉치장을 뛰어넘어 진짜 중요하다는 것을 보여 주었다.- 즉 그것들은 실제로 우리가 코드를 더 이해하도록 도와준다.

논쟁의 이유는 단순하다. 대부분의 프로그래밍 언어에서 들여쓰기는 순수히 겉치장이다; 읽는 사람을 도와주는 것이다. (파이썬에서 그것은 실제로 필요하며 프로그램을 적절히 작동시키기 위해서는 필수적이다!) 그리하여 이것은:

FOR I = 1 TO 10
    PRINT I
NEXT I

정확히 다음과 같다:

FOR I = 1 TO 10
PRINT I
NEXT I

적어도 베이직 인터프리터에 관해서는 그렇다. 그것은 들여쓰기로 단지 우리가 더 쉽게 읽기 쉽게 해줄 뿐이다.

요점은 들여쓰기는 코드의 논리적인 구조를 반영해야 하여 그런식으로 눈에 보이도록 프로그램의 흐름을 따라가야만 한다는 것이다. 그러기 위해서는 그 블록이 다음과 같은 블록 형태라면 도움이 된다:

XXXXXXXXXXXXXXXXXXXX
    XXXXXXXXXXXXXXXX
    XXXXXXXXXXXXXXXX
    XXXXXXXXXXXXXXXX

이것은 다음보다는 읽기 쉽다:

XXXXXXXXXXXXXXXXXXXXX
  XXXXX
    XXXXXXXXXXXX
    XXXXXXXXXXXX
    XXXXXXXXXXXX
  XXXXX

왜냐하면 그것이 명쾌하게 모두 한 블록에 있기 때문이다. 연구에 의하면 들여쓰기가 논리적 블록 구조를 반영할 때 이해를 하는데 있어서 의미있는 개선이 있음을 보여준다. 우리가 지금까지 보아온 자그마한 예제에서는 중요하게 보이지 않을 수도 있으나 여러분이 수백 혹은 수천 라인의 프로그램을 작성하기 시작하면 그것은 더욱 더 중요하게 될 것이다.

변수 이름

우리가 지금까지 사용해온 변수 이름은 거의 의미가 없었다, 왜냐하면 주로 그들이 아무 의미없이 단순히 테크닉을 예시하는 것이었기 때문이다. 일반적으로 여러분의 변수 이름이 여러분이 나타내기를 원하는 것들을 반영한다면 더욱 더 좋다. 예를 들어 우리의 곱셈표 연습에서 우리는 'multiplier'를 변수로 사용하여 어떤 표가 인쇄되어야 할지를 지시했었다. 그것은 단순히 'M' 보다는 더 의미를 가진다 - 그것은 더 적은 타이프로 똑 같이 잘 잘동하기는 한다.

그것은 이해와 노력사이의 상호교환관계이다. 일반적으로 최선의 선택은 짧지만 의미있는 이름을 선택하는 것이다. 너무 긴 이름은 혼란스럽게 되어 일관성있게 정확하게 사용하기 어렵다. (예를 들어 나는 multiplier대신에 the_table_we_are_printing을 사용할 수도 있었지만 너무 길기도 하고 실제로 더 명료하지도 않다.

모듈적인 프로그래밍

나는 나중에 이것을 더 자세하게 설명할 것이지만 지금으로서는 나는 단순히 그 개념을 기술하고 중요한것은 어떻게 우리가 모듈을 사용하여 우리의 작업을 저장할 수 있는가를 기술하기를 원한다 - 지금은 여러분이 파이썬을 종료하자 마자 여러분의 모든 프로그램은 사라진다.

파이썬의 대화형 인터프리터 프롬프트(>>>)가 생각을 즉시 시험해 보기에는 유용하지만, 반면에 여러분이 종료하는 순간에 모든 것들을 잃어 버린다. 길게 우리는 프로그램을 할수 있기를 원한다 그리고 그것을 다시 또 다시 실행시키기를 원한다. 이렇게 하려면 파이썬에서 우리는 확장명 .py 를 가지는 텍스트 파일을 작성한다. (이것은 단지 관례일 뿐이다, 여러분은 좋아하는 다른 것을 사용할 수도 있다. 그러나 나의 견해로는 관례를 따르는 것이 좋은 생각이다.) 여러분은 명령어 프롬프트로부터 다음과 같이 타이프함으로써 여러분의 프로그램을 실행시킬 수 있다:
$ python spam.py
spam.py 는 여러분의 파이썬 프로그램 파일의 이름이다

유닉스 사용자를 위한 주의 사항: 파이썬script파일의 첫 번째 라인은 반드시 연속열 #! 을 포함해야하며 다음에는 여러분의 시스템에 있는 파이썬의 전체 경로가 따라와야 한다.( 여러분은 여러분의 쉘 프롬프트에서 $ which python 을 타이프 함으로써 그것을 알 수 있다.)

나의 시스템에서 그 라인은 다음과 같이 보인다:
#! /usr/local/bin/python
이것으로 여러분은 동시에 파이썬을 호출할 필요 없이 그 파일을 실행 시킬 수 있다:
$ spam.py
이 라인은 윈도우/맥 어느쪽에서나 해를 끼치지 않는다, 그래서 윈/맥 사용자들은 그들의 코드가 유닉스에서도 실행될지도 모른다면,그것을 역시 삽입할 수 있다.

윈도우 사용자를 위한 주의 사항: 윈도우에서 여러분은 익스플로러 탐색기 안에서 .py 로 끝나는 파일들에 대한 연관 관계를 설정할 수 있다. 이것으로 여러분은 파일의 아이콘을 단순히 더블클릭함으로써 파이썬 프로그램을 실행할 수 있을 것이다. 이것은 파이썬 설치기가 이미 실행해 놓았을 것이다. 여러분은 .py 파일을 찾아 그것을 실행해 봄으로써 점검해 볼 수 있다. 만약 프로그램이 시작된다면 (파이썬 에러메지시지로 시작할지라도) 그것은 설정된 것이다.

파일을 사용하여 프로그램을 저장하는 또 다른 이점은 여러분이 전체조각을 다시 타이프할 필요 없이 실수를 편집하거나, 혹은 IDLE에서, 커서를 위로 올려 에러메시지들을 지나서 그 코드를 다시 선택할 수 있다는 것이다. IDLE은 편집을 위해 파일을 하나 열고 'Edit|Run module'메뉴를 통해 그것을 실행시키는 것을 지원한다.

이제부터 나는 예제에 >>> 프롬프트를 보통은 보이주지 않을 것이며, 나는 여러분이 프로그램을 개별의 파일로 작성하고 그것을 IDLE이나 혹은 (내가 개인적으로 좋아하는) 명령어 프롬프트에서 실행시키고 있다고 가정할 것이다.

기억해야할 요점
  • 주석은 임시로 코드가 실행되는 것을 막는데에 사용되어질 수 있다, 그것은 코드를 점검하거나 '디버깅'할때 유용하다.
  • 주석은 그 파일의 버전 역사를 가지는 설명적인 머리부를 제공하는데에 사용되어질 수있다.
  • 문서화 문자열은 한 모듈과 그 속에 들어 있는 객체들에 관한 실행-시간 정보를 제공하는데에 사용되어 질 수 있다.
  • 코드의 들여쓰기된 블록은 읽는이가 명료하게 그 코드의 논리적 구조를 볼 수 있도록 도와준다.
  • 파이썬 프로그램을 파이썬의 '>>>' 프롬프트 대신에 하나의 파일에 타이프해 넣음으로써 프로그램은 저장되어질 수 있으며 명령어 프롬프트에서 $ python progname.py 을 타이프하거나 혹은 윈도우의 익스플로러 창안에서 파일이름을 더블클릭함으로써 요청시에 실행된다.

Previous  Next  Contents


이 페이지에 대하여 질문 혹은 제안사항이 있으면 다음 주소로 나에게 전자메일을 보내라: agauld@crosswinds.net