지금 경제 상황은 1920년대 이후 최악의 경제 위기라고 합니다. 경제에 거품이 끼었다는 것이 두 위기의 공통점입니다만, 이번 경제 위기는 금융에서의 위기가 실물 경제에 영향을 끼쳤다는 것이 좀 다른 것이겠죠.
하지만 근본적으로 다를 것은 없어 보입니다. 1920년대의 경제 공황은 실물 경제에서의 위기라는 성격이 훨씬 강했습니다. 제가 경제나 경제사에 대해 잘 아는 것은 아니라서 정확하지 않을 수도 있겠으나, 산업 혁명 이후 생산성이 급격히 높아지게 되고, 경제 주체들의 경제 활동이 크게 늘어 수요보다 많은 생산이 이루어지고, 이러한 잉여 생산이 경제에 거품을 만들게 되었던 것으로 알고 있습니다. 이번 경제 위기는 미국의 서브프라임 모기지의 부실에서 비롯되었다고 알려져 있지만, 사실 문제는 역시 실물 경제입니다. GM 계열사인 GMAC, 서브프라임 모기지 업체들, GE의 부실을 야기한 GE 캐피털 등은 공산품이냐 아니냐는 것만 다를 뿐, 실제 제품을 사고 팔기 위한 자금을 빌려주던 회사들입니다. 이에 덩달아 여기에 투자했던 투자은행들이 부실해지면서 위기가 급격히 확산된 것입니다.
위에서 예를 든 GMAC이나 서브프라임 모기지, GE 캐피털 뿐만 아니라 대부분의 소매 대부업체들은 근본적으로 소비를 위한 금융을 합니다. 즉, 어떤 실물을 구매하기 위한 자금을 빌려주는 것으로, 재작년까지의 전세계적인 호황은 “대출->소비 증가->생산 증가->급여 증가->소비 증가->생산 증가->…” 이러한 형식이었던 것이죠. 즉, 돈을 빌려주고 소비를 촉진시키는 식으로 수요의 거품을 만들어냈습니다. 경제 대공황과 비슷하죠? 그런데, 이러한 순환의 고리에 문제가 발생하여 이번 금융 위기가 발생했습니다.
그래서 “대출 상환 불능->금융업 부실->신용 경색->기업의 자금 융통이 안되어 생산 감소->해고 또는 급여삭감->소비 감소->기업의 이익 감소->해고 또는 급여 삭감->…” 이런 악순환이 발생하게 되었습니다. 우리 나라의 경우 환율과 유가와 같은 요소가 추가될 수 있습니다만, 상황은 크게 다르지 않은 것 같습니다. 단, 우리 나라는 아직 본격적으로 금융에서의 부실이 발생하고 있지 않다는 것이 서양과 조금 다릅니다.
문제가 무엇일까요? 그리고, 어떻게 해결을 해야 할까요?
기업은 인건비를 비롯한 비용을 최대한 줄여 손실이 나지 않도록 한다.
정부는 기업이 망하지 않고 후일을 도모할 수 있도록 최대한 혜택을 준다.
돈이 많은 부자들이 돈을 쓸 수 있는 환경을 조성하여 경제가 순환되도록 한다.
건전한 경제력을 가진 중산층을 양성하고 빈곤층을 줄여서 건전한 소비자를 양성한다.
미래의 국민들을 위한 교육에 투자하여 건전한 미래를 도모한다.
국가의 경제와 힘을 기를 수 있는 연구에 투자한다.
여러분은 어떤 것이 좋은 대책이라고 보시나요?
시간이 흐를 수록 점점 더 앞 날은 불확실하게 느껴집니다. 그래서 사람들은 바로 앞의 이익에 연연할 수 밖에 없습니다. 또한, 공동의 이익보다 개인의 이익이 더 크게 느껴지는 것 역시 당연합니다. 공동의 이익이라는 것 역시 개인에게 있어서는 미래의 이익일 수 밖에 없으니까요.
특히나 임기가 있는 정치인들에게 있어 그 불확실한 미래는 더욱 크게 다가옵니다. 그래서 그들은 단기 경제 부양책에 연연할 수 밖에 없는 것이죠. (물론 그들이 기업가이고, 권력과 경제력이 있는 사람들이라서 그런 것은 아닐 것입니다.)
지금 돈이 없다고 난리입니다. 과연 정말 돈이 없는 것일까요? 몇 년 전, 경제가 호황이었을 때는 지금보다 기준금리도 높았고, 국가 채무도 적었습니다. 즉, 국가에서 돈은 지금 더 많이 뿌려대고 있습니다. 하지만 금융은 여전히 경색입니다. 돈줄은 더 말라갑니다. 특히, 서민들의…
호황기에 돌던 돈들이 어디론가 들어가버렸고, 나오지 않습니다. 이런 상황에서 단순히 인건비 삭감 등의 비용 줄이기는 근본적인 처방이 되지 못합니다. 하지만, 정부의 정책은 반대로 가고 있으니. 입장이 우리와 다른 그들은 아마도 다른 식으로 이 위기를 바라보고 있기 때문에 다른 처방을 내리고 있는 것이겠죠.
사실 우리 나라 사교육 문제가 해결되기 어려운 것처럼, 이 문제 역시 해결되기 어렵습니다. 사회 구성원들의 생각이 모두 다르고, 자신에게 가까운 미래의 이익만 바라보기 때문이지요. 모두 불확실성을 강조하는 사회로 변화되면서 발생한 일입니다. 과거에도 그렇지 않은 것은 아니었습니다만, 최근 이십여 년 간, 그리고 앞으로 점점 더 심해질 것입니다.
사교육이 심해지면 공교육이 부실해져 결국 사회적 손해가 된다는 것을, 그 후유증으로 고등 교육조차 부실해진다는 것을 현상을 통해 모두 보고 있으면서도 모두가 사교육을 다시 선택할 수 밖에 없게 되는 것은 이번 금융 위기의 대응에서도 똑같이 적용됩니다. 이래서 점점 ‘국개론
’이 힘을 얻어가는 모양입니다.
하지만, 저 역시도 불확실한 미래 앞에서 태연해지기는 너무나도 어렵습니다. 남들과의 관계든, 저의 욕심이던 간에…
BSTR은 비주얼 베이직에서 사용하는 문자열 형식입니다. 'Basic String' 혹은 'Binary String'의 약자로 흔히 알려져 있습니다. C나 C++류의 프로그래밍 언어만 다루던 사람들은 당연히 문자열은 끝이 0으로 끝나는 문자들의 배열로 생각합니다. 그런데, 문자열들은 보통 'null-terminated string' 또는 'C-style string'이라고 말합니다. 즉, 문자열을 나타내는 방법의 하나일 뿐입니다. 뭐, 다른 언어에서는 어떻게 표현하는 지 모르겠지만,,, 문자열이라는 자료형이 존재하지 않는 C류의 프로그래밍 언어는 배열을 사용해서 문자열을 나타내기에 저렇게 된 것입니다.
그럼 왜 C와 C++에서 BSTR을 사용하게 되었는가를 알아봐야겠지요?
내가 만드는 프로그램이 C++ 언어로만 구현이 되었다면, 다른 언어가 어떻게 생겼든 알 바 아닙니다. 그런데, 요즘은 이런저런 프로그램들이 얽히고 섥혀서 돌아갑니다. MS 워드에 MS 엑셀의 표가 들어가고, 그 표를 더블클릭하면 MS 엑셀의 편집 화면이 워드 안에 생깁니다. 비주얼 베이직 스크립트로 MS 워드의 동작을 막 자동화할 수도 있죠. 이런 복잡한 예가 아니더라도, 비주얼 베이직으로 짠 프로그램이 내가 만든 C++ 프로그램의 기능을 이용하거나, 그 반대가 될 수도 있습니다.
OLE, 자동화, COM 뭐 이런 개념들입니다. 그 말많은 ActiveX도 이러한 류의 기술입니다. 이것들은 여기서 다룰 주제는 아니니 넘어갈게요. (물론, BSTR에 대해 궁금한 분들 대부분이 COM과 같은 것을 공부하는 분들일테니 굳이 안다루어도 되겠죠??)
MS에서 아주 강하게 미는 프로그램 개발 환경이 있습니다. 바로 비주얼 베이직이지요. (요즘에는 C#을 미는 것 같지만) 위에서 서로 다른 프로그래밍 언어들이 데이터를 주고 받을 필요가 생겼다고 말씀드렸죠? 기본적인 숫자 형식은 어느 프로그래밍 언어나 대동소이하니까 그냥 쓸 수 있다고 하더라도 다른 것들은 좀 문제가 있습니다. 그 중에서도 기본 숫자 형식들만큼이나 자주 쓰는 것이 문자열이죠.
이제 감이 오셨을 것입니다. 왜 BSTR이 사용되는지. 이와 비슷한 이유로 VARIANT나 SAFEARRAY 등도 쓰이는데, 마찬가지로 모두 비주얼 베이직에서 쓰는 자료형입니다.
그럼 이제 BSTR이 어떻게 생겼는지 보죠.
typedef WCHAR OLESTR;
typedef OLESTR FAR * BSTR;
WCHAR이라는 것 역시 재정의된 타입 이름인데, 호환성을 위해 short이나 wchar_t 등이라고 보시면 됩니다.
앞의 4 바이트 부분은 뒤의 문자열이 몇 개의 문자로 이루어져 있는지를 적는 곳입니다.
중간은 2-byte짜리 문자로 이루어진 배열입니다. 2-byte라는 것이 중요합니다. 최근의 C/C++ (C99 이후)들은 유니코드를 지원하기 위해서 2 바이트짜리 문자형인 wchar_t가 기본적으로 제공됩니다. 뭐 그렇지 않다고 하더라도 우리는 short이라는 자료형이 있으므로 걱정 없습니다.
마지막 2 byte는 0입니다. 이것은 C 스타일의 문자열과 똑같죠. 주의할 것은 BSTR이 2바이트 문자형의 배열이므로 문자열 끝 기호 역시 2바이트로 0입니다. 보통 이 부분을 'Terminator'라고 부릅니다.
그런데 재미있는 것은 BSTR이라는 포인터형이 가리키는 곳입니다.
그림처럼 전체의 맨 앞이 아니라 문자가 시작되는 곳을 가리키고 있습니다.
그렇다면 이것은 안되겠네요!
BSTR bstrArtist = L"Muse";
안되는 이유 아시죠?
그럼 어떻게 BSTR 문자열을 만들까요?
이런 식으로 해볼 수도 있겠네요!
wchar_t* wszArtist = L"Muse";
BSTR bstrArtist = NULL;
unsigned long* pLPrefix = NULL;
/* number of chars in wszArtist + size of legnth prefix + size of terminator */