개발자가 되기 위한 준비를 하려면, 주언어를 정해야 한다. 코테를 보기 위해 자유자재로 다룰 언어, 내 진로를 위해 실질적으로 사용해야 하고 남들보다 더 잘해야만 하는 언어 등 집중적인 공부가 필요할 것이다. 그리고 주언어는 내 나이 쯤 혹은 내 학년 쯤 되면 이미 정하고도 코테 준비를 한창 하고 있어야 할 것이다. 비록 남들보다 늦었더라도 지금부터 열심히 한다면 따라잡을 수 있을 것이라는 생각으로 달려보려 한다. 전공 공부를 해보니 C언어는 정말 중요한 언어라는 생각이 든다. 다른 언어들에 비해 깊게 공부할 필요가 있는 언어같다. C언어를 공부해야 많은 원리들을 이해할 수 있을 것 같다. 그래서 혹여 C++을 복습하지 못하는 경우가 생기더라도 C를 아쉬움이 없을 정도로는 복습해야하지 않을까 싶다. C - Python - Java 순서로 복습해보려고 한다.
학과에서는 Python - C - C++ - Java 순서로 배우기는 했었다.
교재는 열혈 C 프로그래밍을 사용하며, C를 공부하는 동안 사용할 통합개발환경(IDE)은 VS 2019이다.
참고 사이트 : https://users.cs.cf.ac.uk/dave/C/
교재의 ch1, ch2를 참고하여 인트로를 구성하도록 하겠다. 실습 위주의 공부가 될 것이므로 이론은 간단하게만 기술하겠다.
C언어는 프로그래밍 언어 중 하나이다. 컴퓨터는 기계어만 이해할 수 있으나 인간이 기계어로 프로그래밍을 하기란 매우 복잡한 일이 아닐 수 없다. 그래서 인간이 쉽게 알아들을 수 있는 형태의 언어로 프로그램을 작성하기 위해 프로그래밍 언어는 존재하며, C언어는 이러한 프로그래밍 언어 중 고급언어(high level language)에 해당한다. 우리가 작성한 C언어 프로그램은 컴파일러가 번역(컴파일)해준다.
내가 C언어 실습에 사용할 Visual Studio에서의 '빌드'과정은 '컴파일'과 '링크' 단계를 합친 것이다. 코드를 컴파일만 하면 된다고 생각하기 쉽지만 사실 컴파일과 링크 두 과정이 필요하다.
이에 대해서는 차차 공부해보겠다.
우리는 가장 기본적이면서 대표적인 간단한 코드를 실행하고 구조를 살펴볼 것이다.
#include <stdio.h>
int main(void){
printf("Hello world!\n");
return 0;
}
위의 코드를 실행하면 이러한 결과가 나온다.
Hello world!
교재에서 C언어로 프로그램을 작성하는 것이 '함수를 만들고, 만든 함수들의 실행순서를 결정하는 것'이라는 문장을 보았다. C언어에서 함수는 기본 단위이다.
함수는 간단히 말해 입력을 받아 결과를 출력하는 것이다. 이 때 전달되는 입력 값을 우리는 '인자'라고 부른다.
함수를 만드는 것을 함수의 정의라고 하며, 함수를 실행하도록 명령하는 것을 함수의 호출, 함수에 입력 값을 전달하는 것을 인자의 전달이라고 한다.
프로그램을 실행하면 가장 먼저 호출되는 함수가 바로 main함수이다. 따라서 C언어로 구현된 모든 프로그램에 main이라는 함수가 정의되어있어야 한다. 그래야 가장 먼저 main이라는 이름의 함수를 찾아 호출한다. 위의 코드에도 main함수가 존재한다.
int main(void){
}
위의 메인 함수는 이러한 구조를 가졌다.
출력 함수이름 입력
int main (void){
함수 몸체(body)
}
여기서 출력의 형태는 int, 함수이름은 main, 입력형태는 void이다. 다른 함수들도 이러한 형식을 가진다. 출력의 형태를 우리는 '반환형(return type)'이라고 부른다.
함수의 몸체는 중괄호로 감싸져 있고 위에서부터 순차적으로 실행된다.
몸체에는 두 문장이 있는데,
printf("Hello world!\n");
return 0;
두 문장 모두 끝에 세미콜론( ; )이 붙어있다. 문장의 끝을 표시할 때 사용한다.
printf("Hello world!\n");
여기서 우리는 printf라는 함수에 "Hello world!\n"를 인자로 전달하여 호출했다. 이 때, \n는 개행 문자로 이스케이프 시퀀스(escape sequence) 중 하나이다.
printf함수는 우리가 만들지 않았으나 사용 가능한, 기본 제공함수이다. 이러한 함수를 '표준함수'라고 하며 표준함수들의 모임을 '표준 라이브러리'라 한다.
C언어에는 이 외에도 많은 표준 함수들이 있다.
아까 그냥 지나갔던 맨 첫줄을 다시 보자.
#include <stdio.h>
표준함수 printf를 호출하기 위해 '헤더파일 선언'을 한 것이다. 헤더파일 stdio.h에 printf함수의 호출에 필요한 정보가 들어있다.
몸체 두 번째 문장을 살펴보자.
return 0;
return은 값을 반환하면서 현재 실행 중인 함수를 종료한다. 어디로 값을 반환할까? 현재 실행 중인 함수를 호출한 영역으로 반환한다. 여기서는 리턴값이 0이다. main함수에서 return을 하면 main함수가 종료되는데, main함수의 종료는 곧 프로그램의 종료와 이어진다.
위에서는 0을 반환하면서 프로그램을 종료했는데, 보통 프로그램을 정상종료할 때 0을 반환한다.
아무튼 주석을 달아라
내가 제대로 안해서 후회하는 것들 중 일부는 C언어 학습 때 왔는데, 주석을 다는 습관을 갖지 못한 것과 디버깅하는 습관을 갖지 못한 것, 파일 입출력을 제대로 배우고 넘어가지 않은 것 등이다.
블록 단위 주석은 /* */ 이 사이에 주석을 달 내용을 넣으면 된다.여러 줄을 주석처리할 때 사용한다.
행 단위 주석은 // 뒤에 내용을 넣으면 된다.
블록 단위 주석은 중첩될 수 없다.
교재를 참고하면 프로그램 주석에 이 정도 내용이 들어가면 될 것 같다.
/*
제목:
기능:
파일이름:
생성날짜:
수정날짜:
작성자:
*/
프로젝트가 아닌 간단한 코드의 경우 제목, 기능 정도는 생략하면 되겠다.
한 포스팅의 호흡이 너무 길어져 이쯤 끝내는 것이 좋겠다. 1학년 때 C언어를 배우던 생각도 새록새록 나고 재밌게 공부할 수 있을 것 같아 약간 기대도 된다.