1. Bool


오늘은 'Bool' 이라는 논리 자료형에 대해 알아보도록 하겠습니다. 논리, 말 그대로 참(true)과 거짓(false)으로만 구성되어 있는 자료형입니다. 이 true와 false는 논리 연산자(&&, ||, !)에서 자주 봤었죠? 과연 true과 false는 어떤값을 나타낼까요? 아래는 cout문으로 true와 false를 출력한 것입니다.

#include <iostream>

using namespace std;

int main()
{
	cout << true << endl;
	cout << false << endl;
	return 0;
}

결과:

1

0

계속하려면 아무 키나 누르십시오 . . .


코드의 7~8행을 보시면 cout문을 사용해 그 값을 출력하도록 했습니다. 결과를 보시면 true는 1, false의 값은 0이라고 출력된 것을 확인하실 수 있습니다. 그럼, "true의 값은 1이고, false의 값은 0이라고 볼 수 있겠네요?"라는 생각이 드실 수 있을텐데, 이는 잘못된 생각입니다. 앞서 말했듯, bool형은 참과 거짓으로만 구성되어 있다고 했습니다. 0과 1을 의미하는 키워드가 아니란거죠.


이번에는 연산 대상의 크기를 구하는 sizeof 연산자를 이용하여 true와 false가 각각 몇 바이트인지 확인해보도록 하는 예제를 봐보도록 합시다.

#include <iostream>

using namespace std;

int main()
{
	cout << "sizeof true: " << sizeof true << endl;
	cout << "sizeof false: " << sizeof false << endl;
	return 0;
}

결과:

sizeof true: 1

sizeof false: 1

계속하려면 아무 키나 누르십시오 . . .


결과를 보시면 알겠지만, true가 차지하는 바이트는 1바이트, false 역시도 1바이트였습니다. bool형에 대해 정리를 해보자면, 참과 거짓을 나타내며 1바이트를 차지하는 자료형이라고 볼 수 있겠습니다. 이번에는 bool 자료형을 직접 사용하고, 사용자로부터 a와 b를 입력받아 a가 b보다 크면 true, 그 반대의 경우는 false를 넣어보도록 하겠습니다.

#include <iostream>

using namespace std;

int main()
{
	int a, b;
	bool isMax;

	cin >> a >> b;

	if (a>b) isMax = true;
	else isMax = false;

	cout << "isMax: " << isMax << endl;
	return 0;
}

결과:

10 6

isMax: 1

계속하려면 아무 키나 누르십시오 . . .


위를 보시면 알겠지만, a와 b를 입력받아 대소여부를 가려내는 간단한 예제입니다. 결과를 보면, a에는 10이, b에는 6이 들어갔으며 a가 더 크므로 isMax엔 1(true)값이 들어갔습니다. (C, C++에서는 0이면 거짓, 0이 아닌 수는 참을 의미하는 숫자로 정의하고 있음) bool형 역시, 우리가 알고있던 기본 자료형과 같이 선언하고 그 변수의 값을 변경하거나 참조할 수 있습니다.


2. Inline


인라인(Inline)에 대해 알아보기 전에 매크로를 정의할때 쓰였던 define이 아직까지 기억나시나요? 지금 설명하고자 하는 인라인 함수도, C에서의 매크로 함수와 흡사합니다. 먼저 define부터 살펴보도록 합시다.

#include <iostream>
#define PI 3.141592
#define CU(x) ((x)*(x)*(x))

using namespace std;

int main()
{
	cout << PI << endl;
	cout << CU(7) << endl;
	return 0;
}

결과:

3.14159

343

계속하려면 아무 키나 누르십시오 . . .


보시는 바와 같이 2행과 3행에 매크로 변수와, 매크로 함수가 정의되었습니다. 3행의 매크로 함수 정의를 보시면, 복잡한 함수를 매크로 함수 형태로 정의하는데 한계가 있습니다. 장점이라고 한다면, 일반 함수에 비해 실행속도가 빠르며, 9행과 그에 대한 결과를 보시면 자료형에 영향을 받지 않습니다. 10행의 CU(7)는 매크로 함수에 의해 ((7)*(7)*(7))으로 변환됩니다. 자, 이번에는 이 예제를 C++의 Inline(인라인) 함수로 정의해보도록 하겠습니다.

#include <iostream>
#define PI 3.141592
//#define CU(x) ((x)*(x)*(x))

inline int CU(int x)
{
	return x*x*x;
}

using namespace std;

int main()
{
	cout << PI << endl;
	cout << CU(7) << endl;
	return 0;
}

결과:

3.14159

343

계속하려면 아무 키나 누르십시오 . . .


3행에 있던 define 전처리문은 주석처리 하였습니다. 5~8행을 보시면 CU라는 인라인 함수가 정의되어 있습니다. 보시는 바와 같이 일반 함수의 형태에서 inline라는 키워드를 붙여주어 매크로 함수처럼 쓸 수 있습니다. 여기서 만약 7이 아닌 7.4를 넘겨주면 어떻게 될까요? 이 경우에도 343이 출력됩니다. define 전처리문의 경우 405.224로, 자료형에 의존적이지 않는데 CU 인라인 함수는 매개변수로 int형이 들어올 수 있으므로, 소숫점 아래값들은 모조리 버려집니다. 인라인 함수의 단점이라고도 볼 수 있겠네요.


이제 그만, 인라인 함수와 논리 자료형에 대한 설명은 마치도록 하겠습니다. 수고하셨고, 다음 강좌에서는 참조자에 대해 알아보도록 하겠습니다.