C++ 간단한 함수와 변수 | C++ 자습서 5

C++ 간단한 함수와 변수

함수와 변수의 모든 사용법을 익힐 때 쯤이면 아마 C++의 전문가가 되어있을 겁니다. 그러나 그 과정은 길고 내용은 워낙 방대하기 때문에 단계적으로 학습하는 것이 좋은 생각입니다.

이번 포스팅은 C++의 간단한 함수와 변수에 대하여 알아보겠습니다.

C++ 간단한 함수와 변수
C++ 간단한 함수와 변수

라이브러리 함수

표준 C++ 라이브러리에서 제공하는 함수들입니다. cout, cin 같은 함수를 말하죠.

cmath 라이브러리에는 여러가지 수학관련 함수가 들어있습니다. 온라인에는 C++ 에 관련된 Documentation 이 잘 정리되있기 때문에 라이브러리 함수의 사용법들을 확인할 수 있습니다.

#include <iostream>
#include <cmath>

using std::cout;
using std::endl;

int main() {

	cout << pow(2.0, 3.0) << endl;
	cout << sqrt(9.0) << endl;

	return 0;
}
[결과값]
8
3

사용자 정의함수

사용자 정의함수는 말 그대로 사용자가 직접 개발하는 함수입니다. 무에서 유를 창조하는 일을 해야 할 것 같지만 대부분은 표준 라이브러리 함수와 프레임워크를 가지고 자신의 프로그램의 용도에 적합하게 커스터마이즈 하는 것 만으로 꽤 쓸만한 프로그램을 만들 수 있습니다.

단 C++ 에서는 메모리 관리를 직접해야 하는 부분이 가장 도전적이라 할 수 있습니다. 아무리 좋은 라이브러리와 프레임워크가 있어도 제대로 사용하기 위해서는 제대로된 실력이 있어야 합니다.

다른 언어가 쉽다는 것은 아니지만 차이가 많이 납니다. 한 20년 전에는 선택의 여지가 별로 없어서 C++로 시작한 사람들도 꽤 있었겠지만 지금 시대에 C++로 프로그래밍을 입문한다면 결코 쉽지 않을 겁니다.

C++ 표준도 달라지고 각종 라이브러리의 운영법에서 그때보다 더 진화한 부분도 있기 때문이고 또 프론트엔드 처럼 개발의 문턱이 낮아지기도 했고 동적타이핑 언어의 코드가 상대적으로 사용자 친화적이기 때문이기도 합니다.

함수의 문법을 알아보겠습니다. 함수는 이름이 function (기능)으로 어떤 기능을 처리하는 것에 목적이 있습니다.

함수라는 용어에 사로잡히지 마세요. 이는 수학의 함수와 전혀 다른 것 입니다.

함수를 이해하는데 핵심은 반환값, 인수, 매개변수, 지역블록입니다.

#include <iostream>
#include <cmath>

using std::cout;
using std::endl;


void printSomething() {
	cout << "this is something" << endl;
}

void printPow(int base, int exp) {
	cout << pow(base, exp) << endl;
}

int returnSomething() {
	return 999;
}

int main() {

	printSomething();
	printPow(2, 10);
	cout << returnSomething() << endl;

	return 0;
}

C++에서 void 함수는 반환값이 없습니다. 함수에서 void 의 의미는 그냥 어떤 일만 시키는 겁니다. 첫번째 함수는 출력만 합니다.

두번째 함수는 void 반환값에 매개변수가 두개 있습니다. 매개변수나 인수는 다르지만 일반적인 설명에는 그냥 같은 것으로 취급합니다. 그 차이점에 대해서는 포인터챕터에 가서 배울겁니다.

어쨋든 외부에서 받은 값을 기초로 뭔가 계산을 합니다. 그리고 void 니까 반환하지 않습니다.

세번째 함수는 반환만 합니다. 그냥 값만 반환해도 되고 어떤 인수를 받아서 연산을 한 후 반환을 해도 되고 자유입니다.

이 모든 일이 함수의 { } 지역 블록에서 일어나고 있었다는 점에 주의할 필요가 있습니다. 이 { } 블록안은 스택(stack)이라는 메모리 구조에 변수를 할당합니다. C++에서 함수를 이해하는 것은 stack 메모리의 모든 것을 배우는 것과 같습니다.

변태들은 메모리를 하나씩 조작하는데 쾌감을 느낀다고 합니다만, 어쨋든 C++은 포인터로 시작해서 포인터로 끝나기 때문에 즐기는 사람들이 더 잘할 수 밖에 없습니다.

즐기기 힘들다면 배운다는 자세로 진지하게 바라보면 될 겁니다. 어차피 다른 언어로 넘어 가더라도 다 이어지는 부분이 있고 도움이 됩니다.

변수의 선언과 사용

변수를 선언하려면 데이터형(data type)을 선언해야 합니다. 사람이 직접 선언하는 언어를 static 이라고 하고 컴파일러나 인터프리터가 판단해서 만든다면 dynamic 입니다. 그러고 보면 컴파일러도 일종의 인공지능(AI)처럼 보입니다.

어디까지 파악한 것인지는 모르겠지만 어느정도는 프로그래머의 의도에 따라 자동으로 변수를 할당합니다.

