본문 바로가기

카테고리 없음

[C언어 강좌] 2. Hello world출력 및 함수의 이해


프로그래밍언어를 공부하는 데에 있어서 가장 좋은 방법은 기존에 있던 코드를 분석하는 것이라고 생각합니다.

그래서 이번 강좌에서는 제가 만든 코드를 여러분들이 직접 따라 적으면서, 코드에 대해 분석을 해보는 시간을 갖겠습니다.


코드를 직접적어보고 작동원리를 자기 자신이 깨닫는 것이 정말 많은 공부가 됩니다. 

글을 보지만 마시고 직접 코드를 작성하고 실행하면 많은 도움이 될겁니다. (저의 경험입니다.. ^^)


학습목표


ㆍ함수의 구조를 익힌다.

ㆍmain함수의 역할을 안다.

ㆍreturn의 역할을 안다.





ㆍHello World 출력하기



솔루션탐색기->소스파일->추가->새항목->코드->C++파일 을 눌러주면 파일을 생성하는 창이 하나뜰겁니다.

기본 파일 이름이 소스.cpp 일탠데 이름을 Hello.c 로 바꾸어 줍시다.

확장자가 cpp파일이면 컴파일러는 cpp문법으로 컴파일을 해버립니다. 우리는 c언어를 사용할 것이기 때문에 c파일로 만들어서 컴파일러에게 c문법으로 컴파일해달라고 요청을 해야합니다. 


소스파일을 생성하셨다면 , 소스파일에 아래와 같이 적어줍니다.






다 적으셨으면 Ctrl + F5를 눌러서 빌드를 해봅시다. 





이런 창이 뜨면 성공입니다. 

지금 작성한 코드로 검은창에 Hello world를 띄워봤습니다. 이 검은창의 이름은 cmd라고 합니다. 콘솔창이라고도 불리죠.

지금 우리가 만든 프로그램은 cmd창에 Hello world를 띄우게 됩니다. 우리가 작성한 코드를 이제 하나하나 분석을 해볼까 합니다.





ㆍ프로그래밍세계의 함수



프로그램은 함수로 시작해서 함수로 끝난다는 소리가 있는만큼 함수는 프로그래밍에서 꼭 알아야 할 개념입니다.

프로그래밍에서의 함수는 수학에서의 함수와 굉장히 유사합니다. 아마 그래서 함수라고 부르나봅니다  ^^;;





수학에서 함수는 변수의 값에 의해 값이 결정됩니다. 위 식에서  x에 3을 넣으면 15가 나오겠네요.

프로그래밍에서의 함수도 굉장히 유사합니다. 어떤 값을 넣어주냐에 따라 결괏값이 달라지게 되죠.





위 그림은 프로그래밍 관점에서 표현한 함수입니다.

두 매개변수의 값을 받아서 더한 값을 내놓는 함수이죠. 이름도 그에 걸맞게 Add라고 지었습니다.

어떤가요? 왜 함수라고 불리는지 알겠죠? 수학에서 쓰이는 함수와 구조가 굉장히 비슷합니다.

그렇다면 함수는 실제로 어떤식으로 작동할까요? 간단하게 글로 써보도록 하겠습니다.


함수의 이름을 통해서 함수를 사용하게 되고(호출하게 되고), 함수 안에서 사용될 값들을 동시에 전달(복사)해줍니다.

그러면 함수에서 계산을 진행한 후에 값을 내보내게(반환하게) 됩니다. 위그림에 나온 전부이죠.


함수의 사용(호출)과정은 정말 중요하기 때문에 다시한번 정리해보겠습니다.

  1. 함수를 정의한다. 위 그림에선 Add라는 이름을 갖고 x,y의 값을 받아서 x+y의 값을 내보낸다고 정의되어있다.

  2. 정의를 했으면 실제 필요한 곳에서 함수를 호출한다. 호출 할때 필요한 값도 같이 전달해준다.

  3. 값이 반환되며 함수가 종료된다.


ㆍ함수 정의 규칙


함수에 대한 큰 틀을 알아보았으니 이번엔 실제로 저 틀에 맞춰서 Add함수를 제작해봅시다. 일단 보기만 하셔도 됩니다 ^^




add함수를 정의했습니다. 함수를 정의할때는 규칙이 존재하는데 이 규칙에 맞게 정의를 해주셔야합니다.

어떤 공부던지 규칙을 정하고 암기한 후에, 규칙에 맞게 적용만 하면 정말 편해집니다.

자 ! 함수를 정의하는 규칙을 Add함수의 구조를 통해 알아봅시다 .



int라는 이름의 반환형도 나왔고.. return도 나왔고.. 매개변수도 나왔고.. 아직 다루지 않은 내용입니다.

