* 본포스팅은 <김변수와 시작하는 코딩생활 with C언어>에서 발췌한 내용으로 작성되었습니다.
✔ 함수란 무엇인가?
함수(Function)는 한 번 이해하고 나면 쉽고 편리한 기능이지만 처음 접할 때는 어려운 개념입니다. C언어에서는 코드의 흐름이 함수의 연속이라고 볼 수 있습니다. 즉, 함수를 명확히 이해하는 것이 코드의 흐름을 이해할 수 있는 것입니다. 이번 챕터에서는 함수의 개념과 더불어 함수를 사용하는 방법을 알아보겠습니다.
함수는 우리가 원하는 기능을 모아 둔 코드 덩어리입니다. 함수에 어떤 값을 입력했을 때 미리 작성해둔 코드 덩어리가 실행되고 결과가 출력되는 형태이죠. 함수의 형태는 아래와 같습니다.
위 예시처럼 우리가 함수에 어떤 값을 넣으면 함수 안에서 작업이 이루어지고 그 결과를 반환하는 것이 함수의 기본적인 형태입니다. 하지만 경우에 따라 매개변수나 반환값 없이 사용되는 함수도 있습니다. 반환값이 없는 함수는 void라는 자료형을 가지며, 다른 함수와 달리 반환하는 값이 존재하지 않습니다. void 함수는 return이 없는 형태라고 간단하게 이해하고 넘어가도 괜찮습니다.
그렇다면 main도 함수인가요? 맞습니다. 코드 5-1-1을 보면 main도 반환 자료형, 함수 이름, 매개변수, 실행문, 반환값 등 함수의 조건을 잘 갖추고 있습니다. C언어에서 main 함수는 코드(프로그램)가 실행될 때 가장 처음으로 한 번 작동(호출)되는 함수입니다. 따라서 C언어 코드에서 main 함수는 반드시 있어야 하며, 두 번 이상 작성되면 안 됩니다. |
처음부터 매개변수와 반환값 모두 사용하는 함수를 이해하기는 조금 어려울 것입니다. 그러니 먼저매개변수와 반환값이 없는 간단한 함수를 살펴보며 함수의 기초 개념에 대해 더 알아보겠습니다.
→ 3번 줄: 아래에서 정의한 printHello 함수를 컴파일러에게 알려 주기 위해 함수를 선언합니다.
→ 6번 줄: printHello 함수를 호출합니다.
→ 11~13번 줄: printHello라는 이름을 가진 함수를 정의합니다. void는 반환값이 없는 함수를 의미합니다.
[코드 5-1-1]에서 printHello 함수의 이름을 3번, 6번, 11번 줄에서 작성한 것을 볼 수 있습니다. 이 세 부분은 각각 함수 선언, 호출, 정의라는 서로 다른 역할을 합니다. 함수 선언은 컴퓨터에게 이 함수의 존재를 알리고, 함수 호출은 해당 함수를 불러와 실행되게 합니다. 그리고 함수 정의는 해당 함수가 수행할 내용을 담고 있습니다. 각각의 코드를 간단히 정리하자면 다음과 같습니다.
함수 정의는 함수의 본체 코드라고 볼 수 있습니다. 이 부분에서는 실제로 이 함수를 통해 동작하는 기능에 관한 코드를 작성합니다. 이와 다르게 함수 선언은 이러한 내용을 제외한 채 해당 함수의 이름과 매개변수만을 포함하는 코드입니다.
[코드 5-1-1]의 3번 줄처럼 main 함수 위에 이 함수를 선언하는 이유는 C언어가 위에서부터 코드를 차례차례 읽는 ‘절차지향’ 언어이기 때문입니다. 절차지향 언어란, 프로그램을 일련의 절차나 순서로 구성하여 작성하는 방식을 말합니다. C언어의 컴파일러는 코드의 윗부분부터 차례대로 코드를 읽는 방식을 사용하는 대표적인 절차지향 프로그래밍 언어입니다. 따라서 우리가 정의한 함수를 사용하기 위해서는 main 함수 이전에 먼저 이 함수의 존재를 알려 주어야 합니다.
만약 main 함수 앞에 함수를 선언해 주지 않으면 어떻게 될까요? 여러분도 쉽게 예상할 수 있듯 에러가 납니다. 코드 예시를 통해 살펴보겠습니다.
[코드 5-1-2]의 9번 줄에서 printHello 함수를 분명히 정의했음에도 불구하고 에러가 발생합니다. 왜일까요? 앞서 말한 것처럼 C언어는 절차지향 언어입니다. 위에서 아래로 코드를 읽으며 main 함수를 가장 먼저 실행하기 때문에 [코드 5-1-2]에서 main 함수보다 아래에 있는 printHello 함수의 존재를 알 수 없습니다. 따라서 함수의 이름을 미리 선언하여 컴퓨터가 printHello 함수의 존재 여부를 알 수 있게 해 주어야 오류가 발생하지 않습니다.
선언을 통해서만 함수의 존재를 알릴 수 있나요? 함수 정의를 main 함수 위에 써서 존재를 알리는 건 안 되나요? 가능합니다. C언어에서는 함수를 선언하지 않고 함수 정의만 main 함수 위에 적어도 코드가 정상적으로 동작합니다. 하지만 코드 가독성을 고려하면 함수 선언은 main 함수 위에, 함수 정의는 main 함수 아래에 해 두는 게 좋습니다. 이와 관련된 내용은 바로 뒤에 이어서 살펴볼 것입니다. |
이번에는 지금까지 살펴본 것과 다르게 main 함수 위에 함수를 정의한 코드 예시를 살펴보겠습니다.
[코드 5-1-3]에서는 함수 선언 없이 정의만으로도 코드가 정상 실행되는 것을 볼 수 있습니다. 이는 C언어 컴파일러가 main 함수까지 차례차례 코드를 읽는 과정에서 이미 printHello 함수를 확인했기 때문입니다. 이와 같이 함수를 작성하는 경우 함수의 이름을 한 번만 작성해도 문제가 없다는 장점이 있습니다. 하지만 main 함수 안에서 사용하는 함수가 다양해질수록 그 목록을 한눈에 알아보기 어렵다는 단점이 있습니다. 다음 두 그림을 보며 어떤 코드가 읽기 쉬운 코드인지 생각해 보세요.
위 그림에서 볼 수 있듯이 함수를 선언해 두면 이 코드로 어떤 기능들을 수행할지 미리 파악할 수 있습니다. 즉 함수 선언은 사용자의 코드 이해도를 높이는 데 기여하는 중요한 요소입니다.
《김변수와 시작하는 코딩생활 with C언어》
'IT 정보' 카테고리의 다른 글
[C 언어] 매개변수와 반환값을 사용하는 함수 (1) | 2024.06.10 |
---|---|
[파워오토메이트] Power Automate 업무 활용 사례 (0) | 2024.05.14 |
[파워오토메이트] Power Automate 구성 요소 (0) | 2024.05.13 |