
프로그램에 대해 이야기할 때, 함수와 메서드 그리고 프로시저란 용어를 혼용하여 사용한다.
소통하는 데에 큰 무리가 있던 적은 없을 수 있겠지만 세 용어의 의미를 확실히 정립해보자.

함수는 프로그래밍 관점과 수학적 관점에서 그 의미를 나눌 수 있다.
프로그래밍 관점에서는 함수와 메서드의 개념으로 나누어 설명할 수 있다.
프로그래밍 관점에서의 함수란 독립적인 존재로써 클래스와 연관이 없는 로직을 의미한다.
객체 지향 언어가 아니라면 메서드가 아닌 함수라고 정의할 수 있다.
객체 지향 언어라도 클래스와 연관이 없다면 함수이다.
자바의 경우에는 객체 지향 언어라고 하더라도
모든 메서드가 클래스와 연관되어 있기 때문에 함수라고 정의하기 어렵지만
static으로 선언한 메서드가 함수처럼 동작한다고 볼 수 있다.
뒤에서 설명하는 프로시저와 대비되는 함수는 값을 반드시 반환해야 하지만,
프로그래밍 관점에서 함수는 void, 즉 값을 반환하지 않을 수도 있다.
메서드란 클래스 내부에 존재하는 함수를 의미한다.
독립적인 존재인 함수와는 대조되어 클래스에 종속적인 관계를 가지고 있다.
자바에서는 Class.method(parameter) 형태로 호출할 수 있다.

수학적 관점에서는 함수와 프로시저로 개념으로 나누어 설명할 수 있다.
수학적 관점에서 함수란, 값을 반드시 반환하는 계산을 의미한다.
값을 반환하지 않을 수도 있는 프로그래밍 관점에서의 함수와 의미가 대조된다.
프로시저란, 값을 반환하는 것이 필수가 아닌 계산을 의미한다.

사용하는 사람마다 함수, 메서드, 프로시저의 의미가 모호할 수 있다.
정확한 의미를 이해하고 상황에 따라 적절한 단어를 선택하여 소통하는 것이 중요하지 않을까.
각 의미가 담긴 메시지를 명확히 파악해서 사용하도록 하자.