기본 정의
함수의 첫 줄만 보고 알 수 있는 것은 무엇일까?
서브프로그램 정의
부르는 법과 하는 일을 적습니다
서브프로그램 정의(subprogram definition)는 서브프로그램의 인터페이스와 동작을 적은 것입니다. 인터페이스는 부르는 쪽과 맞닿는 부분입니다.
C로 적은 예시 코드입니다. add는 정수(int) 둘을 받아 더한 값을 돌려줍니다.
헤더
정의의 첫 부분이 헤더입니다
정의의 첫 부분이 헤더(header)입니다. 서브프로그램의 종류, 이름, 그리고 넘겨받을 값의 자리인 형식 매개변수가 여기에 적힙니다.
예시 코드입니다. C에는 서브프로그램임을 알리는 낱말이 따로 없고, void는 돌려주는 값이 없다는 뜻입니다.
형식 매개변수와 실 매개변수
자리와, 그 자리에 들어갈 값
형식 매개변수(formal parameter)는 헤더에 적어 두고 서브프로그램 안에서 쓰는 임시 변수입니다. 실 매개변수(actual parameter)는 호출문에 적는 실제 값이나 주소입니다.
실 매개변수는 인자라고도 부릅니다. 주소는 메모리 칸의 위치를 나타내는 번호입니다(5강).
매개변수 프로파일과 프로토콜
몇 개를, 어떤 순서와 타입으로
매개변수의 수, 순서, 타입을 묶어 매개변수 프로파일(parameter profile)이라고 합니다. 시그니처(signature)라고도 합니다. 함수라면 여기에 반환 타입을 더한 것이 프로토콜(protocol)입니다.
예시 코드입니다. 타입은 값의 종류이고, 반환 타입은 함수가 돌려주는 값의 타입입니다. double은 소수 타입입니다.
선언과 정의
본체 없이 프로토콜만 알립니다
서브프로그램 선언(declaration)은 본체 없이 프로토콜만 알려 줍니다. C와 C++에서는 함수 선언을 프로토타입(prototype)이라고 부릅니다.
본체(body)는 실행되는 문장들입니다. 프로토콜은 어떤 호출이 허용되는지 가리는 데 쓰입니다.
언어마다 다른 점 ①
파이썬의 정의는 실행되는 문장
파이썬에서는 함수 정의가 실행되는 문장입니다. def 문이 실행되는 그때 함수가 만들어집니다. 다른 언어에서는 정의가 실행되지 않는 선언입니다.
예시 코드입니다. fast는 참이나 거짓이 든 변수이고, # 뒤는 설명입니다. 노란 세모는 실행 중인 줄입니다.
언어마다 다른 점 ②
루비와 Lua의 함수
루비에서는 함수를 클래스 밖에도 정의할 수 있습니다. 그러면 Object의 메서드가 되어 객체 없이 함수처럼 부릅니다. Lua에서는 모든 함수가 이름 없는 익명 함수(anonymous function)입니다.
클래스는 객체의 틀, 객체는 값과 기능을 묶은 덩어리, 메서드는 클래스에 딸린 함수입니다. 예시 코드입니다.
다음 편