서브프로그램의 뜻과 공통 특성

함수를 부르면 프로그램 안에서는 무슨 일이 일어날까?

화면을 누르면 다음 장으로 넘어갑니다

두 가지 추상화

속은 감추고 이름으로 씁니다

프로그래밍 언어의 기본 추상화는 둘입니다. 계산 절차를 이름 하나로 묶는 프로세스 추상화(process abstraction)와, 데이터와 그 연산을 한데 묶는 데이터 추상화(data abstraction)입니다.

추상화는 속을 몰라도 이름만으로 쓰게 하는 것입니다(1강). sort, push, pop은 예시로 든 이름입니다.

서브프로그램

한 번 정의하고 여러 번 부릅니다

서브프로그램(subprogram)은 계산 절차를 하나의 단위로 정의해 두고 필요할 때 실행하는 구조입니다. 프로세스 추상화를 구현하는 대표 수단입니다. 흔히 쓰는 함수가 서브프로그램의 한 종류입니다.

예시 코드입니다. average는 평균을 구하는 서브프로그램에 붙인 이름입니다.

호출과 반환

넘어갔다가 돌아옵니다

호출(call)은 서브프로그램을 실행해 달라는 요청입니다. 실행은 서브프로그램으로 넘어갔다가, 끝나면 호출 바로 다음 자리로 돌아옵니다. 노란 세모가 지금 실행 중인 줄입니다.

C로 적은 예시 코드입니다. void work()는 work라는 서브프로그램을 정의한다는 뜻이고, 점 세 개는 줄인 문장입니다.

공통 특성 셋

이 세 가지는 어느 언어나 같습니다

서브프로그램은 실행을 시작하는 자리인 진입점(entry point)이 하나입니다. 부른 쪽은 서브프로그램이 도는 동안 멈춰 있습니다. 서브프로그램이 끝나면 제어는 언제나 부른 쪽으로 돌아옵니다.

제어(control)는 지금 어디를 실행하는지를 말합니다. 붉은 가위표는 그 줄로는 들어갈 수 없다는 표시입니다.

프로시저와 함수

일을 시키거나, 값을 받아 오거나

서브프로그램은 두 갈래입니다. 프로시저(procedure)는 계산을 수행하는 문장들의 묶음이고 값을 돌려주지 않습니다. 함수(function)는 생김새는 비슷하지만 수학의 함수를 본떠 값 하나를 돌려줍니다.

예시 코드입니다. sort는 list를 작은 수부터 늘어놓고, square(4)는 4를 두 번 곱한 16을 돌려줍니다.

함수와 부작용

함수는 값만 돌려주면 좋겠지만

수학의 함수는 값을 돌려줄 뿐 다른 것을 바꾸지 않습니다. 함수가 자기 밖의 변수를 바꾸는 것을 부작용(side effect)이라고 합니다. 함수에는 부작용이 없기를 기대하지만, 실제 언어의 함수는 부작용이 있는 경우가 많습니다.

g와 값 10, 20은 예시입니다. 매개변수는 함수가 값을 넘겨받는 변수이고, 다음 편에서 자세히 봅니다.

다음 편

부르려면 이름과 넘길 값을 알아야 합니다. 그것은 첫 줄에 적혀 있습니다

2편함수의 첫 줄에는 무엇이 적혀 있을까? 8강 목록