프로시저와 함수의 차이

FIRE-918·2026년 4월 12일
post-thumbnail

프로시저와 함수 왜 헷갈릴까?

절차지향 프로그래밍을 공부하던 중 프로시저(Procedure)라는 용어를 접하게 되었습니다. 하나의 동작이나 행위를 묶은 개념이라고 하여 자연스럽게 “그럼 함수(Function)랑 같은 거 아닌가?”라는 생각이 들었습니다. 하지만 자료를 찾아보니 둘은 완전히 같은 개념은 아니었고 미묘하지만 중요한 차이가 존재했습니다. 이 글은 그 궁금증에서 출발해 프로시저와 함수의 차이를 정리해보려 합니다.


프로시저(Procedure)란 무엇인가

프로시저는 특정 작업을 수행하기 위해 묶어놓은 코드의 집합을 의미합니다.
쉽게 말해 하나의 행동을 정의해놓은 것이라고 볼 수 있습니다.

예를 들어 화면에 문장을 출력하거나 어떤 값을 변경하는 동작처럼 특정 기능을 실행하는 코드 덩어리가 바로 프로시저입니다.

void printHello() {
    System.out.println("Hello");
}

위 코드에서 printHello()는 “Hello를 출력한다”는 하나의 행동을 수행하는 프로시저입니다.

프로시저의 핵심은 값을 반환하는 것보다 동작을 수행하는 것에 초점이 맞춰져 있다는 점입니다.
즉, 결과를 돌려주는 것보다 어떤 일을 실행하는 것이 목적입니다.

이러한 특징 때문에 절차지향 프로그래밍에서는 여러 프로시저를 만들어두고 이를 순서대로 실행하며 프로그램의 흐름을 구성하게 됩니다.


함수(Function)란 무엇인가

Java로 코드를 작성하면서 “함수”라는 개념을 깊게 생각해본 적은 없었습니다. 실제로는 항상 “메서드”라는 용어만 사용해왔기 때문에 함수와 메서드의 차이에 대해서도 크게 고민하지 않았습니다. 그래서 처음에는 함수와 메서드가 같은 개념이라고 생각했습니다.

하지만 개념적으로 살펴보니 함수는 입력값을 받아 처리한 뒤 결과를 반환하는 것에 초점을 둔 개념이었습니다. 즉, 단순히 어떤 동작을 수행하는 것 뿐만이 아닌 값을 만들어내는 역할을 합니다.

예를 들어 두 값을 더하는 기능은 다음과 같이 표현할 수 있습니다.

int add(int a, int b) {
    return a + b;
}

이처럼 함수는 입력값을 받아 계산을 수행하고 그 결과를 반환하는 구조를 가집니다.

다만 Java에서는 이러한 형태 역시 모두 클래스 내부에 정의되기 때문에 실제로는 “함수”라는 용어보다 메서드(Method) 라는 표현을 사용하게 됩니다. 이 때문에 실무에서는 함수와 메서드의 구분이 크게 드러나지 않으며 자연스럽게 두 개념을 혼용하게 되는 경우가 많습니다.


프로시저와 함수의 핵심 차이

앞서 살펴본 것처럼 프로시저와 함수는 모두 특정 작업을 수행하는 코드의 집합이라는 공통점을 가집니다. 그렇다면 이 둘을 구분하는 기준은 무엇일까요?

가장 큰 차이는 값을 반환하느냐 에 있습니다.

프로시저는 특정 동작을 수행하는 것 자체에 목적이 있기 때문에 반드시 값을 반환할 필요는 없습니다. 반면 함수는 입력값을 받아 처리한 뒤 그 결과를 반환하는 데에 초점이 맞춰져 있습니다.

이를 코드로 비교해보면 다음과 같습니다.

void printHello() {
    System.out.println("Hello");
}
int add(int a, int b) {
    return a + b;
}

첫 번째 코드는 단순히 “Hello”를 출력하는 동작을 수행하는 프로시저이고 두 번째 코드는 두 값을 더한 결과를 반환하는 함수입니다.

함수는 값을 반환하는 프로시저라 볼 수 있어 두 번째 코드도 프로시저에도 포함이 되긴 합니다 ㅎㅎ

