모듈 프로그래밍

우리는 무엇을 다룰 것인가?
  • 모듈은 무엇인가에 관하여
  • 모듈로서의 함수
  • 모듈 파일 사용하기
  • 우리 자신만은 함수와 모듈을 작성하기
  • 모듈이란 무엇인가?

    프로그래밍의 네번째 요소는 모듈 프로그래밍 modular programming이다. 사실 그것은 엄밀히 말해 필수적인 것은 아니다, 그리고 우리가 지금까지 다루어온 것을 사용하여 여러분은 실제로 대단히 인상적인 프로그램을 작성할 수 있다. 그렇지만 프로그램이 커짐에 따라 무엇이 어디에서 일어나는지 추적하기가 점점 어려워진다. 우리는 실제로 세부적인 사항들을 생략하여서 컴퓨터가 어떻게 작동하는가 보다는 우리가 풀고있는 문제에 대하여 생각할 수 있도록 하는 방법이 필요하다. 어느 정도까지는 그것은 파이썬, 베이직 등등이 이미 내장된 능력으로 우리를 위하여 해주는 것이다 - 그것들 때문에 우리는 컴퓨터 하드웨어를, 키보드 위의 개별적인 키들을 읽는 법 등등을 다룰 수가 없다.

    모듈 프로그래밍의 역할은 프로그래머에게 그 언어의 내장 능력을 확장할 수 있도록 해주는 것이다. 그것은 프로그램의 조각들을 모듈로 포장해서 우리가 우리의 프로그램에 '꽂아 넣을' 수 있도록 해준다. 모듈의 첫 번째 형태는 하부루틴subroutine이었는데 그것은 한 블록의 코드로서 여러분은 그곳으로 점프할 수 있고 (약간은 분기 섹션에서 언급한 GOTO와 비슷하지만) 그러나 코드가 끝나고 나면, 불려졌던 곳으로 다시 점프할 수 있다. 그러한 특이한 스타일의 묘듈성은 프로시져 procedure 혹은 함수 function라고 알려져 있다. 파이썬과 그리고 다른 어떤 언어에서는 모듈 module이라는 단어는 특별한 의미를 가져서 우리는 짧게 그것을 살펴볼것이다, 그러나 함수를 약간 더 자세하게 숙고해 보자.

    함수를 사용하기

    함수를 작성하는 법을 생각해 보기 전에 어떤 프로그래밍 언어에서도 있는 (때때로 라이브러리 library라고 불리우는) 그 많고, 많은 함수들을 어떻게 사용하는지 살펴보자.

    우리는 이미 어떤 함수들이 사용된 것을 보았고 연산자의 섹션에서 다른 함수들을 나열하였다. 이제 우리는 이것들이 무엇을 공통으로 가지고 있는지 그리고 우리의 프로그램에서 어떻게 그것들을 사용할 수 있는지 살펴 볼 것이다.

    함수의 기본적 구조는 다음과 같다:

    aValue = someFunction(anArgument, another, etc...)
    

    이것은 함수를 호출함으로써 획득되는 값을 취하는 변수이다. 그 함수는 0 또는 많은 인수arguments들을 받아들일 수 있다. 그 함수는 그것들을 내부 변수와 같이 취급한다. 함수는 다른 함수를 내부적으로 호출할 수 있다. 우리의 여러 언어에서 약간의 예제를 살펴보고 이것이 어떻게 작동하는지 알아보자:

    BASIC: MID$(str$,n,m)

    이것은 문자열 str$에서 n번째에서 시작하여 다음의 m개의 문자를 출력한다. ( '$'로 끝나는 이름은 베이직에서 문자열을 나타내는 것이라는 것을 상기하라)

    time$ = "MORNING EVENING AFTERNOON"
    PRINT "Good";MID$(time$,8,8)
    

    "Good EVENING"이라고 출력한다.

    BASIC: ENVIRON$(str$)

    이것은 지정한 환경변수(Environment Variable)인 str$를 반환한다.

    PRINT ENVIRON$("PATH")
    

    현재 도스에 (보통 autoexec.bat 파일을 통하여) 설정된 PATH(경로) 를 출력한다.

    Tcl: llength L

    리스트 L의 길이를 반환한다.

    set a {"first" "Second" "third"} # 3 element list
    puts [llength $a]  # output is '3'
    

    주 의: 티클에서 거의 모든 것은 함수이다. (혹은 티클은 그것을 명령어라고 이름짓기를 선호하겠지만). 이것때문에 약간 어색한 구문이 되지만 컴퓨터가 티클 프로그램을 매우 쉽게 읽도록 하여 준다. 이것은 중요한데 왜냐하면 티클은 도구제어언어(Tool Control Language)의 약자이며 마이크로소프트사 제품인 VBA(Visual Basic for Applications)와 같이 다른 프로그램에 매크로macro language 언어로 내장되도록 디자인되었기 때문이다. 여러분은 실제로 같은 방식으로 파이썬을 내장시킬수 있지만 티클은 내장을 염두에되고 처음부터 그리고 대부분이 디자인되었다는 점에서 특별하다.

    Python: pow(x,y)

    x = 2   #  we'll use 2 as our base number
    for y in range(0,11):
       print pow(x,y)    # raise 2 to power y, ie 0-10
    

    여기에 우리는 y 의 값을 0 부텅 10 까지 생성하고 내장 pow()함수를 호출하여 2개의 인수 x와 y를 넘겨준다. 호출할 때 마다 x와 y의 현재값은 대치되어져 호출되어지며 그 결과는 출력된다.

    주 의: 지수화 연산자, **pow() 함수와 동일하다.

    Python: dir(m)

    파이썬에 내장된 또 다른 유용한 함수는 dir 인데 그것은, 모듈의 이름이 넘겨지면, 그 모듈에서 유효한 이름들의 목록을 - 때로는 함수 - 되돌려 준다. 내장 함수들에 대하여 그것을 시험해 보라:

    print dir(__builtin__)
    

    주 의: 다른 어떠한 모듈에도 그것을 사용할 수 있으려면 여러분은 그 모듈을 먼저 수입할 필요가 있으며 그렇지 않으면 파이썬은 그 이름을 인식할 수 없다고 불평할 것이다.

    다른 것을 더 해보기 전에 우리는 파이썬의 모듈에 관하여 좀 더 상세하게 논의해 보는 것이 좋다.

    모듈을 사용하기

    여러분이 모듈을 수입import함으로서 새로운 능력을 추가할 수 있다는 점에서 파이썬은 대단히 확장적인 언어이다(티클도 마찬가지이다) 우리는 모듈작성법을 간단하게 알아 볼것이다. 그러나 지금으로써는 파이썬에 기본으로 설치되어 있는 표준 모듈중 몇개를 다루어 볼 것이다.

    sys

    우리는 이미 sys 모듈을 본 바 있다. 우리는 그것을 파이썬을 종료할 때 사용하였다. 그것은 많은 다른 유용한 함수들 역시 가지고 있다. 이러한 것들에 접근하기 위하여 우리는 sys 모듈을 수입해야 한다:

    import sys # make functions available
    sys.exit() # prefix with 'sys'
    
    우리가 함수들을 많이 사용할 것을 알고 있으며 그 함수들이 우리가 이미 수입했거나 혹은 생성한 함수와 같은 이름을 가지지 않아야 한다는 것을 알고 있다면 우리는 다음과 같이 할 수 있다:
    from sys import *  # import all names in sys 
    exit() # can now use without specifying prefix 'sys'
    

    다른 모듈과 그 모듈의 내용

    여러분은 어떠한 파이썬 모듈도 이런식으로 수입하고 사용할 수 있다. 그리고 그것에는 여러분 자신이 작성한 모듈도 해당된다. 우리들은 잠시후에 그렇게 하는 법을 알아 볼 것이다. 그렇지만 먼저, 나는 여러분에게 파이썬의 표준 모듈과 그것들이 무엇을 제공하는지에 관하여 약간 보여주고자 한다:

    모듈 이름설 명
    sys 파이썬 시스템과 대화를 가능하게 한다:
  • exit() - 종료!
  • argv - 명령어 라인 인수에 접근한다
  • path - 시스템의 경로에 접근한다
  • ps1 - '>>>' 파이썬의 프롬프트를 변경한다!
  • os 운영체제와 대화를 가능하게 한다:
  • open - 파일을 연다
  • system - 시스템 명령어를 실행한다
  • mkdir - 디렉토리를 생성한다
  • getcwd - 현재의 작업 디렉토리를 찾는다
  • string 문자열을 처리할 수 있도록 해준다
  • atoi/f/l - 문자열을 integer/float/long 로 변환한다
  • find - 하부문자열을 탐색한다
  • split - '단어'의 부분을 이용한다
  • upper/lower - 대소문자 변환
  • re 문자열을 유닉스 스타일로 다루도록 해 준다
    정규 표현식 regular expressions
  • search - 문자열의 어느 곳엔가 있는 패턴을 탐색한다
  • match - 오로지 처음부터 찾는다
  • split - 패턴으로 분리된 필드의 부분을 이용한다
  • sub,subn - 문자열 바꾸기
  • math 많은 수학적 함수에 접근하도록 해준다:
  • sin,cos 등등 - 삼각 함수
  • log,log10 - 자연로그 그리고 상용로그
  • ceil,floor - 상한값과 하한값
  • pi, e - 자연 상수
  • time 시간(그리고 날짜) 함수
  • time - 현재의 시간을 획득한다 (초단위로 표현된다)
  • gmtime - 시간을 초단위로 UTC (GMT) 로 변환한다.
  • localtime - 대신에 지역 시간으로 변환한다
  • mktime - 지역시간의 반대
  • sleep - 프로그램을 n 초 동안 멈춘다
  • 이것은 단지 빙산의 일각일 뿐이다. 문자그대로 파이썬에는 수십가지의 모듈이 제공되고 있으며 또 많은 모듈들을 여러분은 내려 받을 수 있다. (훌륭한 자원은 Vaults of Parnassus이다.) 그곳에 있는 문서들을 살펴보고 인터넷, 그래픽, 데이타베이스 구축 등등의 프로그래밍을 하는법을 찾아보라.

    꼭 알아야할 중요한 것은 대부분의 프로그래밍 언어가 이러한 기본적인 함수들을 내장하거나 혹은 표준적인 라이브러리로 가지고 있다는 것이다. 함수를 작성하기 전에 항상 문서를 점검하라 - 이미 거기에 있을지도 모른다! 그것으로 우리는 기분좋게 안으로 들어간다....

    우리 자신의 함수를 정의하기

    좋다, 그래서 우리가 존재하는 함수를 사용하는 법을 안다면 우리는 어떻게 새로운 함수를 만들수 있는가? 간단하게 그것을 선언함declaring으로써 만들 수 있다. 다시말하면 우리가 작성한 서술문은 우리가 한 블록의 코드를 정의하기를 우리의 프로그램의 어디에서나 요구하면 삽입되어야 한다고 인터프리터에게 말해주는 것이다.

    그래서 우리가 인수로서 제공한 어떠한 값으로도 우리를 위하여 곱셈표를 출력하여 줄 수 있는 함수를 작성하여 보자. 베이직에서 그것은 다음과 같이 보인다:

    SUB TIMES (N%)
    FOR I = 1 TO 12
        PRINT I; "x"; N%; "="; I * N%
    NEXT I
    END SUB
    

    그리고 우리는 그것을 다음과 같이 호출 call할 수 있다:

    PRINT "Here is the 7 times table..."
    TIMES(7)
    

    주 의: 우리는 N% 라고 부르는 매개변수를 정의했고 그리고 인수argument 7 을 넘겨주었다. 그 함수 안에 있는 지역 변수 N% 은 우리가 그것을 호출했을 때 값 7 을 취하였다 우리는 함수 정의에서 우리가 원하는 만큼 매개변수를 정의할 수 있다. 그리고 호출하는 프로그램은 반드시 각각의 매개변수에 값들을 제공하여야만 한다. 어떤 프로그래밍 언어는 여러분에게 기본 값 default values을 매개변수에 정의할 수 있도록 하여 주어서 만약 값이 제공되지 않는다면 그 함수는 기본 값으로 간주한다. 나중에 우리는 파이썬에서 이것을 보게 될 것이다.

    파이썬에서 TIMES 함수는 다음과 같다:

    def times(n):
        for i in range(1,13):
            print "%d x %d = %d" % (i, n, i*n)
    

    그리고 다음과 같이 호출된다:

    print "Here is the 9 times table..."
    times(9)
    

    이러한 함수들이 어떤 값도 반환하지 않는다는 것을 주목하라(그들은 실제로 어떤 언어에서는 프로시져procedures라고 부르는 것이다.) 사실은 베이직 버젼이 실제로 함수FUNCTION키워드 보다는 서브루틴SUB 키워드를 사용한다는 것을 주목하라. 이것은 서브루틴subroutine을 나타내며 어셈블러 프로그래밍 시절부터 약간 사용되어진 단어이다. 베이직에서는 값을 반환하지 않는 함수를 의미한다. 반면에 파이썬은 def 라는 용어를 사용하는데 이것은 'define'의 약칭이며 이후에 따라오는 것은 함수라고 간주되어진다.

    내가 언급한 기본값의 사용법을 기억하는가? 이것을 사용하는 의미있는 방법중 하나는 요일을 반환하는 함수가 될 것이다. 우리가 그것을 인수 없이 호출한다면 우리는 오늘을 의도하고 있는 것이고, 그렇지 않으면 우리는 날짜의 숫자를 인수로 제공해야 한다. 다음과 같이:

    # a day value of -1 => today
    def dayOfWeek(DayNum = -1):
        days = ['Monday','Tuesday',
                'Wednesday','Thursday',
                'Friday', 'Saturday', 'Sunday']
    
        # check for the default value
        if DayNum == -1:
            # Use the time module functions to get current time
            # see the table above and the official module documentation
            import time
            theTime = time.localtime(time.time())
            DayNum = theTime[6]
        return days[DayNum]
    

    주 의: 기본 매개변수 값이 관련될 때만, 우리는 time모듈을 사용하면 된다. 그러므로 우리는 그것이 필요할 때까지 수입을 연기한다. 우리가 그 함수의 기본값 사양을 사용하지 않아도 된다면 이것으로 약간의 수행 개선을 제공할 것이다.

    이제 우리는 다음으로 이것을 호출할 수 있다:

    print "Today is: %s" % dayOfWeek()
    # remember that in computer speak we start from 0
    # and in this case we assume the first day is Monday.
    print "The third day is %s" % dayOfWeek(2)
    

    다시 곱셈표로 돌아가서....

    우리가 곱셈표의 값들을 단지 숫자의 배열로 반환하는 함수를 정의하고 싶을 때는 어떻게 하는가? 베이직으로는 그것은 다음과 같이 보일 것이다:

    FUNCTION TIMES% (N%)
        DIM VALUES(12) AS INTEGER
        FOR I = 1 to 12
            VALUES(I) = I*N%
        NEXT I
        RETURN VALUES
    END FUNCTION
    

    그리고 파이썬에서라면:

    def times(n):
        # create new empty list
        values = []
        for i in range(1,13):
            values.append(i*n)
        return values
    

    이건 약간 우둔한 것 같은데, 왜냐하면 단지 요청될 때 i*n를 계산하는것이 더 쉽기 때문이다. 그러나 희망적으로 여러분은 그 아이디어를 이해한다. 값을 반환하는 더욱 실용적인 함수는 문자열에 있는 단어의 수를 세어보는 것이 될 것이다. 여러분은 그함수를 사용하여 파일에 있는 단어를 각 라인에 있는 개수를 모두 더해 계산할 수 있을 것이다. 그것을 위한 코드는 다음과 같은 그런것이 될 것이다:

    def numwords(s):
        list = split(s) # list with each element a word
        return len(list) # return number of elements in list
    
    for line in file:
        total = total + numwords(line) # accumulate totals for each line
    print "File had %d words" % total
    

    이제 여러분이 그것을 시험에 보면, 여러분은 그것이 작동하지 않는다는 알게 될 것이다. 내가 한것은 일반적인 디자인 테크닉으로서 그것은 내가 생각하기에 그 코드가 어떻게 보여야 하는지를 그린 것이지만 절대적으로 정확한 코드를 사용하려고 고민하지 않고 대충 그려본 것이다. 가끔 이런것을 일컬어 의사코드(Pseudo Code)라고 알려져 있으며 또는 좀 더 형식적인 스타일로 프로그램 기술 언어(Program Description Language (PDL))이라고 부른다.

    우리가 파일과 문자열 처리를 좀 더 자세히 들여다 보고나면, 이 강좌의 조금 후에, 우리는 이 예제로 다시 돌아 올 것이다. 그리고 실제로 그것을 실행해 볼 것이다.

    Tcl 함수

    우리는 또한 티클에서 함수를 물론, 작성할 수 있다 그리고 우리는 proc 명령어를 사용하여 그렇게 할 수 있다, 다음과 같이:

    proc times {m} {
        for {set i 1} {$i <= 12} {incr i} {
            lappend results [expr $i * $m]
    	}
        return $results
    }
    

    주목할 것은 티클의 lappend 리스트 명령어를 사용함으로써 나는 자동적으로 results 라는 리스트를 생성하였고 거기에다 요소들을 추가하기 시작한다는 것이다.

    주의 해야할 단어

    티클은 함수를 다루는 방법에서 약간 다른다. 사실 여러분은 내가 내장된 티클의 함수인 명령어commands를 호출하고 있었다는 것을 눈치챘을 지도 모른다. 그것은 티클에서 여러분이 타이프하는 모든 명령어들이 실제로는 함수 호출이기 때문이다. 대부분의 언어들은 for, while, if/else 등등과 같은 키워드들의 집합을 가진다. 티클은 이러한 모든 제어 키워드들을 명령어 혹은 함수들이 되도록 만든다. 이것은 우리가 내장 제어 구조를 다음과 같이 바꿀수 있도록 해주는 흥미롭고, 혼란스러우며 그리고 대단히 강력한 효과를 가지고 있다:

    set i 3
    while {$i < 10} {
        puts $i
        set i [expr $i + 1]
        }
    

    예상한 바와 같이 이것은 숫자를 3에서부터 (10보다는 1작은) 9까지 출력한다. 그러나 이제 while 명령어에 대한 우리 자신만의 버전을 정의해 보자:

    proc while {x y} {
      puts "My while now"
    }
    
    set i 3
    while {$i < 10} {
        puts $i
        set i [expr $i + 1]
        }
    
    

    이것은 단지 "My while now"라는 메시지만을 출력한다. 표현식과 명령어 연속열은 무시된다 왜냐하면 티클은 그것들을 while 함수로 보내어지는 매개변수로 취급하고 그리고 while 함수는 그것들을 예상하고 있지만 무시하기 때문이다! 그래서 여러분은 우리가 티클에서 프로시저를 어떻게 정의 하는지 볼수 있다 그리고 그것을 남용하여 어떻게 여러분이 대단히 혼란스런 프로그램을 작성할 수 있는지를 볼 수 있다. - 여러분이 충분한 이유가 없다면 그렇게 하지 마라!

    우리 자신만의 모듈을 만들기

    자 이제 우리는 우리 자신만의 함수를 만들 수 있고 이것들을 우리의 프로그램에 있는 다른 부분으로 부터 호출할 수 있다. 이점은 참 좋은 것인데 우리가 타이핑하는 수고를 덜 수 있고, 더욱 중요한 것은 우리의 프로그램을 더 쉽게 이해할수 있도록 해준다. 우리는 함수를 작성하고 난후에 그 함수가 세부사항들을 감추어 주므로 그것에 관하여 잊어 버려도 좋기 때문이다. (충분히 명백한 이유로 프로그램의 복잡한 부분들을 함수안으로 싸 넣는 원리를 정보은폐 information hiding라고 부른다.) 그러나 어떻게 우리는 이러한 함수를 다른 프로그램에서 사용할 수 있을까? 우리는 모듈을 작성한다.

    파이썬 모듈

    파이썬에서 모듈은 특별한 것이 아니다. 그것은 단지 파이썬 프로그램의 서술문으로 가득 찬 단순한 텍스트파일일 뿐이다. 보통 이러한 서술문은 함수정의이다. 그리하여 우리가 다음과 같이 타이프할 때:

    from sys import *
    

    우리는 효과적으로 sys.py의 내용을 거의 자르고 붙이기 기능과 같이, 우리의 프로그램에 복사한다. (그것(import)은 실제로 그것(copy & paste)과 같은 것은 아니지만 개념은 같다) 사실 어떤 프로그래밍 언어(C++이 대표적이다)에서 번역기는 문자그대로 모듈 파일을 현재의 프로그램에 요구된대로 단순히 복사하기만 한다.

    그래서 요약하자면, 우리가 다른 프로그램에서 다시 쓰기를 원하는 함수들을 담고 있는 파이썬 파일을 작성함으로써 우리는 모듈을 작성한다. 그리고서 우리는 단지 우리의 모듈을 표준모둘을 수입한것과 정확하게 똑 같은 방법으로 수입하기만 하면 된다. 쉽지요, 안 그런가요? 그렇게 해 보자.

    아래의 함수를 파일에 넣고서 그 파일을 timestab.py라는 이름으로 저장하라.

    def print_table(multiplier):
        print "--- Printing the %d times table ---" % multiplier
        for n in range(1,13):
            print "%d x %d = %d" % (n, multiplier, n*multiplier)
    

    이제 파이썬 프롬프트에서 타이프하라:

    >>> import timestab
    >>> timestab.print_table(12)
    

    야 빠르다! 여러분은 모듈을 작성했고 사용했다.

    중요한 주의: 여러분이 파이썬을 timestab.py가 저장된 같은 디렉토리에서 시작하지 않았다면 파이썬은 그 파일을 찾지 못하고 에러를 보고할 것이다. 그렇다면 여러분은 PYTHONPATH 라는 환경 변수를 작성하여 그 모듈을 찾기 위한 유효한 디렉토리의 목록을 담을 수 있다. (파이썬에 제공되는 표준모듈도 역시 마찬가지다)

    환경 변수를 만드는 것은 플랫폼에 따라 처리방법이 다르므로 나는 여러분이 이미 사용법을 알고 있거나 찾을 수 있다고 가정한다!

    베이직과 티클의 모듈

    베이직은 어떤가? 그것은 더욱 복잡하다.... 큐베이직과 다른 오랜 변종들에는 실제적인 모듈의 개념이 없다. 여러분은 이전의 프로젝트에서 현재의 프로젝트로 텍스트 편집기를 사용하여 수동으로 자르고 붙여야만 한다. 그렇지만 비쥬얼 베이직에서는 모듈의 개념이 있어서 여러분은 통합환경(Integrated Development Environment (IDE))의 File|Open Module... 메뉴를 통하여 모듈을 장착할 수 있다. 베이직안에서 여러분의 할 수 있는 것들의 종류에는 약간의 제한이 있다. 그러나 우리가 이 강좌에서 비쥬얼 베이직을 사용하지는 않으므로 나는 더 이상 안으로 들어가지는 않겠다. (주의 : 비쥬얼 베이직을 잘라낸 버젼이 있는데 그것은 CCE(COM Controls Edition)이라고 알려져 있으며 여러분이 시험해 보고 싶다면, 마이크로소프트 웹사이트에서 무료로 내려받을 수 있다. 또한 윈도우 98, 2000 과 IE5 모두는 VBScript라고 부르는 VB의 축약 버젼을 가지고 있다. 여러분은 .vbs로 끝나는 파일에서 그것을 사용할 수 있다.)

    마지막으로 Tcl은, 언제나와 같이(!), 모듈을 재사용한다는 것에 관해서는 약간 절충적인 , 그러나 그럼에도 불구하고 흥미있는, 길을 채택하고 있다. (또는 그것은 그것들을 라이브러리(libraries)라고 부르기를 더 좋아한다)

    가장 단순한 수준에서 여러분은 티클 함수의 파일을 작성할 수 있다. 마찬가지로 우리는 파이썬에서 그렇게 할 수 있으며 그러면, 여러분의 프로그램에서, 그 파일을 찾아 꺼낼source 수 있다. 이것은 문자 그대로 그 인터프리터에게 여러분의 파일을 읽도록 하여 주며 그 프로그램들은 사용가능하게 된다. 그러나 더 흥미있는 선택사항이 있다:

    여러분은 여러분의파일을 전술한 바와 같이 작성할 수 있으며 파일들 모두를 디렉토리/폴더에 놓고서 그리고는 mk_index 명령어를 실행할 수 있다. 이것으로 그 폴더에 있는 함수와 파일들의 모든 인덱스를 만든다. 그리고나서 여러분의 프로그램에서 여러분은 단순히 필요한 함수를 호출하고 티클 인터프리터는 그 함수가 사용가능하지 않다는 것을 알게 될 것이고 자동적으로 인덱스파일을 찾아볼 것이다. 그리고는 그것은 라이브러리부터 적절한 소스 파일을 찾아 꺼내어서 그 함수를 실행할 것이다.

    찾아지기만 하면 그 함수는 사용가능한 상태로 있어서 그와 관련된 실행 부담이 없다. 유일한 난제는 프로그래머가 같은 이름을 가진 한개 이상의 함수를 가지는 것을 피해야만 한다는 것이다. 티클의 이러한 사양은 자동로딩(autoloading)이라고 알려져 있다.

    다음으로 우리는 파일들과 텍스트 처리법을 살펴보고 그리고 나서 약속한대로 파일에서 단어를 세는 작업을 다시 방문할 것이다. 사실 우리는 우리의 편의를 위하여 계속하여 텍스트 처리함수의 모듈을 만들고 있는 것이다.

     
    기억해야 할 것
  • 함수는 모듈의 한 형태이다
  • 함수는 값을 반환하지만, 프로시저는 그렇지 않다
  • 파이썬의 모듈은 일반적으로 하나의 파일에 함수정의로 구성된다.
  • 파이썬에서는 def 키워드로 새로운 함수를 작성하라
  • 베이직에서는 SUB 혹은 FUNC를 사용하고 그리고 티클에서는 proc을 사용하라
  •  
    Previous  Next  Contents 


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