함수


프로그램은 개발자가 한 줄씩 코드를 에디터에 작성하면서 실행과 테스트를 반복합니다. 이렇게 작성된 절차적 프로그램들은 첫 줄부터 순차적으로 해석하여 실행하게 되고 결과를 화면에 출력하게 됩니다.

간단하게 몇 줄의 기능으로만 처리가 가능하다면 기존 방식과 같은 절차적 순서로 작성이 가능할 수도 있을 것입니다. 하지만 본격적으로 실전 기능을 개발하게 되면 프로그램의 기능들은 구체적이고, 복잡하게 되고 또한 소스 코드도 길어지는 현상이 발생합니다. 심지어 중복된 코드와 기능이 발견되기도 합니다.

한 개의 파일 안에 모든 내용을 절차적으로 작성하는 것은 유지보수와 코드의 효율적인 측면에서는 적합한 개발 방법론이 아닐 수 있습니다. 한 개의 수정을 위해서 소스 코드를 전반적으로 수정해야만 하는 불편함이 있고, 소스의 기능들을 한눈에 구분하여 처리할 수도 없을 것입니다.

이는 마치 컴퓨터에서 폴더를 사용하지 않고 모든 파일을 관리하는 것과 같습니다. 따라서 대부분의 언어들은 컴퓨터의 폴더와 같이 함수라는 기능을 지원합니다. 함수는 코드들을 그룹화하고 중복된 내용들을 함수 코드로 재사용함으로써 코드의 유지보수와 개발 과정을 편리하게 사용할 수 있는 소프트웨어 공학적인 컨셉입니다.


함수란?

함수는 코드의 중복된 내용들을 하나의 블록으로 분리하는 작업 과정입니다.
또한 분리된 함수들은 다시 사용할 수 있도록 포장하는 과정이라고 이해하면 쉽습니다.

이렇게 코드들은 함수화 같은 분리 작업을 통해 중복된 소스의 크기를 줄일 수 있는 장점도 있습니다. 또한 이러한 함수형 코드 개발 방법론은 소프트웨어를 고도화함으로써 보다 유지보수가 편리해지고 성능도 향상될 수 있습니다.

대부분의 프로그램은 함수의 집합으로 동작을 합니다. 따라서 어떠한 언어를 통해 프로그램을 개발하기 위해서는 함수의 사용법은 반드시 알아야 하는 필수 프로그램 기법입니다.

함수는 크게 두 가지 종류로 구분할 수 있습니다. 내장 함수, 사용자 정의 함수입니다. 내장 함수는 프로그램 자체적으로 제공되는 기본 함수로 프로그램 언어가 소스 코드를 개발하는 데 필요한 기초적인 기능을 함수화하여 제공합니다.

내장 함수는 언어의 참고 레퍼런스를 통해 찾아볼 수 있습니다. 사용자 정의 함수는 기본적으로 언어에서 제공하는 함수 이외에 자신만의 처리 로직 및 여러 함수의 집합을 사용자가 임의적으로 만들어 사용하는 함수를 말합니다.

함수는 하나의 블랙박스와 같습니다. 값을 입력하면 데이터를 처리하거나 처리한 결과의 값을 출력합니다. 함수는 또 다른 함수를 실행을 할 수 있습니다. 함수의 계층적인 실행으로 먹이사슬처럼 작은 함수들을 먼저 만들고 이를 이용한 좀 더 큰 함수, 그보다 좀 더 큰 함수 형태로 만들어 갑니다. 이러한 과정을 최적화한다고 표현하기도 합니다.