2.4 함수


자연과 인공 시스템은 종종 함께 작동되는 특별한 부품을 포함한 구조를 가지고 있다. 단순한 생물체라도 다른 생물체의 부분과 상호 작용하는 명확한 핵을 가지고 있다. 다양하게 고도로 특화된 조직의 수준 높은 생물에서는, 각각의 조직들이 적어도 몇 개의 다른 조직들과 상호작용하며 특정한 기능을 수행한다. 인간에게 심장과 폐는 서로 각각 매우 다르며 각각 다른 특정한 목적을 가지고 있다. 그들은 몸 전체에 산소가 농축된 혈액을 발송하기 위하여 상호 작용한다. 인공 시스템은 이와 같은 조직화의 원리를 이용하고 있다. 자동차는 자동차의 바퀴에 동력을 제공하기 위해 기계적으로 매우 다르지만 상호 작용하는 엔진과 변속기를 가지고 있다.

 

프로그래머는 소프트웨어 시스템이 원하는 기능을 작성하기 위해 특정 방법으로 상호 작용하는 함수라고 하는 특수한 부분을 만들 수 있는 아이디어를 이용한다. 함수 사용의 장점은 다음과 같다.

  • 명료화 - 비교적 작은 프로그램에서 조차도 원시 코드를 처음 보는 사람에게는 프로그램이 무엇을 하고 있는지를 이해하는 것은 쉽지 않다. 이 작업은 수백만 혹은 수백만 라인으로 측정되어진 프로그램에서는 불가능할 정도로 어렵다. 유일한 희망은 상호 작용 부분의 구조를 제공함으로 전체적인 구조를 이해하게 하고, 각 부분에 대한 이해를 통합하여 전체를 이해하도록 하는 것이다.
  • 프로그램 내부에서의 재사용 - 지정된 프로그램에서, 동일한 작업은 코드의 다른 곳에서 필요할 수 있다. 나중에 볼 것이지만 어떤 일련의 작업을 수행하는 모듈이 있으면 유사한 일련의 작업을 위해서 해당 모듈이 다시 사용될 수 있다. 일련의 모듈화 된 동작을 수행하는 부분을 갖는 것은 그것이 필요로 되는 모든 곳에서 동작(코드)의 문장을 반복하는 것을 방지 할 수 있다.
  • 다른 프로그램에서의 재사용 - 하나의 프로그램을 위해 개발 된 하나의 모듈은 그 모듈이 제공하는 유사한 기능을 필요로 하는 다른 프로그램에서 사용될 수 있다. 이것은 쉽게 기존의 부분에서 새로운 프로그램을 개발할 수 있다. 많은 소프트웨어 시스템은 매우 재사용 가능한 구성 요소의 "라이브러리"에 의존하고 있다.
  • 개선을 위한 대체 - 상호 작용의 시스템에서, 심장 이식이나 혹은 차를 위해 새로운 타이어를 얻는 것이든 하나의 부분을 "더 나은"부분으로 대체할 수 있다. 소프트웨어 시스템에서 한 모듈은 이전 버전(즉, 이전 버전에서는 몇 가지 버그가 수정 되어졌다.) 보다 신뢰성이 높은 것으로 빠르게 대체되어지거나 혹은 더 효율적(즉, 빠르게 실행된다.)일 수 있다.
  • 변경을 위한 대체 - 기능은 종종 특정 작업을 요약한다. (예를 들면, 섭씨에서 화씨 온도 전환) 현재 함수에 의해 수행되는 작업을 변경하려는 경우에는 (예를 들어, 화씨 온도를 켈빈 스케일 온도에 해당되게 변환) 함수 자체를 변경을 할 수 있으며, 이 변화는 함수를 사용할 때마다 "자동"으로 실행되어질 것이다.
  • 구축 - 조립 라인은 많은 노동자가 개별 조립 공정의 여러 단계에서 한대 차량의 조립에 포함되어 질 수 있기 때문에 자동차를 구축하기 위한 효율적인 방법이다. 부분적으로 완성된 자동차가 조립 라인을 아래로 이동하면, 자동차가 완료 될 때까지 새로운 부품이 추가된다. 마찬가지로, 대규모 프로그램의 구조는 많은 프로그래머의 작업을 포함한다. 효율적인 작업 구성을 위해, 다른 프로그래머들은 시스템의 다른 부분을 구성하기 위해 할당되어 진다. 이 부분은 다음 전체 시스템을 만들기 위해 구성되어 있다.

 

특정 부분 중 소프트웨어 시스템을 프로그래밍의 개념을 활용하기 위해, 이러한 부분을 정의하는 방법과 그들을 연결하는 방법을 배울 필요가 있다.

함수는 프로그램의 기본적인 빌딩 블록에 주어진 이름이다. 컴퓨터과학세계에서 함수는 "프로시저"또는 "서브 루틴"라고 부를 수 있다. 함수의 핵심 요소는 다음과 같다:

  • 이름 - 각 함수는 고유 한 이름을 가지고 있다.
  • 본체 - 각 함수는 기능에 의해 실행되는 코드의 본체를 가지고 있다.

 

각 프로그래밍 언어는 함수를 정의하기 위한 독자적인 구문을 가지게 된다. NetLogo에서 함수는 다음과 같이 지정되어 있다:

to name

  body

