
프로그래밍을 하다 보면 가끔 반복적으로 작성해야 하는 코드가 있다. 이런 코드를 여러번 쓰지 않고 함수 형태로 저장해두면 코드를 간결하고 이해하기 쉽게 만들 수 있다.
사용자 정의 함수를 사용 하는 방법과 하나의 루프로 수행하기 힘든 작업을 중첩 루프를 이용하여 해결하는 방법을 알아보자.
“cough”라고 세 번 말하는 C 프로그램을 작성해보자
#include <stdio.h>
int main(void)
{
printf("cough\n");
printf("cough\n");
printf("cough\n");
}
단순히 printf 를 세 번 반복하면 되지만, 동일한 작업을 반복하는 것이기 때문에 사용자 정의 함수를 이용하면 아래 코드와 같이 더 단순화 할 수 있다.
#include <stdio.h>
int main(void)
{
for (int i = 0; i < 3; i++)
{
printf("cough\n")
}
}
이번에는 나만의 함수를 만들어 보자.
#include <stdio.h>
void cough(void)
{
printf("cough\n")
}
int main(void)
{
for (int i = 0; i < 3; i++)
{
cough();
}
}
void를 입력하고 원하는 함수명(cough)을 적은 뒤 괄호 안에 void를 적고, printf로 "cough"를 출력하는 코드를 작성한다.
이제 int main(void)의 안에 cough를 사용하면, 우리가 정의해둔 대로 cough가 출력된다.
하지만 함수를 1개가 아닌 여러개를 만들수록 main 함수는 아래로 내려가게 된다.
중요한 것이 아래에 있는 것보다 바로 나오는 것이 보기 좋다.
그렇다면, main 함수를 위로 올리고 cough 함수를 내리면 해결될 것 같지만, 실행을 해보면 오류가 발생한다.
C는 오래되었고 똑똑하지 않기 때문에 아래에 cough라는 함수가 있을 것이라 생각하지 못하기 때문이다.
이 문제를 해결하려면 다음과 같이 void cough(void)를 세미콜론과 함께 위로 올리면 된다.
#include <stdio.h>
void cough(void);
int main(void)
{
for (int i = 0; i < 3; i++)
{
cough();
}
}
void cough(void)
{
printf("cough\n");
}
cough함수를 전부 본 적은 없어도 이름은 본적이 있으니 main 함수에 나올 때까지 코드를 계속 읽도록 하는 것이다.
이번에는 cough 함수를 좀 더 다재다능하게 만들어 원하는 횟수만큼 cough를 출력할 수 있도록 해보자.
#include <stdio.h>
void cough(int n);
int main(void)
{
cough(3);
}
void cough(int n)
{
for (int i = 0; i < n; i++)
{
printf("cough\n");
}
}
마리오 게임에서 흔히 보는 것 처럼 화면에 여러 개의 이미지를 가로나 세로로 여러 개 이어서 출력하고 싶으면 어떻게 해야 할까?
아래처럼 for 루프를 사용할 수 있다.
#include <cs50.h>
#include <stdio.h>
int main(void)
{
int n;
do
{
n = get_int("Size: ");
}
while (n < 1);
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
printf("#");
}
printf("\n");
}
}
먼저 int n; 으로 정수 값을 갖는 변수 n을 정의한다.
그리고 do{ …}while()을 이용해서 while( )의 조건이 만족할때 까지 get_int 함수로 사용자가 입력값을 받아 n에 저장한다.
do{ }while()을 사용하면 조건과 상관없이 최소한 한 번은 { }안의 내용을 실행할 수 있다.
그리고 for 루프를 두 번 중첩해서 돌면서 “#”을 출력한다.
첫 번째 루프에서는 변수 i를 기준으로 n번 반복하고, 그 안의 내부 루프에서는 변수 j를 기준으로 n번 반복한다.
내부 루프에서는 “#”을 출력하고, 내부 루프가 끝날 때마다 줄바꿈을 수행하기 때문에 최종적으로는 가로가 n개, 세로가 n개인 “#”이 출력되게 된다.
코드 재사용성 증가 :
반복되는 코드를 함수로 만들어서 필요할 때마다 재사용할 수 있다.
가독성 향상 :
함수를 사용하면 코드의 목적이 명확해지고, 이해하기 쉬워진다.
유지보수 용이 :
한 곳에서 코드를 변경하면, 그 함수를 사용하는 모든 곳에 자동으로 적용된다.
오류 감소 :
코드를 분리함으로써 오류가 발생할 가능성을 줄일 수 있다.
모듈화 및 확장성 :
함수를 통해 코드를 모듈화하면, 시스템의 확장성과 유연성이 향상된다.