어느덧 벌써 포스팅이 여기까지 왔네요.
저번 포스팅에서 말했던 대로 [함수]에 관한 내용을 적어보도록 하겠습니다.
사실상, 여기까지 C를 공부하시면 기초적인 내용은 모두 학습하셨습니다.
저도 어서 빨리 포스팅하고 싶어지네요.
목차
함수(function)란 무엇일까?
함수는 동작의 덩어리입니다.
프로그램에 함수를 이용하게 해달라고 호출하면, 프로그램은 미리 작성되어 있던 함수에서 동작을 수행하게 됩니다.
함수의 조금 더 엄밀하게 정의해보면
함수는 어떠한 목적에 맞도록 독립적으로 구성된 프로그램 코드의 집합이다.
가 되겠습니다.
프로그램의 모든 구동 부분을 담당했던 main 또한 함수이며,
문자열의 입출력에 사용된 printf도 함수라고 볼 수 있습니다.
함수의 특징
함수를 사용하면 다음과 같은 특징을 가질 수 있게 됩니다.
1. 코드가 간결해짐. 반복되는 프로그램 코드를 하나의 함수로 묶어 사용하게 되면 코드가 매우 간결해지게 됩니다.
2. 재사용이 용이해짐. 잘 만들어지고, 자주 쓰일 함수는 후에 다른 프로젝트의 개발에서도 쓸 수 있습니다.
3. 가독성이 좋아짐. 논리적으로 잘 작성된 함수는 동작을 하나의 이름으로 표현하기 때문에 가독성이 좋아지게 됩니다.
4. 유지보수의 장점. 디버깅 혹은 수정에 있어서 잘 작성된 함수는 편리하게 이를 수행할 수 있습니다.
5. 모듈화 가능. 비슷한 기능을 가진 함수들을 묶어 모듈화하면 위의 장점을 훨씬 극대화할 수 있습니다.
이러한 장점을 가지기 때문에, 프로그래밍을 조금 해 본 사람들은 조금이라도 중복되는 프로그램 코드는 함수로 만들어 사용하는 연습을 권고합니다.
저 같은 경우, 중복되지 않더라도 하나의 목적을 가지고 수행되는 프로그램 코드의 집합은 함수로 만들어 사용합니다.
함수를 만들어보자!
함수도 변수와 마찬가지로 사용한다고 해서 컴퓨터가 알아서 이를 뚝딱 만들어서 제공하는 것이 아니겠지요?
함수를 사용하기 위해서는 함수를 선언하여 프로그램에 "이러이러한 기능을 하는 함수를 만들 거야"라는 것을 알려주어야 합니다.
다음과 같은 형식을 통해 함수를 선언합니다.
(함수의 타입) (함수의 이름) () {
(내용)
}
사실 여러분은 이미 함수 선언을 했었죠?
Main 함수의 형식과 같습니다.
int main() {
// codes
}
이 형식은 Main 함수를 지정해주는 형식입니다.
저번 변수 강의에서 변수의 타입에서 쓸 수 있는 타입들을 함수의 타입에도 쓸 수 있다고 말씀드렸습니다.
정수형, 실수형, 문자형 등 다양한 자료형이 있다고 말씀드렸습니다.
(자료형과 타입은 같은 말로 쓰였습니다. 먼저 이야기 해야 했는데, 죄송합니다.)
혹시 기억나지 않으시는 분은 아래의 링크를 참고해주세요!
2022.12.29 - [IT/C and C++] - [C] 변수란 무엇이고, 어떻게 사용하나요?
[C] 변수란 무엇이고, 어떻게 사용하나요?
저번 포스팅까지는 Visual Studio와 C를 활용한 간단한 실습을 진행하였습니다. 혹시 궁금하신 분들은 아래의 포스팅들을 참고해주세요! 2022.12.29 - [IT/C and C++] - [C]프로그래밍을 시작하는 방법 [C]프
timemory.tistory.com
변수와 마찬가지로 함수의 이름에도 규칙이 있습니다. 위의 포스팅에 [변수의 이름] 부분에 자세히 설명되어있으니, 참고해주시면 됩니다.
함수의 기본적인 선언 방법을 알아보았으니 함수의 기능을 설정해봅시다.
함수의 블록(범위)인 { } 안에 실행하고자 하는 프로그램 코드를 작성하는 것으로 함수의 기능을 설정하는 것이 가능합니다.
예제를 통해서 자세히 보도록 하겠습니다.
#include <stdio.h>
void printing() {
printf("function printing..\n");
printf("success!\n");
}
int main() {
printing();
}
printing 함수를 선언하고, printf를 이용해서 "function printing.."과 "success!"를 출력하게 되어있습니다.
또한, main 함수에서 printing 함수를 사용했습니다. (이를 함수를 호출한다고 합니다.)
이에 따라서 결과적으로 위의 문장들이 출력되게 되는 형식입니다.
함수의 자료형이 void로 되어있는 것은 당장에는 무시해주세요!
다음 포스팅인 [함수란 무엇이고, 어떻게 사용하나요? (2/2)]에서 다룰 예정입니다.
함수 선언의 위치
함수 선언에도 위치가 있습니다.
프로그래밍 언어는 순서를 지키는 것을 엄격하게 관리하기 때문입니다.
함수는 선 선언 후 호출이 규칙입니다. 변수도 선 선언 후 호출입니다.
변수 파트에서는 이야기하지 않고, 함수 파트에서 이야기하는 이유는 함수에서 주로 이러한 실수가 일어나기 때문입니다.
변수 같은 경우에는 개념 자체가 명확히 잡혀있어서 논리적으로 이해가 되지만,
함수의 선언은 Main 함수가 아닌 완전히 다른 블록에서 취급하기 때문에 순서를 무시하는 실수가 자주 일어납니다.
혼자서 "얘들아! 수박해!"하고서 나중에 "앞으로 수박은 한 바퀴 돌아서 박수 치는 거야!"하고 정하면 뭔가 이상하죠?
프로그램에도 마찬가지입니다. 아래와 같은 코드를 보겠습니다.
#include <stdio.h>
int main() {
printing(); //Error!
}
void printing() {
printf("main 함수의 아래에 선언되었습니다.");
}
프로그램에 printing이라는 걸 실행하라 해놓고, printing을 나중에 알려주면 쓸모가 없겠지요?
그래서 우리는 printing이라는 함수가 있다는 것을 프로그램에 알려주어야 합니다.
안 그러면 printing이라는 함수 자체가 있다는 것도 모르기 때문에 Error를 출력하기 때문입니다.
아래와 같은 방식으로 함수를 프로그램에 알려줍니다. (함수의 원형을 선언한다.)
#include <stdio.h>
void printing();
int main() {
printing();
}
void printing() {
printf("어때! 이제 되지?")
}
함수의 선언에서 블록 { }이 빠지고 세미콜론(;)이 들어온 모습입니다.
이를 통해서 저런 이름과 형태를 가진 함수가 있다는 것을 알려주어야 합니다.
무슨 기능의 함수인지는 모르겠지만, 일단 저런 함수가 있다는 것을 알려주는 것입니다.
굳이 번거롭게 저 작업을 해야 하나요? 그냥 함수를 Main 함수 위에 선언하면 안 되나요?
됩니다.
당연히 되지요. 그러나, 유지보수 및 가독성에 문제가 생깁니다.
지금처럼 간단한 예제의 경우 문제가 안 생깁니다. 오히려 파일 용량이 줄어서 더 좋겠군요.
그러나 나중에, 여러분이 실전에 뛰어들었을 때는 이렇게 하면 안 됩니다.
아무리 간단한 작업을 하더라도 선언한 함수가 몇십 개씩 되는 것은 기본이기 때문입니다.
결과적으로, Main 함수를 찾기 위해 열심히 스크롤을 내려야만 하기 때문입니다.
(사실 Visual Studio는 [접기] 기능을 지원하기 때문에 큰 걱정 안 해도 됩니다.)
그 외에도 함수의 원형을 선언해놓으면 함수의 목록을 쭉 볼 수 있기 때문에
관리 측면에서 효율적인 유지보수가 가능하게 됩니다.
마무리
함수의 선언과 관련된 부분을 알아보았습니다.
함수 선언은 변수 선언과 마찬가지로 프로그래밍에서 중요한 부분을 차지하기에 손에 익혀두시면 좋습니다.
다음 포스팅은 함수의 기능에 관해서 추가로 알아보도록 하겠습니다.
'IT > C and C++' 카테고리의 다른 글
[C] 전역변수와 지역변수란? (0) | 2022.12.30 |
---|---|
[C] 함수란 무엇이고, 어떻게 사용하나요? (2/2) (0) | 2022.12.30 |
[C] 변수란 무엇이고, 어떻게 사용하나요? (0) | 2022.12.29 |
[C] printf 함수를 알아보자! (0) | 2022.12.29 |
[C] Hello, World 예제 분석 (0) | 2022.12.29 |
댓글