end

 

'to'키워드는 함수의 시작을 나타내는데 사용되고 'end'키워드는 함수 정의의 종료를 나타낸다.
NetLogo에서 함수 이름은 동사(동작을 나타내는)로 "이름"이라는 표현은 종종 읽을 수 있다. 예를 들어, 간단한 생태 모델은 "move - turtles"와 "eat - grass"로 명시된 함수을 가지고 있다. 그래서 코드를 "거북이를 움직이려면, 이것을 해라." 그리고 "잔디를 먹으려면, 이것을 해라."로 읽는 것은 의미가 있다.

간단한 생태 모델에서 NetLogo 함수의 예로 &move-turtles& 함수는 다음과 같이 정의 된다:

; rule for a turtle to move

to move-turtles

  ask turtles [         ; apply this rule to all turtles one at a time

    right random 360

    forward 1

    set energy energy - 1

    set age age + 1

  ]

end

 

반복을 설명하는 부분에서 이전의 "body"를 봤다. 여기서 볼 수 있는 유일한 새로운 것은 반복에 대한 코드를 "move-turtles" 이름으로 함수를 정의하는 방법이다. 함수의 시작을 "to"로 종료를 "end"로 정의하는 것을 주의해야 한다. - "to"와 "end" 사이의 모든 것이 함수의 내용이다.

실제로 함수로 정의된 작업을 실행하려면, 함수는 "호출" 해야한다. 함수가 호출 될 때마다 함수에 의해 정의된 동작은 실행된다. NetLogo에서, 함수는 작성된 함수 이름으로 간단하게 호출하면 된다. 예를 들어, "down" 상태에서 "Go"버튼을 눌렀을 때 실행되는 코드이다.

; the actions to be taken when the Go button is "down"


to Go

  if ticks >= 500 [stop]

  move-turtles              ; call/invoke the move-turtles function

  eat-grass

  reproduce

  check-death

  regrow-grass

  tick

end

 

이 코드에서 볼 수 있는 중요한 것은 "move-turtles" 함수를 호출하는 것은 함수 이름을 한 줄의 코드로 작성하는 것만큼 간단하다. 여러 가지 다른 함수를 호출하는 것 또한 볼 수 있다: “eat-grass”, “reproduce”, “check-death”, 그리고 “regrow-grass”. 다음은 모델 제작자에 의해 정의되는 모든 함수이다. 또한 "tick"과 "stop" 함수의 경우이지만 이미 NetLogo 제작자에 의해 구현되어 있다.

위의 코드는 하나의 함수가 여러 개의 함수를 호출할 수 있는 소프트웨어의 중요한 측면을 나타낸다. "Go" 함수는 "move-turtle"함수와 다른 함수들을 호출한다. 프로그램이 더욱 더 커지면서 함수가 어떤 함수들을 호출하지는 보여지기 위한 "호출 그래프" 그리는 것인 일반적이다. 간단한 생태학적 모델에 대한 호출 그래프는 다음 그림에 나와 있다.


../_images/CT-Class-Model-Call-Graph.png
그림 2-35. A Call Graph

 

호출 그래프는 프로그램의 계층적 구조도를 제공한다. 호출 그래프의 목적은 시스템의 일부분들이 서로 어떻게 연관되는지 보여주는 물리적 시스템의 다이어그램의 사용과 유사하다. 예를 들어, 아래의 그림은 가구 부품의 부분들 사이의 관계 정보를 나타낸다.


../_images/Exploding-Diagram.png
그림 2-36. An Exploding Diagram

 

만약 소프트웨어 개발에 대해 더 배운다면, 거대한 시스템에 대한 호출 그래프는 위 그림에서 본 간단한 시스템보다 훨씬 복잡하다는 것을 볼 수 있을 것이다. 또한 프로그래머가 시스템의 구성 방법을 이해하는 데 도움이 되는 프로그램의 구조의 다른 그래픽 표현이 있는 것을 볼 수 있을 것이다.

 

Multiple Choice 다음 중 함수에 장점에 관한 설명으로 옳지 않은 것은?




 

Multiple Choice
to move-turtles   ----------------------------------------1)

  ask turtles {         ; apply this rule to all turtles one at a time—2)

    right random 360  ------------------------------------3)

    forward 1   -----------------------------------------4)

    set energy energy – 1 ---------------------------------5)

    set age age + 1  -------------------------------------6)

  }  ---------------------------------------------------7)

end ---------------------------------------------------8)
함수의 이름은 ‘move-turtles’ 이다.


 

Multiple Choice
to move-turtles   ----------------------------------------1)

  ask turtles {         ; apply this rule to all turtles one at a time—2)

    right random 360  ------------------------------------3)

    forward 1   -----------------------------------------4)

    set energy energy – 1 ---------------------------------5)

    set age age + 1  -------------------------------------6)

  }  ---------------------------------------------------7)

end ---------------------------------------------------8)
함수의 body는 3)~6)까지이다.


 

Multiple Choice 위와 같이 정의된 함수의 작업을 실행하려면 반드시 ‘호출’을 해야 한다.


 

Multiple Choice 함수 정의 안에 다른 함수들의 호출문을 적어서 하나의 함수가 여러 개의 함수를 호출하는 것이 가능하다.


Leave a Reply

Your email address will not be published. Required fields are marked *

*