이번 장은 주제 부터 말하는게 좋겠다. 내장 형식 중에 하나인 bool이 정말로 필요한지? 아니면 현재 존재하는 언어에서 제공하는 기능을 통하여 표현할 수 있는지? 에 대해서 나열해 놓은 것이다.


문제
wchar_t(C에서 typedef)에서 비롯해서, bool은 단지 ARM(Ellis90 : C++ Reference Manual)에서부터 C++에 추가된 내장 형식이다.

bool이 처리할 수 있는 것들은 기존 언어에서 내장 형식의 추가 없이 표현할수 있는가? 만약 할수 있다면 동일하게 동작하는 구현에 대해서 작성해보고, 표현할수 없다면, bool 내장 형식을 왜 표현못하는지 설명을 할수 있는 방법을 나열해 보거라.

....
...
..
.

해설
구현 할 수 없다. ture 와 false를 사용하는 bool 내장 형식이 존재하는 언어의 효과를 bool 없이는 똑같이 낼 수 없기 때문이다. 그러므로 아래 나열된 방법은 왜 구현할수 없는지에 대한 설명이다.

증명 1 : typedef 방법(이걸 생각한 사람은 10점 만점에 8.5점의 능력을 보유 했다.)

이 해결 책은 나쁘지 않지만, 함수의 매개변수일 때 문제가 생긴다. int형 매개변수나 bool형 매개변수는 똑같은 형이기 때문이다. 또한 내부에서 함수의 인자가 true 인지 false 인지도 검사해야 한다.

증명 2 : #define 방법( 0점 .... )

... 이 아이디어는 아주 나쁘다고 경고한다. 왜냐하면 #define 문제점도 생기기 때문이다. 그런 측에서 본다면 윈도우 프로그램밍에선 bool 형이 아닌 대문자 BOOL을 typedef int BOOL 하고 TRUE 1 과 FASLE 0 을 define 해야 했는지 알만하다.(이유 : 보다 많은 정보를 뱉어 내고 싶은데, bool 은 두가지 뿐이고, 오류가 났다면 0이 아닌 경우 어떤 숫자를 뱉어 냈는지 파악하려고 한것 같다. 즉 기능적인 bool 이 필요했기 때문으로 보인다. 워낙 windows 에는 .. 많은 API들이 있으니 .. 그럴만 하다. )

증명 3 : enum (점수 9 )
enum bool { false, true }
이 증명은 증명 1의 함수의 문제는 없앨수 있으나 자동 변환을 허용 하지 못하는 문제를 가지고 있다. 즉...

증명 4 : class(점수 9 / 10)


의심나는 부분 1에서 ... 함수의 오버로드 부분을 처리 하고자 할 경우 문제가 생길 수 있다.
코드

의심나는 부분 2 에서... operator int()나 void* 를 쓰지 않고서야 자연적으로 조절 할 수가 없다. 예를 들자면
bool b;
if( b ) // <-- 이 부분은 int형 반환이나 void*형 반환으로 처리 할수 있다.
{
}
하지만 이 부분 2를 처리 하고자 할때 부작용이 더욱 일으 킬 수 있다.


총평
이런 연구하는 자세에서 많은 것들을 알수 있을 것이라고 본다. operator int() 같은 반환법을 다시 한번 숙지 할 수 있었으며, 클래스라는 도구가 얼만큼 막강한지에 대해서 다시 알게 되었다. 또한 묵시적 형변환으로 클래스 객체가 생성되는 상황이나, 여러 상황으로 특정 형을 창조해 낼 수 있다는 시도가 매우 참신했다.

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 라이프코리아트위터 공유하기
  • shared
  • 카카오스토리 공유하기