학습개요
서브프로그램은 프로그램을 구성하는 작은 프로그램이라고 볼 수 있습니다. 따라서 모듈화 프로그래밍을 지원하는 기본 기능이라고 할 수 있지요. 프로그래밍 언어의 서브프로그램 개념은 어떻게 생겨났을까? 서로 다른 프로그래밍 언어의 서브프로그램은 어떻게 다를까? 이번 강의에서는 서브프로그램의 기초 개념과 용어를 살펴보고 여러 프로그래밍 언어에서 제시되고 있는 서브프로그램의 인수 전달 방법의 차이 등을 알아봅니다. 또한 범용 서브프로그램이 어떻게 구현될 수 있는지, 이름 전달 방법을 통해 어떻게 범용 서브프로그램을 작성할 수 있는지 알아봅니다. 끝으로 협업을 지원하기 위한 기능인 분리 컴파일 및 독립 컴파일에 대해서도 알아봅니다.
학습목표
- 서브프로그램 개념과 관련 용어를 설명할 수 있다.
- 프로그래밍 언어의 다양한 인수 전달 방법을 설명할 수 있다.
- 범용 서브프로그램의 개념과 이를 지원하기 위한 방법을 설명할 수 있다.
- 분리 컴파일과 독립 컴파일의 차이를 설명할 수 있다.
정리하기
- 서브프로그램은 독자적인 입력과 출력을 갖춘 프로그램 조각으로 모듈화 프로그래밍을 지원하기 위해 기본적으로 필요한 기능이다.
- 서브프로그램으로 들어가는 입구는 일반적으로 하나인 반면 출구는 여러 곳이 될 수 있다.
- 서브프로그램은 반환값의 유무에 따라 프로시저와 함수로 분류할 수 있다. 프로그래밍 언어 개발 초기에는 반복적으로 사용되는 명령어 묶음을 서브루틴이라고 불렀다.
- 서브프로그램의 매개변수 개수, 순서, 타입을 매개변수 프로파일이라고 부르며 시그니처라고도 한다.
- 서브프로그램의 매개변수 프로파일과 함수 반환 타입을 합쳐 서브프로그램 프로토콜이라고 부른다. 정적 타입 언어의 경우 서브프로그램의 호출 전에 서브프로그램 프로토콜이 선언되어 있어야 한다.
- 외부로부터 전달될 정보를 받기 위해 서브프로그램 정의 부분에서 선언한 변수를 매개변수라 하고, 서브프로그램 호출 시 매개변수로 전달될 의도로 사용된 수식을 인수라고 한다. 매개변수를 형식인수(형식매개변수), 인수를 실인수(실매개변수)라고도 한다.
- 인수 전달의 의미적 모델로는 입력, 출력, 입출력 모드 세 가지가 있고, 개념적 모델로는 값 전달, 참조 전달이 있다. 구현 모델로는 값 전달, 결과 전달, 값-결과 전달, 참조 전달, 이름 전달이 있다.
- 입출력 모드 인수를 지원하기 위한 참조 전달은 별칭 문제를 발생시킬 수 있는데, 값-결과 전달을 이용하면 별칭 문제가 해결된다.
- 여러 용도로 가능할 수 있는 서브프로그램을 범용 서브프로그램이라고 하며 이는 다형 서브프로그램과 다목적 서브프로그램으로 구성된다.
- 모듈화 및 협업을 위해서는 분리 컴파일이나 독립 컴파일 기능이 필요하다.