이번강좌에서는 return에 대해 다루고, 다음강좌에서 자료형에 대해 다루겠습니다. 

일단 함수 작성의 핵심은 반환형 함수이름( 매개변수들) 함수몸체 입니다.

'int'는 자료형(data type)이라고 하는데, 데이터를 담는 변수들은 꼭 자료형으로 한번 정의를 해줘야합니다.

자세한건 다음강의때 알아보겠습니다. 이번강좌의 목적은 함수를 이해하는 것이니깐요.


위 Add함수의 정의를 말로 풀어서 써보겠습니다.


"Add라는 함수가 있습니다. int형 변수 x와 int형 변수 y를 값으로 전달받구요. 변수 x와 y의 값을 더해서 그 결괏값을 int형으로 도출합니다"


return이 무슨 역할을 하는지 감이 오셨으면 좋겠습니다. return을 요약하면 이렇습니다.


"계산이 끝났으니 값을 반환하고 함수를 빠져나온다! (RETURN!) "




ㆍ이제는 보인다. main함수!


함수에 대해 설명이 꽤 많았습니다. 그만큼 함수는 중요하고, 못다한 얘기도 많습니다.

제 목표는 여러분들이 작성한 int main()가 함수였다 ! 라고 깨닫게 해드리는거였습니다. 다시한번 코드를 봅시다.




int main()

우리는 지금까지 함수를 정의했다는 것을 알 수 있습니다. 반환형은 int형이며 함수의 이름이 main이라는 것도 알 수 있습니다.

추가로 말하자면 main함수 안에 printf 또한 함수이며, "hello world!"라는 문장을 출력해주는 역할을 합니다.

화면에 글자를 출력하는 함수이지요. 자세한 내용은 뒤에서 다루겠습니다.


아까 제가 프로그램은 함수로 시작해서 함수로 끝난다고 했던 얘기 기억하시나요? 

사실 모든 프로그램들은 Entry Point, 해석하자면 진입점을 갖습니다. 그리고 그 진입점은 함수가 되어야 하고, 함수의 이름은 main으로 정해져있습니다. 그냥 약속일 뿐이니 암기하셔야 되는 부분입니다. 그러나 조금만 생각해보면 당연한 얘기일지도 모릅니다. 프로그램은 명령어의 집합인데, 프로그래머가 원하는대로 작성하려면 시작지점이 있어야 겠지요?

그 시작점을 main이라고 부르기로 약속한겁니다. 


그러면 좀 더 나아가서.. 함수는 호출하기위해서 정의된다고 얘기했는데요. main함수는 누가 호출할까요?

바로 운영체제입니다. 우리가 프로그램을 실행하려고 더블클릭을 한 순간, 운영체제는 그 프로그램내부의 main함수를 호출합니다.


return 0;

함수는 반환형이 있다면 값을 반환하며 종료해야합니다. main함수가 종료하면서 0이라는 값을 반환하는군요.

이 값은 프로그램을 호출한 운영체제가 받겠죠?

함수를 정의하는 공간, 스코프


다시한번 우리가 정의한 main함수를 볼까요?


#include <stdio.h>                //이부분은 나중에 배웁시다 ^^


int main( )

{

printf("hello world! \n");

return 0;

}



보시면 main함수를 적어논 후에 중괄호 기호 { }로 감싸고 있습니다.

중괄호 { } 로 감싸진 부분을 스코프 라고 하며, 함수의 몸체라고 생각하시면 됩니다. 이 몸체 안에 함수가 무슨 일을 하는지 작성이 됩니다. 또한 이 스코프는 자료형의 생명주기와도 연관이 됩니다. 쉬운개념이지만 중요하니 꼭 잊지말고 알아두세요!




요약

  • main함수는 프로그램 실행 시 제일 먼저 호출되는 함수이다.
  • return을 이용해서 값을 반환하고 함수를 종료시킬 수 있다.
  • void는 아무값도 전달하지 않겠다는 의미이다.
  • 함수가 실제로 진행되는 구간(함수의몸체)은 { }로 감싼다. 그 구간을 스코프라고 부른다.


암기사항

  • return이란 해당 함수를 종료시키고, 자료형에 맞는 값을 반환한다.
  • 함수는 어떤식의 구조를 갖고 있는가
  • 만약 함수에서 변수를 사용한다면 함수 호출시에는 변수에 대한 값을 꼭 넘겨줘야한다.
  • 프로그램을 실행하면 main이라는 이름의 함수부터 호출한다.
  • printf 또한 함수이며 함수의 이름이다.
  • 함수 내부에서 또다른 함수를 호출할 수 있다.