일단 C++의 데이터형은 엄청나게 많습니다. 정수, 실수 같은 원초적 데이터형 뿐만 아니라 표준 라이브러리의 구조체 타입들은 사실상 기본 데이터 같이 쓰게 되므로 알아야 할 타입이 엄청 많은데요.

동적타이핑 언어들을 생각하면 대부분 정수, 실수, 문자열, 불린형(참/거짓) 정도로 나뉩니다. 그 정도가 인간이 인식하기에 좀 차이가 보이는 것 들이겠죠.

그래서 처음에는 외워야할 데이터형의 수를 줄여 보는 것도 하나의 방법입니다.

처음에는 int, long, float, double, char 정도에 익숙해지는게 좋을 것 같습니다.

int 는 32비트 정수형으로 약 -21억~+21억 범위이며 long 은 64비트 정수형입니다. 42억을 다시 2의 32승 하면 long 형이니까 매우 큰 숫자입니다.

float는 부동수소점이라는 특이한 디지털 부호화 방식인데 실수를 표현할 수 있으나 정확도에 한계가 있습니다. 컴퓨터에서는 아날로그 같은 무한의 실수를 일부밖에 표현하지 못합니다. float 이 32비트라면 double 은 64비트입니다. 실수처럼 무한의 정밀도는 아니지만 double 정도만으로도 엄청난 범위의 숫자를 표현할 수 있습니다.

char 역시 숫자지만 ASCII 라는 코드화가 되어 있어서 영문자를 표현할 수 있습니다. char가 1바이트기 때문에 표현할 수 있는 범위가 256개인데 2바이트 유니코드를 표현하는 자료형도 당연히 있습니다.

C++은 조금 복잡한데 옛날 C 표준에서는 한글을 적절하게 처리하지 못하는 경우도 있습니다. 컴파일러나 IDE 설정을 봐야하기 때문에 번거로운게 싫으면 최신의 IDE 를 사용하는게 좋습니다. 예를 들어 윈도우 환경이라면 MS 비주얼스튜디오를 가장 추천할 수 있습니다. 용량이 커서 다운로드와 설치 시간이 좀 더 걸리는 것 말고는 좋습니다.

윈도우에서는 MinGW 도 좋은데 gcc 를 사용하므로 리눅스를 사용하는 느낌이 납니다.

	int myInt;
	long myLong;
	float myFloat;
	double myDouble;

	myInt = 10000;
	myLong = 20000L;
	myFloat = 99.9F;
	myDouble = 135.777;

	cout << myInt << endl;
	cout << myLong << endl;
	cout << myFloat << endl;
	cout << myDouble << endl;

[결과값]
10000
20000
99.9
135.777

정수형과 실수형을 선언하고 사용하는데 별로 복잡할게 없습니다.

처음부터 모든 것을 외울려고 하면 좀 많이 힘듭니다. 진도도 안나가고… 그보다는 하나씩 타이핑하고 빌드하면서 얻는게 더 많습니다.

머리속에서는 잘 된다고 생각했는데 막상 코드를 쳐보면 안되는 경우가 많다. 그럼 아직 연습이 부족한 겁니다.

소스코드가 줄도 안맞고 허술하게 보여도 숫자 하나 문자 하나만 컴파일러의 조건에서 벗어나도 프로그램은 작동하지 않습니다. 극도의 정확도가 요구되기 때문에 프로그래머들은 시행착오를 겪을 수 밖에 없습니다.

그러다 보니 줄 맞추는 것이 습관이 됩니다;;;

식별자 규칙(Identifier)

변수나 함수의 이름을 식별자(identifier)라고 합니다. 이 식별자에는 몇가지 규칙이 있습니다.

  • 키워드(keyword)는 사용할 수 없다.(당연하다)
  • 식별자는 숫자로 시작할 수 없다
  • 식별자는 문자와 _ (언더바) 숫자만 사용할 수 있다
  • 식별자는 영문 대소문자를 구분한다
  • 식별자는 #, $, @ 같은 특수문자를 사용할 수 없다

여기서 비슷한 이야기를 반복하는 것은 강조를 한 것 입니다.

비주얼 스튜디오에서는 그리고 한글변수도 사용이 가능한데 다른 IDE들은 지원할 수도 안 할 수도 있습니다. 보통은 한글변수라는 상상은 안하는데,,, 뭐 그렇습니다. 컴파일해서 기계어로 변환하면 상관이 없는 문제긴 한데 어쨋든 관례상 한글 변수를 사용하는 곳은 아직 보지 못했습니다.

예전에 한글로 프로그래밍 언어를 만들던 분이 있었던 걸로 아는데…

언젠가 한글 변수를 사용하는 날도 올 것 같긴 합니다.

요약

간단하게 함수와 변수의 사용법을 알아봤습니다. 함수와 변수는 하루아침에 배울수가 없기 때문에 단계적인 학습과정을 거쳐야 합니다.

외부참조문서

C++ / cmath — DevDocs

C++ Functions (w3schools.com)

Variables and types – C++ Tutorials (cplusplus.com)

Variables in C++ – GeeksforGeeks

Leave a Comment