정리하자면 프로시저는 어떤 일을 수행하는 것, 함수는 결과 값을 만들어내는 것 에 더 초점을 둔다고 볼 수 있습니다.


Java에서는 왜 구분이 흐려질까

앞서 살펴본 것처럼 이론적으로는 프로시저와 함수가 반환값 유무에 따라 구분됩니다. 하지만 Java에서는 이러한 구분이 거의 드러나지 않습니다. 그 이유는 Java가 객체지향 프로그래밍 언어이기 때문입니다.

Java에서는 모든 동작이 반드시 클래스 내부에 정의되어야 합니다. 즉, 어떤 기능을 구현하더라도 독립적인 함수나 프로시저 형태로 존재할 수 없고 항상 특정 클래스에 속한 형태로 작성됩니다.

class Calculator {
    void printHello() {   // 프로시저 st
        System.out.println("Hello");
    }

    int add(int a, int b) {  // 함수 st
        return a + b;
    }
}

위 코드에서 printHello와 add는 각각 프로시저와 함수의 특징을 가지고 있지만 Java에서는 둘 다 단순히 메서드(Method)로 취급됩니다.

이처럼 Java에서는 반환값이 있는 경우와 없는 경우 모두를 하나의 개념으로 묶어 메서드라고 부르기 때문에 프로시저와 함수의 구분이 자연스럽게 흐려지게 됩니다.

결국 Java에서는 함수냐 프로시저냐를 구분하는 것보다,
“이 메서드가 어떤 객체의 책임인가” 를 고민하는 것이 더 중요해집니다.


그래서 절차지향에서 프로시저란?

지금까지 내용을 정리해보면 절차지향 프로그래밍에서의 프로시저는 프로그램의 흐름을 구성하는 기본 단위라 할 수 있습니다.

절차지향에서는 프로그램을 하나의 큰 흐름으로 보고 이를 여러 개의 프로시저로 나눈 뒤 순서대로 실행하는 방식으로 동작합니다. 즉, 각 프로시저는 특정 기능(행동) 을 담당하고 이들이 모여 전체 로직을 구성하게 됩니다.

예를 들어 다음과 같은 구조를 생각해볼 수 있습니다.

checkBalance();
withdraw(500);
checkBalance();

이처럼 절차지향에서는 “무엇을 할 것인가”를 순서대로 나열하고 각각의 프로시저를 호출하면서 프로그램이 진행됩니다.

또한 중요한 특징은 이러한 프로시저들이 데이터와 분리되어 독립적으로 존재한다는 점입니다.
즉, 데이터를 중심으로 묶는 것이 아니라 동작(프로시저)의 흐름을 중심으로 프로그램이 구성됩니다.

결국 절차지향에서 프로시저란 단순한 함수가 아니라 프로그램의 흐름을 이루는 실행 단위이며 이들을 어떤 순서로 호출하느냐가 프로그램의 핵심이 됩니다.


정리하며

이번 글은 절차지향 프로그래밍을 공부하는 과정에서 등장한 “프로시저”라는 개념에 대한 궁금증에서 시작되었습니다. 처음에는 함수와 같은 개념이라고 생각했지만 살펴보면서 두 개념 사이에는 분명한 차이가 있다는 것을 알게 되었습니다.

프로시저는 특정 동작을 수행하는 데 초점을 둔 개념이고 함수는 값을 반환하는 데 초점을 둔 개념입니다. 다만 Java와 같은 객체지향 언어에서는 이러한 구분이 크게 드러나지 않고 모든 기능이 메서드라는 형태로 통합되어 사용됩니다.

또한 메서드는 객체에 속한 동작인 반면 프로시저는 독립적으로 존재하는 동작이라는 차이가 있습니다.

결국 중요한 것은 용어의 차이 자체보다는
프로그램을 어떤 기준으로 나누고 설계하느냐에 있습니다.

절차지향에서는 프로시저를 중심으로 흐름을 구성하고
객체지향에서는 객체와 그 안의 메서드를 중심으로 역할을 나누게 됩니다.

이러한 관점의 차이를 이해하는 것이 이후 객체지향 설계나 구조를 학습하는 데 중요한 기반이 된다고 생각합니다.

profile
학습한 내용을 기록하고 공유하며 함께 성장하는 백엔드 개발자입니다.

0개의 댓글