« Previous : 1 : ... 172 : 173 : 174 : 175 : 176 : 177 : 178 : 179 : 180 : ... 221 : Next »

오늘날, 어떤 데이터(개념상 Document라고 불리는)를 메모리에 완전히 읽어들여서 사용자가 그 데이터를 편집할 수 있는 업무용 프로그램에는... 거의 필수로 undo 기능이 있다.
이건 우리가 잘 실감을 못 해서 그렇지 사용자에게 심리적으로 굉장한 안정감을 주는 편리한 기능이다. 뭘 잘못해서 망쳐 놓더라도, '미리 저장 -> 지금 문서를 저장 안 하고 예전 문서를 다시 불러오기' 같은 뻘짓을 안 해도 Ctrl+Z만 누르면 만사 OK.

소프트웨어 GUI 가이드라인 교과서를 보면, 소프트웨어는 사용자에게 '용서'(forgiveness)라는 덕목을 발휘해야 한다는 말이 나온다. 사용자가 아무리 바보짓을 하더라도 이를 최대한 추스리고 수습하고 원상복귀 할 수 있어야 한다는 뜻.
컴퓨터 프로그램은 기독교의 하나님 같은 존재가 아니다. “자유 의지가 있으니, 하늘나라든 지옥이든 선택에 따른 책임도 전적으로 네 몫이다” 주의가 아니다. 그러니 인간의 삶에도 Undo가 있으면 참 좋을 텐데 현실은 그렇지 못하니 참으로 안습이다. 오히려 '말은 하고 못 줍는다', '엎질러진 물', '소 잃고 외양간 고친다' 같은 냉정한 속담만이 있을 뿐이다.

잡설이 길어졌다만,
역사적으로 Undo라는 개념이 허접하게나마 가장 일찍부터 존재한 분야는 그래픽 프로그램이었다.
걔네들은 원래부터 문화가 좀 독특해서 마우스의 비중이 매우 높으며, 우클릭이 Context menu의 의미로 쓰이지도 않을 정도이다.
그리고 근본적으로 마우스라는 게 키보드보다 실수를 훨씬 더 하기 쉬운 입력 장비이고, 한 번의 동작으로 수백· 수천 개의 픽셀이 한꺼번이 바뀔 수 있기 때문에 Undo가 없으면 안 된다.

문득 든 생각: 그래픽 프로그램을 이용해서 마우스로 Freehand drawing을 하는 도중에 bksp 키를 누르면.. 직전의 수 픽셀 단위로 곡선을 철회하는 기능이 있으면 좋을 것 같다. 정교한 도트 노가다 할 때 유용할 것 같다. 보통 Ctrl+Z 누르면 그렸던 선 전체가 한 방에 날아가 버리잖아?

물론 Undo라는 건 그렇게 쉽게 구현할 수 있는 기능이 아니며 메모리 오버헤드가 크다.
더구나, 과거에 Undo 기능이 있던 프로그램은 딱 한 단계밖에 취소가 되지 않았었다. Ctrl+Z를 누르면 직전 작업을 취소했다가, 다시 살렸다가 하기만을 반복할 뿐이었다. (메모장.. 정확히 말하면 윈도우 운영체제의 에디트 컨트롤도 딱 그 수준의 1단계 Undo를 지원한다.)
수십, 수백 단계의 작업을 고스란히 취소하고 취소 내역을 다시 철회(redo)까지 하는 command history 수준의 multi-level undo 기능은 1990년대까지만 해도 MS 워드 같은 소수의 상업용 대형 프로그램에서나 볼 수 있었다.

이런 프로그램은 Document의 내용을 변형하는 모든 명령들이 체계적으로 분류가 돼 있다. 그래서 편집 메뉴를 열어 보면 단순히 '실행 취소 / 재실행'이라고만 돼 있는 게 아니라 '삭제 취소 / 취소된 자동 완성 재실행'처럼, 무슨 명령이 직전에 취소되었고 무엇을 재실행할지 명령의 이름까지 메뉴에 친절하게 표시돼 있기도 한다.
그 반면, Undo/redo를 염두에 두지 않고 Document를 고치는 코드가 제멋대로 섞여 있던 프로그램에다가 어느덧 갑자기 multi-level Undo/redo 기능을 최초로 추가할 일이 생겼다면 아마 십중팔구 코드를 다 갈아엎는 대공사를 해야 할 것이다.

컴퓨터의 성능이 열악하던 도스 시절엔, Undo와 Redo가 모두 존재하는 프로그램은 매우 드물었다.
아래아한글 1.x는 좀 특이한 경우인데, 줄 끝까지 지우기· 단어 지우기 같은 몇몇 지우기 명령으로 인해 지워진 텍스트만을 1회에 한해 되살리는 Undo 기능이 있었다.
그 후 아래아한글 2.0에서 97은 그 Undo의 단계가 3회로 늘었을 뿐이었다. 내 기억이 맞다면, 이 기능은 최근 3회의 주요 지우기 단축키(메뉴에 등재되지 않은)에 의해 지워졌던 텍스트 중 하나를 골라서 커서가 있는 곳에다 삽입해 주는 기능에 불과했다. 원래 있던 위치에 되돌려 놓는 것도 아니고... -_-

Ctrl+X(오려두기)야 본문이 클립보드에 고스란히 들어가 있으니 별도의 Undo 버퍼에다 저장할 필요가 없고,
Ctrl+E(지우기)로 지워진 텍스트는 의도적으로 되살리기가 전혀 되지 않는다고 도움말에 친절하게 안내까지 돼 있었다. ^^;;
그것 말고 문서나 표 레이아웃을 잘못 건드려서 망쳤다거나 하는 더 중요한 기능에 Undo 따위는.. “Undo 뭥미? 그거 먹는겅미? 우걱우걱...”이었다. 그냥 이전 문서를 새로 불러오는 수밖에..
이런 불편한 프로그램을 옛날 사람들은 어떻게 쓰고 지냈을까?

그래서 아래아한글 2002는 256단계 undo가 지원된다고 잔뜩 광고를 하고 다녔었다. MS 제품들은 진작부터 지원한 기능인데도 말이다. 하긴, 그것 말고도 글자 크기 제한이 드디어 없어지고 글자색 제한이 없어진 것도 개인적으로 무척 마음에 들긴 했다. better late than never이다.

<날개셋> 한글 입력기의 편집기 프로그램은 1.x와 2.x 시절에는 Undo 비슷한 기능도 전혀 없었다. 3.0에 가서야 32단계의 multi-level undo가 추가되기는 했으나... 글자 하나, 한글 낱자 하나 입력되는 모든 단계가 histroy에 기록된지라 실용성이 시원찮았다.
그것이 지금의 형태로 개선되 것이 4.2 버전부터이다. 연속된 에디팅 동작뿐만이 아니라 불연속적인 에디팅 동작을 한 history로 통합하는 기능까지 추가되어, 여러 블록을 동시에 삭제한 것이나 Replace All 명령을 내린 것도 한 번에 취소가 가능해졌다.

사실 <날개셋> 편집기의 에디팅 엔진은 아직 좀 효율적이지 못한 구석이 있다. Undo/redo 명령을 내리면 그 부분이 아무리 사소하더라도 문서 전체의 레이아웃을 싹 다시 하고, 화면 전체를 새로 그린다. 그렇기 때문에 수~수십 MB짜리 텍스트를 연 뒤에 Ctrl+Z를 꾹 누르고 있기가 겁난다. 본인은 이 프로그램을 만든 사람이고 프로그램의 내부 디테일이 어떤지를 잘 알기 때문에 그러기가 더욱 꺼려진다.

2004년에 만든 3.0 이래로 그냥 brute-force 알고리즘을 그 부분만은 아직까지 최적화를 못 했다. 한글 입력 부분과 직접적인 관계가 없고, 딱히 크게 티가 나는 부분이 아니다 보니 지금까지 방치되어 온 것이다. <날개셋> 한글 입력기 6.0의 다음 버전은 이 부분을 개선하여, 이제 안심하고 Ctrl+Z를 꾹 누를 수 있는 프로그램이 될 것이다.

Undo 기능과 관련된 얘깃거리를 두 가지만 더 꺼내고 글을 맺겠다.

첫째, 예전에 한번 언급한 적이 있듯이, 프로그램들이 Undo는 거의 예외 없이 Ctrl+Z로 정착해 있는 반면 Redo는 단축키가 프로그램마다 일치하지 않는 경우가 있다. MS의 관행은 Ctrl+Y인 듯하지만 Ctrl+Shift+Z인 프로그램도 있다.
아래아한글은 도스 시절에 Ctrl+Y가 지우기 명령의 일종이기 때문에 주의해야 한다. Redo를 생각하고 눌렀다가는 Redo는커녕 텍스트를 지우면서 후폭풍으로 기존 Undo history까지 모두 날려 버리기 때문이다!

둘째, Multi-level undo를 잘 구현한 프로그램이라면, 문서의 modified 플래그 처리도 잘 되어야 한다. 무슨 말이냐 하면, 문서를 저장했다가 어딘가를 건드린 후(= modified 플래그 켜짐), Ctrl+Z를 눌러 그 작업을 철회한다면 문서는 당연히 다시 unmodified 상태로 바뀌어야 한다.
그리고 반대로, 저장한 문서에 대해서 Undo를 해서 modified 상태가 됐더라도, 그걸 다시 Redo로 철회했다면 문서는 unmodified로 되돌아가야 한다. 논리적으로 당연한 얘기이다. <날개셋> 편집기는 multi-level undo가 처음으로 지원되기 시작한 3.0 때 이거 하나는 아주 철저하게 잘 구현해 뒀다.

비주얼 C++ 에디터, 그리고 국산 에디터인 EditPlus는 이 플래그 처리가 잘 된다. MS 오피스 제품도 마찬가지.
그러나 AcroEdit는 이게 되지 않아서 불편하며, 아래아한글도 2007은 처리가 되지 않는다. WordPad 역시 지원 안 함.

Undo나 Redo 같은 Command history 기능은 문서의 modified 상태까지 예전으로 되돌리는 명령이기 때문에 문서를 건드리는(modified 플래그를 언제나 켜는) 동작보다 상위에서 돌아가야 할 텐데, 이 점을 미처 고려를 못 한 것 같다. Undo나 Redo나 문서를 고치는 기능인 건 매한가지이기 때문에 무조건 modified 상태로. ^^

Posted by 사무엘

2011/06/26 08:23 2011/06/26 08:23
, , ,
Response
No Trackback , 4 Comments
RSS :
http://moogi.new21.org/tc/rss/response/531

본인의 국적인 대한민국의 건국 정체성에 대해서는 잘 알다시피 두 개의 극단적인 평이 있다.
엄친아 이 승만의 영도력으로 그 어렵고 열악하고 위태롭던 여건하에서(우리나라는 국제적으로 무슨 권리가 있는 전승국도 아니었다!) 중국도, 소련도 아닌 미국을 끌어들여 공산주의가 아닌 자유 민주주의 국가를 한반도에다 기적적으로 세웠으며, 더구나 초대 대통령이 크리스천이었던 덕분에 제헌 국회 때 감사 기도까지 올렸더라...;; 이건 밝은 면만 본 것이다.

이 국가의 사회 시스템에 대해 굉장한 피해의식이 있는 사람들이 무슨 얘기를 하는지를 굳이 여기서 또 설명하지는 않겠다. 단적인 예로 인터넷 상에 이 승만을 칭송하는 글의 양하고, 악담과 저주를 퍼붓는 글의 양의 비율이 어떻게 되던가? -_-

그런 것처럼, 미국의 태생에 대해서도 마찬가지이다.
미국이 건국 이념이 담긴 메이플라워 서약에서부터 “하나님의 이름으로 아멘”이 들어가고 지폐에 “In God We Trust”가 들어간 기독교 국가라고 자랑스러워하는 기독빠가 있는가 하면,
사실 초대 대통령인 조지 워싱턴을 포함한 미국의 건국 공신들의 상당수는 그저 이신론(deism)을 믿었을 뿐이며 성경의 하나님을 믿은 게 아니었다는 반론도 존재한다. 심지어 그들이 프리메이슨이었다는 주장까지 있다..;;
또한, 과거의 흑인 노예라든가 인디언들 학대 문제 같은 흑역사를 들추면서 미국을 까는 사람도 있다.

뭐, 미국이 아무리 기독교 냄새가 짙다 해도 미국의 국교가 기독교로 헌법에 명시되어 있기라도 한 건 아니며, 독일처럼 목사가 아예 공무원이기라도 한 것도 아니다. 오히려 미국은 시간이 갈수록 기독교 냄새가 옅어지고 있고, 이를 미국 내부의 크리스천들은 배도와 타락-_-이라고 표현한다.

본인은 개인 신념상의 친미와 반미 중 하나만 고르라면 명백하게 친미이다.-_-;;; 미국이 전세계를 상대로 오지랖을 떨면서 잘한 것도 있고 병크를 저지른 것도 다 있겠지만, 미국이 지금까지 세계 평화와 인류 복지에 기여하고 유익을 끼친 것이, 잘못한 것을 월등히 압도한다고 의심의 여지 없이 인정한다. 소련· 중국이나 일본 같은 나라가 세계 패권 국가였다고 생각해 봐라. 미국보다 훨씬 더 나쁜 짓 많이 했겠지..
특히 다른 나라도 아니고 대한민국 같은 나라가 반미 할 자격이라고는 정말 없다고 생각한다.

미국은 그나마 국민 의식이 선진적인 덕분에, 저렇게 많은 자유가 있으면서도 나라가 그 정도나마 질서가 유지되고 잘 돌아간다. 부자에 대한 인식이 우리나라보다 낫고, 기부나 상속에 대한 문화도 더 낫다. 국민 대다수가 그냥 시골에서 자영업이나 농업에만 종사해도 집과 차 장만하고 심지어 호신용 총까지 장만해서 잘 산다. 그러나 소수 똘똘이 엘리트들은 그야말로 세계를 호령한다.

미국은 9· 11 테러 같은 예외를 제외하면 역사상 자국 영토가 적의 침략을 직접 받은 적이 없다. (그러나 한반도는 역사상 침략을 몇 번 받았다더라? -_-) 미국의 현충일인 재향 군인의 날은, 자국을 지키기 위해 목숨을 바친 군인이 아니라 세계 각국에 나가서 남을 위해 싸운 자국 군인을 기리는 날이다.
이 뿐이던가? 미국은 건국 당시부터, 선거로 뽑힌 국가 원수가 지정된 임기 동안만 나라를 다스리는 공화정 대통령제를 시행했다. 200여 년의 역사 동안 비록 대통령의 암살은 있었을지언정 군사 쿠데타가 일어난 적이 없고 정권이 비교적 평화롭게 잘 교체되어 온 것도 한국의 현대사와 비교하면 정말 대단한 면모가 아닐 수 없다.

그 미국의 주요 전직 대통령들을 다음과 같이 요약해 봤다. 미국 시민권 득템 시험을 통과하려면 이런 거 달달 외워야 하지 않을까 싶다. 과거에 스티브 유 씨도 공부 열심히 했을 것이고. -_-
아, 혹시나 해서 하는 말인데, 본인은 “기독교인은 무조건 기독교인 대통령을 지지해야 한다” 주의가 절대 아니다. 오해 없기 바란다. 글 중에 나오는 “미국의 크리스천들은 대체로 이 대통령에 대해 이렇게 생각한다”라는 문장을 “김 용묵도 크리스천이기 때문에 이 미국 대통령에 대해 이렇게 생각한다”로 확대 해석해서 받아들이지도 말기 바란다.

조지 워싱턴: 미국의 초대 대통령이다. 그 당시 국가 원수로서의 주변의 비교 대상이 왕밖에 없다 보니, 아직은 공식 석상에서 자신을 3인칭 '짐'-_-이라고 부르고 왕처럼 행세한 면이 없지는 않다. 그러나 그는 대통령으로서의 훌륭한 본도 충분히 보였다.
그는 미국의 당시 국력에 비해서 개인적으로 이미 굉장한 부자였기 때문에, 연봉을 안 받고(요즘도 뭐 연봉 1$ CEO들이 있으니까^^) 대통령 직무를 하려고 했다. 그러나 자기 이후에는 가난한 사람 중에도 대통령이 나올 수 있다는 점을 염두에 두고, 선례를 남기려고 연봉을 받았다. 또한 결정적으로 그는, 후세에 독재자가 나와서는 안 된다며 2선까지만 한 후 깨끗이 물러났다.(물론, 이 양반은 어차피 권좌에 안 있어도 워낙 잘 살았고 아쉬울 게 없던 처지이기도 했지만. ㄲㄲ)

우리나라 초대 대통령도 애초에 부카니스탄 같은 막장 정부를 수립한 게 아니었던 이상, 딱 3선까지만 하고 스스로 물러났으면 참 좋았을 텐데. 주위의 아부꾼들이 자꾸 부추기니까, 진짜 국민이 원하는 줄 알고, 고스톱으로 치면 스톱을 안 하고 쓰리고 포고 하다 피박 나서 딥다 바가지 썼다. -_-;;

에이브러햄 링컨: 미국이 단일 국가라기보다는 아직 array/set of States에 가깝고(united가 아니라!) 껀수만 생기면 얼마든지 서로 찢어질 수도 있던 시절... 남북 전쟁이라는 비극까지 벌어지던 시절에 미국 국민들의 정신적 지주 역할을 하고, 연합한 국가로서의 미국의 근간을 세운 위대한 지도자이다.
링컨 하면 노예 해방으로 유명하지만, 그가 그렇다고 해서 흑인을 백인과 완전히 동등하게 대우하고 동등한 권리를 줘야 한다고까지 주장한 박애주의자는 물론 아니었다. 그때 아직 시대가 어느 시대였는데..
또한, <백악관을 기도실로 만든 링컨> 같은 기독교 서적까지 있긴 하지만, 이 사람은 평생 교회에 출석하지 않았으며, 신앙면에서 무척 회의적으로 지냈다는 설도 전해진다. 그래서 골수 남부 백인 출신인 피터 럭크만 같은 성경학자는, 링컨 대통령이 사실 구원 받았다는 증거조차도 없다고까지 그를 깐다. 성경을 믿는 크리스천들끼리라 해도 정치 성향이 일치할 수는 없는 모양.

시어도어 루스벨트: 20세기 초에 상당히 카리스마적인 지도력을 발휘한 훌륭한 대통령이었다고 한다. 그러나 한국의 입장에서는 가쯔라-태프트 밀약을 승인한 정권의 수뇌였으니 감정이 좋을 수는 없을 듯. “미국이 보기에도 조선이라는 듣보잡 나라는 식민지로 좀 먹혀도 이상할 게 없는 미개한 나라인 반면, 러일 전쟁에서 당당히 이긴 너희 일본은 본격 선진국 강대국 인증. 일본이 조선을 갖도록 하고, 나 미국은 필리핀을 사이좋게 나눠 갖겠다.”
그 당시는 이런 합의가 힘의 균형이요 세계 평화와 국제 사회의 질서로 간주되었으며, 이런 거 중재를 잘 한 게 아예 노벨 평화상감이던 시절이었다!
이렇게 샤바샤바가 몰래 되고 나니까, 이 승만 같은 사람이 나중에 뒤늦게 미국을 상대로 아무리 조선 독립을 호소하며 외교 로비를 해도, 얘기는 이미 다 끝났으니 당연히 씨알도 안 먹혔다.

우드로 윌슨: 민족 자결주의를 주장하고 국제 연맹을 창설한 저명한 대학 교수 겸 정치인. 우리나라의 초대 대통령인 이 승만에게 박사 학위를 준 지도 교수이다. 하지만 그의 지론은 정세상 조선의 독립에 그리 도움이 되지는 않았다. 이에 낙담한 이 승만이 “대학원에서 국제법을 아무리 배워 봤자 결국 세상은 법과 원칙이 아니라 강대국 꼴리는 대로만 돌아가니 아무짝에도 쓸모 없군요. 내가 낸 등록금 다시 돌려 주세요”라는 뼈 있는 농담을 건네기도 했다.
윌슨은 미국에서, 이 승만은 한국에서 각각 현재까지, 박사 학위를 소유한 유일한 대통령이다. (명예 박사 말고) 쉽게 말해 최고 고학력자라는 뜻.

프랭클린 루스벨트: 대공황을 극복하기 위한 뉴딜 정책을 밀어붙인 걸로 유명한 사람이고, 미국 역사상 유일하게 12년이나 대통령을 한 합법적 독재자이다. 그때까지 미국 헌법에 중임 제한이 명시되어 있지 않긴 했지만, 통상 대통령은 많아야 2선까지만 하고 제 발로 물러났었는데, 이 사람은 덥석 4선까지 해 버린 것. 그래서 대공황과 훗날 2차 세계 대전의 진주만 폭격 사이엔 기간이 꽤 긴 것 같은데, 이례적으로 미국의 대통령은 동일 인물인 것이다.
그는 소아마비를 앓아서 휠체어를 탄 것으로 유명하다. 종전을 앞둔 1945년에 돌연사했다. (뇌출혈로 인해 왕하 4:19의 장면처럼 세상을 떠났다) 그리고, 그의 서거 후에 대통령의 중임 제한이 헌법으로 추가로 명시되었다.

해리 S. 트루먼: 부통령을 하다가 루스벨트의 갑작스러운 서거로 인해 대통령직을 물려받은 양반. 대통령이 되자마자 194~50년대에 세계의 역사를 바꾸고 한국의 운명도 바꾸는 중요한 결정을 여러 차례 내렸다. 먼저 일본에다 원자폭탄의 투하를 승인함으로써 본격 2차 세계대전 종결자로 등극하였으며, 6· 25 때는 반대로 맥아더 장군의 과격한 행동거지를 견제하고 오히려 그를 해임하기도 했다.
이것 때문에 맥아더를 오로지 민족의 은인으로만 아는 반공 진영에서는 트루먼을 싫어하는 편이나, 맥아더도 당시에 하극상을 벌이면서 너무 무모한 작전을 강행하기도 했었다.

리처드 닉슨: 풍채 좋고 업적이 아주 없는 것도 아닌 양반이다만, 워터게이트 사건 하나로 이미지 다 말아먹었다. 결국 탄핵 당하기 직전에 사임했으며, 미국 역사상 유일하게 임기를 다 못 채우고 굴욕적으로 자방한 대통령으로 역사에 남았다. (본진 털리고 엘리 당하기 직전에 겨우 gg 치고 먼저 나갔다 -_-)

존 F. 케네디: 아주 유명한 대통령. 40대 초반의 상당히 젊은 대통령이고 미국 역사상 최초의 가톨릭 신자였다. 케네디의 집안은 어렸을 때부터 '대통령 배출'을 위해서 자녀들끼리 극성스러운 경쟁과 엄친아 스펙 쌓기 스파르타식 교육이 행해졌다고 한다.
가톨릭 신자는 교회 헌법상 국적이 둘이다(다른 하나는 바티칸-_-). 이 때문에 케네디는 대선 후보 시절에 “당신이 대통령이 된다면, 만약 미국의 국익과 바티칸 시국의 국익이 상충할 때는 어떻게 하겠는가?” 같은 낚시성 질문까지 주변으로부터 받았다고.
종교가 천주교라는 점, 취임 선서 때 무엄하게도(?) 성경에 손을 얹지 않은 점, 게다가 공립 학교에 비치돼 있던 십계명을 철거하고 성경 공부· 기도 시간을 없앤 점들 때문에 미국 내부의 크리스천들로부터는 나라의 기강을 싹 말아먹었다고 정말 축시의 참배급으로 가루가 되도록 폭풍처럼 까이고 있다.

잘 알다시피 케네디는 상당히 괴이하게 암살당했다. 그런데 그 암살범도 이내 암살을 당해 버려서 케네디의 죽음은 각종 음모론의 좋은 소재가 되고 있다. 무명 병사의 군대 의문사도 아니고 한 대통령의 죽음에 왜 이렇게 의혹이 많나? ㄲㄲ

로널드 레이건: Reagan이라고 적혀 있어서 '리건'이라고 낚이기 쉬운데, great처럼 이때 ea는 '레이건'이라고 발음된다. ㄲㄲ 1980년대, 우리나라의 5공 시절을 풍미했던 대통령으로, 70대의 상당한 고령으로 대통령에 취임했고 퇴임 후에도 90세가 넘게 장수했다. 킹 제임스 성경에 대해서 “우리가 처한 온갖 복잡한 문제들에 대한 해답은 저 작은 책 안에 다 들어있다”라는 말을 남긴 바 있다.

조지 부시: 이 사람과 관련해서는 걸프 전쟁밖에 생각 안 난다. 이 사람 자신은 2차 세계대전 참전 용사 출신.
듣자 하니 대선 시절엔 경쟁 후보를 상대로 사형 제도 드립을 시전하여 지지율을 뺏어오는 데 성공했다고 한다. “세상에, 자기 가족을 죽인 살인범에게도 사형 집행을 반대하겠다니, 이런 반인륜적인 불온사상의 소유자가 어찌 대통령이 될 수 있겠습니까 ㄲㄲㄲㄲㄲ” 나도 크리스천으로서 사형 제도를 적극 지지한다만 저건 말장난스럽고 좀 유치하다.. -_-;;

빌 클린턴: 스캔들 하나 때문에 탄핵 위기까지 갔던 양반. 닉슨과 마찬가지로 스캔들 자체보다도 그걸 무마하려고 거짓말을 한 게 그의 입지를 더욱 위협했었다. 문란한 사생활에다가 예수회 소속의 대학 출신이라는 점 때문에 미국의 보수-_- 기독교 진영에서는 그를 무척 싫어했지만, 대통령으로서 행적에 대한 세속 평가는 좋은 편이다.

조지 W. 부시: 젊었을 때 방황도 하고 좀 '놀기도' 했다가 나중에 기독교 신앙으로 교화되고 정신을 차린 케이스이며, 예일대도 사실 가문빨로 들어간 거나 마찬가지이다. 개인적으로 만나면 정말 친절하고 온화하며, 클린턴과는 달리 사생활도 깨끗한 사람이라고 하는데 정치인으로서는 좀 띨띨.. -_-;; 이 양반에 대해서 뭐 전쟁광이네 어쩌네 하는 모함에는 난 별 관심이 없다만, 진짜 어눌했던 건 사실이다.
그나마 신앙빨 하나 내세워서 재선까지도 아슬아슬하게 성공함. 부자가 나란히 대통령이 된 사례로 미국 역사상 둘째라고 한다.

버락 오바마: 미국 역사상 최초의 흑인 대통령. 더 이상의 자세한 설명은 생략한다.

이 사람들 말고도 미국 역사를 공부해 보면 재미있는 사람이 굉장히 많이 나온다.
성경의 열왕기처럼 누가 왕이 돼서 죽을 때까지 실컷 나라를 통치하다가 또 자기 아들에게 왕위 물려주는 패턴이 아니라, 선거로 대통령을 선출해서 지정된 임기 동안만 통치를 하게 하는 나라의 내역은 색다르지 않을 수가 없다.

Posted by 사무엘

2011/06/24 08:45 2011/06/24 08:45
, , , , ,
Response
No Trackback , 12 Comments
RSS :
http://moogi.new21.org/tc/rss/response/530

C/C++로 프로그램을 개발하는 과정에서 아주 난감해지는 경우 중 하나는, 바로 Debug 빌드와 Release 빌드의 실행 결과가 서로 다를 때이다. 개발 중이던 Debug 빌드 스냅샷에서는 잘만 돌아가는 프로그램이 정작 최적화된 Release 빌드에서는 이따금씩(항상도 아니고!) 에러가 난다면?

이런 버그는 문제를 찾아내려고 정작 디버거를 붙여서 실행할 때는 재연되지 않는 경우가 태반이어서 프로그래머를 더욱 애먹인다. 특히 복잡한 멀티스레드와 관련된 버그라면 그저 묵념뿐..;; 하지만 그런 특수한 경우가 아니라면, Debug와 Release의 실행 결과가 다른 이유는 본인의 경험상 거의 대부분이 초기화되지 않은 변수 때문이었다.

비주얼 C++은 Debug 빌드에서는 초기화되지 않은(공간 확보만 해 놓고 프로그램이 아직 건드리지는 않은) 메모리의 영역을 티가 나는 값으로 미리 표시도 해 놓고 아주 특수하게 취급해 준다. 메모리를 할당해도 좌우에 여분을 두고 좀 넉넉하게 할당하며, 때로는 그 넉넉한 여분 공간의 값이 바뀐 것을 감지하여(바뀌어서는 안 되는데) 배열 첨자 초과 같은 에러를 알려 주기도 한다. 프로그래머의 입장에서야 이건 꽤 유용한 기능이다.

그러나 Release 빌드에는 이런 거추장스러운 작업이 물론 전혀 없다. 그러니 메모리 범위를 초과한다거나, 읽어서는 안 되는 엉뚱한 주소의 메모리로부터 값을 읽거나, 올바른 영역이더라도 초기화되지 않은 쓰레기 값을 얻었을 때의 결과는 두 빌드가 서로 극과 극으로 달라질 수밖에 없다.

이렇게, 빌드 configuration에 따라 동작이 달라지는 코드는 두말 할 나위도 없이 결함이 들어있는 faulty 코드이다. 이런 코드에서 문제의 원인을 찾는 건 극도로 어려운 일이다. 서울에서 김 서방 찾기, 모래사장에서 바늘 찾기, 사격장에서 흘린 탄피 찾기가 따로 없다. ㅜㅜ 자기가 짠 코드에서 결함을 찾는 것도 어려워 죽겠는데 하물며 회사 같은 데서 남이 짠 faulty 코드를 인수인계 받았다면... -_-;;;

(본인이 다니던 모 병특 회사에서 본인의 직속 상사는 이렇게 말했다. “그런 코드를 짜는 건 프로그래밍을 하는 게 아니라 똥을 싸는 거다.” 공감한다. -_-)

C/C++은 물론 간단한 지역 변수에 대해서야 ‘이 변수를 초기화하지 않고 사용했습니다’ 같은 지적을 컴파일 시점에서 해 준다. 그러나 복잡한 포인터나 배열로 가면 일일이 그 용법이 올바른지 컴파일 시점에서 판단하지는 못한다. 그저 프로그래머가 조심해서 코드를 작성하는 수밖에 없다.

이와 관련된 본인의 경험을 소개하겠다.
꽤 옛날에 짜 놓은 비주얼 C++ MFC 기반 GUI 프로그램 소스의 내부에서, 핵심 알고리즘만 떼어내서 다른 콘솔 프로그램에다 붙여야 할 일이 있었다.
그 당시에는 나름 구조적으로 프로그램을 만든 것이지만, 지금 관점에서 모듈간의 cohesion은 여전히 개판오분전이었던지라 상당수의 코드를 리팩터링해야 했다.

그래서 코드를 붙였는데, 원래의 GUI 프로그램에서는 잘 돌아가던 코드가 새로운 프로젝트에서는 얼마 못 가서 뻗어 버렸다. Debug 빌드와 Release 빌드의 실행 결과가 다른 건 두말 할 나위도 없거니와, 심지어 같은 Release 빌드도 F5 디버거를 붙여서 실행하면 별 탈이 없는데 그냥 실행하면 뻗었다! 이건 스레드 쓰는 프로그램도 아닌데! 이거야말로 제일 골치 아픈 경우가 아닐 수 없었다.

Debug 빌드는 Release 빌드보다 워낙 느리게 돌아가고, Release 빌드도 디버거를 붙였을 때와 그렇지 않았을 때 성능이 살짝 달라진다. 그러니 앞에서 언급했듯이 스레드 관련 race condition은 영향을 받을 수 있다. 하지만 그런 것도 아니라면? 의심스러운 배열은 무조건 다 0으로 초기화하고, 혹시 내가 리팩터링을 하면서 실수를 하지는 않았는지 몇 번이나 꼼꼼이 살펴봤지만 문제는 눈에 띄지 않았다.

별 수 있나. printf 로그를 곳곳에다 박아 넣어서 의심스러운 부분을 추적한 뒤 다행히 문제를 찾아냈다.
게임 같은 리얼타임 시스템에서는, 심지어 디버그 로그 찍는 코드만 추가해도 버그가 쏙 숨바꼭질을 해 버리는 막장 중의 막장 경우도 있다만 내 프로그램은 그런 정도는 아니어서리..;;

사실은 기존 GUI 프로그램에서 돌아가던 코드에서부터 문제가 있었다.
배열을 선언했는데, 0~1번 인덱스에 접근할 일이 없어서

ptrData = new char[100];
ptrData-=2;

같은 잔머리를 굴려 줬던 것이다. 요런 짓을 옛날에 Deap 자료구조를 구현할 때도 했던 것 같다.
그러니 이 포인터로는 0과 1번 인덱스를 건드리지 않아야 하는데...
그런데 그것이 실제로 일어났습니다. ㄲㄲㄲㄲㄲ

그 허용되지 않는 메모리의 상태가 GUI 프로그램과 콘솔 프로그램, 심지어 같은 프로그램도 Debug와 Release, 디버거 붙이냐 안 붙이냐 여부에 따라 싹 달라져서 나를 골탕먹였던 것이다. 예전에는 수 년째 아무 탈 없이 잘 돌아가던 코드가 말이다.
저런 간단하고 고전적인 배열 첨자 초과 문제가 이런 결과를 야기할 줄 누가 알았을까?

C/C++은 내가 짠 코드를 내가 완전히 책임질 수 있고 컴퓨터 관점에서의 성능· 능률· 최적화가 중요한 해커나 컴덕후에게는 가히 환상적인 언어이다. 이보다 더 좋을 수가 없다. 예전에 내가 비유했듯, 세벌식이 기계 능률과 인체 공학적인 특징을 잘 살린 것만큼이나 이 언어는 고급 언어의 특성과 기계적인 특성을 꽤-_- 잘 절충했다.

그러나 언어의 구조적으로 가능한 무질서도가 너무 높은 것도 사실. C/C++가 까이는 면모 자체가 크게 (1) 언어 자체의 복잡도 내지 결함 그리고 (2) unmanaged 환경이라는 여건 자체라는 두 갈래로 나뉘는 양상을 보인다. 오늘날의 소프트웨어 시스템에서 프로그래밍 언어는 모름지기 수십, 수백만 줄의 프로젝트에서 살인적인 복잡도를 제어 가능해야 하고, 작성한 코드의 최소한의 품질과 안전성이 보장되어야 하며, 또 무엇보다도 빨리빨리 빌드가 돼야 하는데 C/C++은 영 한계를 보이기도 한다.

뭐, 그래도 이미 C/C++로 작성된 코드가 너-_-무 많고 그것도 다들 중요한 저수준 계층에 있다 보니, 이 언어가 쉽게 없어지지는 않을 것이고 특히 C++은 몰라도 C는 절대 안 없어지리라.. ㅋㅋ 프로그래밍 언어의 라틴어급.

C/C++과는 전혀 다른 언어이다만, 과거엔 QuickBasic도 IDE에서 돌리는 프로그램과, 실제로 컴파일-링크를 한 EXE의 실행 모습이 대동소이하게 달라서 프로그래머를 애먹이기도 했다. 물론 이건 C/C++에서의 Debug/Release와는 다른 양상 때문에 차이가 나는 경우이다.
결론은, 프로그램 작성하다가도 틈틈이 Release 형태로 최종 결과물을 확인하는 게 필요하다. ^^

Posted by 사무엘

2011/06/22 08:23 2011/06/22 08:23
,
Response
No Trackback , 6 Comments
RSS :
http://moogi.new21.org/tc/rss/response/529

세벌식 찬사

요즘 <날개셋> 타자연습에서 추가된 "김 화백 어록" 연습글로 재미있게 타자 연습을 하고 있다. 이런 연습글을 진작에 추가할 생각을 왜 못 했는지 모르겠다. ㅋㅋㅋㅋ

본인은, 사람이 타자를 하는 동작이 컴퓨터 CPU가 돌아가는 과정과 비슷한 구석이 있다는 생각을 오래 전부터 해 왔다.
연습글은 기계어 인스트럭션들이고, 글을 읽는 사람의 눈은 디코더. 타자 속도는 클럭 속도.-_-;;
CPU에 캐쉬 메모리가 있고 파이프라이닝이 있는 것처럼, 사람이 타자를 하는 것도 사실은 글자 단위가 아니라 최소한 단어 단위, 덩어리 단위로 하게 된다. 영문 독해를 빨리 하려면 단어 하나하나가 아니라 덩어리가 통째로 머리에 들어와야 하듯, 타자도 마찬가지이다. 글자 나부랭이 깨작깨작 눌러가지고는 마치 독수리 타법만큼이나 속도가 빨리 날 수가 없다.

세벌식이 두벌식보다 우수하고 속도가 빠른 이유는, 겨우 자모 단위가 아니라 그렇게 머릿속의 덩어리를 그대로 글자판의 손동작으로 옮기는 데 두벌식보다 월등히 더 유리한 구조이기 때문이다. 익숙한 어절이 등장하면 그 초중종성 낱자와 손 모양이 일대일 일심동체가 되어 머리의 지시가 마구잡이로 손으로 전달되고, 머리는 그 글자의 다음 글자가 이루는 손 모양까지 예측하게 된다. 일명 날타. 이런 최적의 조건이 잘 만족되면 세벌식으로 단문은 900~1000타도 어렵지 않게 나온다.

CPU로 치면 파이프라인이 쫙쫙 잘 되는 인스트럭션이라 할 수 있는데 공 병우 세벌식은 우-좌 리듬감 덕분에 이런 게 잘 된다. 쭈루루룩~ 그냥 타자를 치고 싶어진다. '한글날' 같은 글자... 쫘르륵~ 파이프라인이 최적이다.

날타는 오타가 나기 쉽다. 그런데 세벌식은 모아치기라든가 각종 한글 입력 설정 보정을 통해서 그런 오타를 보완하는 시스템까지 갖출 수 있으니, 심리적으로 더욱 편하고 막힘없이 타자를 할 수 있다. 꽤 오랫동안 지치지 않고 장문을 단문 치듯 치는 게 가능하다.
물론 세벌식에서도 '예의, 엽, 까'처럼 좌우 교대가 어긋난다거나 동일 손가락 연타가 발생하는 글자는 미스가 발생하긴 하지만, 종성과 초성 사이의 불규칙한 왼손 연타로 온통 얼룩져 있는 두벌식의 불편함에 비할 바야 물론 아니다.

또한, 앞에서 예를 든 것처럼 대놓고 손가락 움직임이 어긋나는 연타까지는 아니지만 세벌식으로 치기 좀 어려운 글자가 또 있다. '불량률' 같은 단어는 검지의 운지가 1단에서 4단까지 들쭉날쭉해서 세벌식을 10년 넘게 쓴 본인에게도 여전히 쉽지 않다. 이런 글자는 날타가 안 통하고 한 낱자씩 속도를 줄여서 또박또박 쳐야 한다. CPU로 치면 공간 locality의 위배 때문에 캐쉬 미스가 나는 메모리 접근에 비유할 수 있겠다. 날타냐 정타냐를 잘 결정해야 오타 없이 빠른 타자를 할 수 있다. 오타가 한 번 나면 손실이 가히 엄청나기 때문에.

두벌식은 4단을 안 쓰고, 치기 편한 글자와 치기 불편한 글자 사이의 편차가 세벌식만치 심하지는 않다.
하지만 평균적인 타자 experience가 세벌식보다 훨씬 나쁘다. 세벌식은 입체 교차이고 두벌식은 신호등이 있는 평면 교차..

어차피 800타, 900타 치지도 못하고 스마트폰용으로 작은 화면에다 그냥 버튼 수 적은 입력 방식을 만들 때야 두벌식이든 그보다 더 복잡한 입력 방식이든 크게 상관할 바가 아니다만... 생업을 목적으로 방대한 양의 글을 입력할 수 있는 정도의 규모를 갖춘 기계에서 한글을 입력하는 데 세벌식을 생각하지 않는다는 건 어불성설이다.
특히, 타자기를 지나치게 폄하하는 의견에 본인은 다음과 같은 관점에서 동의하지 않는다.

첫째, 타자기의 형태를 거의 그대로 답습한 지금 같은 키보드보다 더 보편적이고 빠른 문자 입력 스키마는 지금까지 나오지 않았으며, 본인은 앞으로도 키보드가 그렇게 호락호락 없어질 거라고는 생각하지는 않는다.
참고로 한 10년 전부터, 스마트폰 같은 게 없던 시절부터도 앞으로 음성 인식 기술 때문에 키보드가 없어질 거라는 낭설이 떠돌았었다. 과연? -_-

둘째, 사람들은 공 병우 세벌식이 타자기를 고려하느라고 뭔가 굉장히 많은 걸 희생했다고 생각하는 경향이 많다. 그러나 그렇지 않으며, 공 병우 세벌식은 기계의 물리적 호환성과 사람의 편의· 심리라는 두 토끼를 매우 훌륭한 형태로 모두 잡았다.

그리고.. 늘 하는 말이지만, 오토마타가 장땡이 절대 아니다.
두벌식은 오토마타가 있으니까 컴퓨터에서나 겨우 문제될 게 없는 수준인 반면,
세벌식은 이론적으로 오토마타가 아예 없어도 되고, 있으면 당연히 두벌식보다 훨씬 더 앞서갈 수 있다.

세벌식이 글쇠 수가 좀 많은 것은.. 그래 솔까말 손가락이 짧은 사람에게 물리적으로 약간은 불편할 수 있다.
그러나 글쇠배열 자체가 외우기 힘들다거나 배우기가 그렇게 엄살 부릴 정도로 힘든 건... 절대 절대 아니다.
정말로 두벌식을 두 시간 만에 익혔으면 세벌식은 세 시간, 아니면 그래 까짓거 네 시간 만에 익히는 정도.
그러고 나서 평생 그 글자판을 쓰는 시간은 얼마나 되며, 평생 만들어 내는 글자는 몇 자나 될까?
이게 비교나 되는 게임이란 말인가?

그 글쇠 조금 더 익히는 대신에 얻는 것, 그리고 그 글쇠 좀 줄여서 잃는 것...
내가 보기엔 전자가 훨씬 더 남는 장사인데 사람들이 고작 그것만 갖고 야단법석을 떠는 게 안타깝다.

흔히, 지금 아무리 비용이 들더라도 100년 앞을 내다보고 미래를 위해서 해야 하는 투자의 예로 남북 통일도 있고, 독립 운동-_-도 있고 220볼트 승전도 제시되곤 하는데,
세벌식을 쓰는 건 그런 것보다도 더 비용이 덜 들고, 휠씬 '덜 극단적인' 예이다.

공 박사가 아니었으면 공 병우 세벌식 같은 글쇠배열은 도대체 얼마나 더 나중에야 나오게 됐을까, 아니 지구가 멸망하기 전에 발명되는 게 가능하긴 했을까?
컴퓨터는커녕 글을 기계로 쓴다는 생각 자체가 없던 시절에 그런 걸 만들 생각을 했다면, 공 박사는 얼마나 천재이고 시대를 앞서간 사람이었던가?

오늘은 모처럼 아주 고전적인, '클래식'한 주제를 다시 꺼내 보았다.
내가 이렇게 이따금씩 세벌식에 '자뻑'하는 건.. 다 이유가 있어서이다. ^^;;

Posted by 사무엘

2011/06/19 19:22 2011/06/19 19:22
, , ,
Response
No Trackback , 8 Comments
RSS :
http://moogi.new21.org/tc/rss/response/528

김 진우 교수 (언어학자)

김 진우 교수는 한국보다 미국에서 더 유명한 언어학자로, 특히 음운론 분야에서 세계구급 권위자이다. 한국에서는 <언어>의 저자라고 말하면 그쪽 분야 전공자들은 알아듣지 싶다.
이분은 연세대 영문학과를 졸업한 뒤 1960년대 초에 미국에 건너가서 한국인 최초로 UCLA에서 언어학 박사 학위를 받으셨는데... 1964년 석사, 1966년 박사......;;; 뭐야 이거 무서워..;1)

그리고 1967년엔 곧장 일리노이 주립 대학교에 교수로 부임하여 미국에서 언어학을 가르쳤으며, 아예 언어학과 학과장까지 역임했다고 한다. 1982년엔 발행처는 모르겠지만 무슨 미국 인명 사전에 등재되기도 했다고. 도대체 무슨 연구를 하고 뭘 잘해야지 저렇게 될 수 있는지는 내게 묻지 말라..ㄷㄷㄷ;;

교수가 된 지 40년도 더 지난 지금 이분은 학계에서 가히 만렙 중의 만렙을 찍었다. 일리노이 대학 명예 교수에, 학부 모교인 연세대로부터도 “국내에서도 후학 좀 양성해 주삼” 거듭된 요청을 뿌리칠 수 없어 2007년부터 석좌 교수로 부임. 몸이 둘일 수가 없는 게 아쉬울 뿐이지 한국과 미국 어디에서도 와 달라는 곳이 쇄도하는 저명한 석학이 되었다.

서 남표 카이스트 총장과는 한 살 차이. 나이도 비슷하고 미국 유학 가서 대학 학과장을 역임한 교수 출신이라는 공통점이 있다. =_=;;

본인은 이번 학기에 국어 음운론 연구를 들었는데 교수님이 왕년에 저 정도로 괴물이셨지는 미처 몰랐다..;;
내가 언어학 쪽으로 뭘 좀 알면 저런 유명한 교수님에게서 많은 걸 얻고 배워 갈 수 있을 텐데, 나의 그릇 크기가 못 따라간다. -_-;;
지금까지 내가 낸 과제물들을 보고 얼마나 민망해하셨을까? ㅠㅠㅠㅠㅠㅠㅠ

회식 자리에서 잠시 얘기를 나눠 본 바로는 김 진우 교수님은,
제임스 맥콜리 교수(시카고 대학 언어학)와 비슷한 연배이기도 하고, 그 사람과 개인적으로 아는 사이였다고 한다. “맥콜리 교수는 머리가 워낙 비상해서 언어학을 재미로 즐길 줄 아는 양반이었음”이라고 회고하심. 흠좀..;;;
그리고 본인에게 덧붙이기를 “오, 그나저나 자네가 맥콜리 교수를 어떻게 아나?” 이러더이다.

워싱턴 대학의 故 서 두수 교수에 대해서는 개인적으로 잘은 모르지만 미국에서 국어학· 한국학 가르치는 사람이다 보니 이름만 어렴풋이 들어 봤다고 말씀하셨다. 교수 세계는 엄청나게 좁고 좁은 바닥이다 보니 원래 서로 다 안다. ㅡ,.ㅡ;; 그분의 아드님이 그 이름도 유명한 카이스트 서 총장이라고 내가 얘기하자 그건 처음 들었다며 놀라셨다.

첫 수업 시간에 언어 현상에 대한 관찰, 가설 같은 걸 강조하실 때부터 알아봤지만, 이분은 사실 이공계 마인드도 투철해 보였다. 수학· 과학 같은 과목도, 좋고 싫고를 떠나서 학교 공부는 시험만 쳤다 하면 다 100점씩 맞았다네.. ㅠㅠ

의대를 생각하기도 했지만 외과 치료가 적성에 안 맞아서 진로를 바꾸셨다고 한다. 이공계 대학원을 갔으면 자기도 서 남표 같은 거창한 사람이 됐을 거라고 웃으셨지만... 선생님, 선생님은 이미 언어학에서도 충분히 넘사벽급 만렙을 찍어 계십니다.
하긴, 언어학 자체가 추상적인 계층으로 들어가면 다 수학, 논리학인 것도 사실이고.

역시 교수 될 사람은 떡잎부터 알아보는 건가 보다. ㅠㅠㅠ
허나, 이분의 고학 시절 회고록은 우리를 숙연하게 한다.

나는 경제, 사회, 정치적으로 불안정하고 억압적인 환경속에서 소년 시절을 보냈다.
일제 강점기, 2차 세계대전, 한국 전쟁 등 교육 환경도 열악했다.
그러나 나는 가난이 무지의 핑계가 될 수 없다고 생각했다. 그래서 열심히 공부했다.

오늘의 풍요로운 환경을 활용하지 않는 학생들을 볼 때마다 나는 서글프고 안타깝다.
왜냐하면 나는 최상의 조건 속에서 단지 평범함만을 좇는다면 그건 죄라고 생각하기 때문이다.


이분, 학비 벌려고 백인들에게서 멸시 받으면서 접시 닦던 시절에는 '내가 미국까지 가서 이 짓을 왜 하고 있지? 그냥 돌아가서 한국에서 고등학교 영어 교사만 해도 충분한데' 이런 생각까지 하기도 했다고.2)
그때 학업을 때려치웠으면 오늘의 김 진우 교수는 있을 수 없었을 것이다.

서 남표 총장도 미국의 고등학교와 MIT 학부 시절에 자기 말마따나 호스로 물 쏟아붓듯이 밀려드는 학교 수업 물량 공세에 미칠 지경이었다고 한다. 물론 그 사람도 고학을 했으며, 그 당시엔 요즘 같은 자살 따윈 생각할 겨를조차 없을 정도로 바빴댄다.

이런 걸 생각하면 옛날과 지금의 환경을 어떻게 하면 좀 더 객관적으로 비교할 수 있을까 하는 생각이 든다.
지금은 교통과 통신 기술의 발달, 정보 접근성의 평등, 물질적인 풍요 면에서는 과거보다 확실히, 월등히 더 좋아졌다. 이는 본인의 세대가 우리 부모 세대에 고마워해야 할 사항이다.

그러나 그런 사회 시스템이 갖춰진 대신에 신세대들이 치르고 있는 보이지 않는 대가도 있다.
과연 요즘 대학은 옛날 정도의 고학으로 학비 조달이 가능할까?
개천에서 용 날 수 있는 가능성이 옛날과 지금을 비교하면 과연 어떻게 될까?
“미국은 자녀 나이가 18세만 되면 부모가 경제 지원을 딱 끊어 버리는데, 한국은 무슨 부모가 결혼한 자녀의 집까지 마련해 줘야 하나? 나약한 것들..” 이렇게 생각하는 분이 있을지 모르겠는데, 과연 요즘 월급 모아서 집 사는 게 현실적으로 가능할까?

어느 쪽 말도 일리가 있는 면도 있고, 어느 쪽 말도 좀 어폐가 섞인 비약도 있어 보인다. 그 중 어느 게 더 설득력이 있는지는 내 능력으로는 더 결론을 못 내리겠다.
본인 세대가 부모 세대보다야 고생을 모르고 편하게 자라고 나약한 면모가 있을 수는 있다. 그러나 그렇다고 해서 그들이 기성세대가 까는 것만치 그렇게까지 개념 없고 구제불능도 분명 아니다. 그들도 다 자기 살 길 찾아서 최선을 다해 노력하고 있으며, 정말 어지간히 어려울 때 자살하는 건 아니라는 걸 알아야 할 것이다. 아무리 찾아봐도 사회 구조적으로 답이 안 보이니까.. -_-;;

세대간의 갈등을 해소하고 사회 구조에 대한 괜한 피해· 비관 의식을 불식시키려면 이런 사회 구조에 대한 본질적인 고찰도 한번쯤 필요한 것 같다.

김 진우 교수 얘기하다가 갑자기 얘기가 옆길로 많이 샜네..;;
아무튼 저분은 천재에다 노력형... 뭐 더 말이 필요없는 타입 되시겠다. 그저 존경스러울 뿐.
나도 좀 불안한 진로를 가고 있고 학교와 회사 같이 하느라 힘들긴 하지만, 내가 정말로 도저히 못 견딜 정도로 힘든 상태인지는 다시 생각을 해 봐야겠다.


Notes:
1) 재미있게도, 분야만 다를 뿐 출신 학교가 거의 같은 동명이인이 존재한다. 연세대 경영학과 졸업 후 UCLA에서 경영학 석사, 그리고 나중에 카네기 멜론 대학에서 박사 학위를 받고 연세대 경영학과 교수가 된 김 진우 교수도 있다. 정말 헷갈리기 쉽겠다. -_-; 물론 경영학과 교수는 언어학 김 진우 교수보다는 훨씬 젊은 분이다.

2) 여담으로, 유학을 갔다 온 건 아니지만 카이스트에도 좀 비슷한 위상으로 신분을 바꾼 분이 계신다. 기초 필수 영어 과목과 교양 영문학을 가르치는 인문 사회 과학부의 이 수현 교수인데, 무려 15년 가까이나 중등학교 영어 교사로 재직하다가 홀연히 부산대 대학원에 진학하여 영문과 박사 학위를 받고 카이스트 교수로 부임..;; 지금은 역시 만렙 찍은 후 이미 명예교수가 되셨다. 그 나이에 교사에서 교수로 업글한다고 해서 돈· 시간 면에서는 그리 메리트가 없을 텐데 정말 공부 그 자체가 좋아서가 아니라면 쉽지 않은 선택이었을 것이다.

Posted by 사무엘

2011/06/17 19:18 2011/06/17 19:18
, , , , ,
Response
No Trackback , 2 Comments
RSS :
http://moogi.new21.org/tc/rss/response/527

아직도 삼성맨들은 다루고 지내는지 모르겠다만.. 우리나라에는 아래아한글과 MS 워드 다음으로 훈민정음이라는 워드 프로세서가 있다.

아래아한글이 대한민국의 도스용 워드 프로세서 시장을 석권하기 전,
도스 시절엔 보석글, 하나-_-, 신사임당, 심지어 21세기 같은 전설의 프로그램들이 있었다. 이런 건 컴퓨터 old timer라면 다들 기억할 것이다.

허나 Windows로 가면 어떨까? 윈도우용 아래아한글이 출시되기 전인 1990년대 초중반엔 아리랑, 글사랑, 파피루스 등 다양한 윈도우 3.x용 국산 워드 프로세서들이 존재했다. 그리고 삼성 전자에서 개발한 훈민정음도 그 중 하나였다.

아리랑: IT 벤처 핸디소프트에서 개발. 사장이 아마 카이스트 출신이었을 거다.
글사랑: (김사랑이 아님 ㄲㄲㄲ) 글꼴 개발로 유명한 휴먼컴퓨터에서 개발. 문방사우라는 DTP 프로그램을 개발한 기술도 있는 곳이니까..
파피루스: 한메 타자 교사와 한메 한글을 만든 한메소프트에서 개발. 나름 한글 처리 쪽 기술이 있는 업체이다.
훈민정음: 더 이상의 자세한 설명은 생략한다.

“이야, 우리나라에 그런 제품도 있었어요?” / “네, 있었습니다.”
물론 얘네들은 윈도우 95와 윈도우용 아래아한글 3.0의 등장을 전후하여 제대로 망하고 진정한 흑역사로 전락했다.. -_-;; 훈민정음을 제외하면 32비트 버전조차 개발되지 못했지 싶다.

심지어 금성(현 LG) 전자도 '윈워드'라는 워드 프로세서를 내놓은 적이 있다는 걸 아시는가? WinWord.. MS 워드의 실행 파일 이름과 동일하다. 하긴, 동일 회사에서 도스용으로 개발한 '하나 워드 프로세서'는, 학교와 관공서에서 정식 채택된 덕분에, 후진 기능에도 불구하고 1990년대 중반까지 살아남았다만, 윈워드는 정말 흔적도 없이 사라졌다. 특히 경쟁사의 제품인 훈민정음과 비교했을 때 말이다. -_-;;

자, 그럼 훈민정음 워드 프로세서 얘기를 더 하겠다.
얘는 나름 1992년부터 개발돼 왔고, 윈도우용 아래아한글 3.0이 나올 무렵엔 4.0대 버전으로 올라갔다.
본인이 가장 가깝게 접한 버전은 바로 4.5이다.
삼성에서 후원이라도 했는지, 1996년도 PC 경진대회 지역(경상북도) 예선 참가자들에게 훈민정음 패키지가 확장팩(각종 글꼴, 클립아트들)까지 통째로 경품 차원에서 배포되었기 때문이다. 득템~

이때는 잘 알다시피 시기적으로 윈도우 95 과도기였기 때문에 프로그램이 16비트용과 32비트용으로 따로 배포되었다. 기능은 거의 동일하지만 16비트용은 4.5 버전이었고, 32비트용은 95라고 불렸다.
아래아한글은 국내 최초+유일의 Win32s 기반 32비트 프로그램으로 개발되었고 MS Word는 연결 고리 없이 95부터 곧바로 32비트로 넘어가 버렸다면, 훈민정음은 나름 16비트와 32비트를 따로 만든 셈. 한 소스에서 별 잡음 없이 두 에디션을 만들 정도로 프로그램을 잘 짰던가 보다.

여담이지만, MS가 역사상 동일 버전의 제품을 16비트와 32비트로 따로 만든 것은 비주얼 베이직 4가 유일했지 싶다. 이는 이 자리에서 자세한 내역을 다 말하기는 곤란하지만, 비주얼 베이직의 제품 성격의 특이성 때문으로 추정된다. 비주얼 C++은 그냥 32비트용 4.0과 16비트용 1.52를 묶어서 배포했으니 동일 버전 제품은 아니니까 말이다.
또 덧붙이자면, MS는 Win32s를 만들어 놓고는 정작 자신들은 Win32s 기반 프로그램을 (전혀) 만들지 않았었다.
MS에서 개발한 프로그램 중에 MFC 사용하는 건 극소수인 것과 비슷한 맥락. -_-;;

지속적인 버전업이 되지 못하고 곧 망해 버린 여타 마이너 국산 워드 프로세서들과는 달리, 훈민정음은 삼성 기반이라는 탄탄한 돈줄 덕분에, 상업성을 완전히 상실한 후에도 꽤 오래 살아남았다. 들리는 말에 따르면, 이 건희 회장이 훈민정음에 애착을 꽤 두고 있었다고 한다. 당장 돈이 안 되더라도 자기 회사가 한글 처리 기술 및 워드 프로세서 개발 기술은 보유하고 있어야 한다고 특별한 지침을 내리기도 했다는데.

IMF 시절, 아래아한글이 MS에게 잡아먹혀서 ㅈ망할 뻔 했을 때(아래아한글 개발 중단 및 소스 인계-_-를 조건으로 MS로부터 자금 투자), 평소 한컴 및 아래아한글의 행보를 비판해 온 사람들은 차라리 이 기회에 아래아한글이 완전히 망해 버리고 훈민정음이 1인자로 등극했어야 했다고까지 말했다. 하지만 동작 방식이 아래아한글과는 완전히 다른 워드 프로세서에 국민들이 과연 그렇게 쉽게 호응과 적응을 할 수 있었을까? -_-

훈민정음은 1990년대 말까지 정음 오피스, 어린이 훈민정음, 남북 통일 워드 프로세서 등 여러 형태가 존재하다가 지금은 스마트폰 앱으로도 나오고 또 정음 Global 같은 솔루션으로도 명맥이 유지되고 있는 듯하다. 삼성 컴퓨터에 번들로 공급되지만 패키지 소프트웨어로도 아직까지 나오는 것 같다. 워드 프로세서의 핵심 개발 인력이 넥스소프트로 독립해 나가고, 그 중 넥셀은 지금 완전히 한컴으로 넘어갔을 텐데 아직까지 삼성 내부에 개발팀이 있기라도 한가 보다.

Posted by 사무엘

2011/06/15 19:10 2011/06/15 19:10
,
Response
No Trackback , 12 Comments
RSS :
http://moogi.new21.org/tc/rss/response/526

한옥 철도역

요즘 지어지는 철도역은 온통 ‘유리궁전’이 대세이다. 유리궁전은 일단 화려하고 으리으리한 느낌을 주기 때문에 인천 공항, 서울 역부터 시작해서 요즘은 전철역과 심지어 관공서 건물까지 두루 유행이 되어 있다.
그러나 일부 역사적인 의미가 깊은 지역에는 의도적으로 한옥으로, 혹은 완전 한옥은 아니더라도 최소한 기와지붕을 얹은 형태로 역이 지어지기도 한다.

경주(동해남부선): 경주는 왕년에 신라의 수도이지 않던가. 경주 역은 기와지붕 모양인 대표적인 역이다. 하지만 동해남부선의 이설이 끝나면 지금의 신경주 역에게 모든 지위를 내어 주고 철거될 예정이니 대략 안습임.

영월(태백선): 지붕뿐만이 아니라 건물이 완전히 한옥 인테리어를 하고 있고 역명판도 아예 한자로 써진 무척 독특한 역이다.

전주(전라선): 경주 역과 비슷하지만 더 한옥 느낌이 든다. 여기는 아예 관광 명소인 한옥 마을이 있기도 하니까. 참고로 전주는 경주와 위도가 비슷하기도 하다.

김유정(경춘선): 경춘선의 복선 전철화와 함께 이설된 이 역은 작정하고 영월 같은 본격 한옥으로 지어졌다. 역명판의 글자는 코레일체 대신 궁서체로 인쇄되었다. 전철역 중에서는 최초의 사례이니 무척 흥미롭다.

이외에 남원, 곡성 역도 기와지붕을 한 역으로 알려져 있다. 더 있으려나? 특히 곡성 역은 탑리 역처럼 성곽 형태를 하고 있는 것으로 유명하다.

Posted by 사무엘

2011/06/14 08:44 2011/06/14 08:44
, ,
Response
No Trackback , 2 Comments
RSS :
http://moogi.new21.org/tc/rss/response/525

정치인의 행적

대부분의 네티즌들과는 달리, 미국의 보수 우익 크리스천들은 현 대통령인 버락 오바마를 굉장히 싫어한다.
그 이유인즉슨, '겉으로는 크리스천을 표방하고 있지만 정신은 골수 이슬람이다', '복지와 분배라는 허울 좋은 명분 하에 국고를 펑펑 축내고 있다', '미국을 점점 친아랍 반기독교 반이스라엘 노선으로 교묘하게 몰아 가다 대차게 나라 말아먹을 것이다' 등등.

오바마를 싫어하는 사상적 배경이 뭔지 대충 이해가 될 것이다. 걔네들은 부자 내지 사유 재산을 바라보는 시각이 한국과는 근본적으로 다르다! (사실, 미국처럼 청부 사상을 표방하는 게 원래는 이상적이지..;;) 정말로 사회 구조가 삐딱하게 돼 있어서 국가가 부자에게서 세금 팍 걷어서 뭘 좀 하겠다고 하면, 그런 발상조차도 곧바로 공산주의, 빨갱이로 와전될 지경.

우리나라에서 생각하는 통념과는 달리, 걔네들은 총기 금지 정책도 극렬 반대한다. 총 들고 자기 집 지키는 건 헌법에도 명시된 아주 신성한 권리인데, 그렇게 총을 빼앗기고 나서 다음엔 성경을 빼앗길 거라고까지 우려한다. 아무리 군 복무 중에 사고로 죽는 사람이 있다 하더라도 나라를 지키기 위해서 군대를 없앨 수는 없듯(그리고 한국은 아마도 징병제도), 그들은 총에 대해서도 그런 정도로 생각한다. 뭐, 미국은 성경적인 기반 위에서 정치가 안정되다 보니, 개인 총기가 허용되고도 소말리아 같은 꼴이 안 난 건 대단하긴 하다.

어쨌거나, 그들이 오바마에 대해서 보이는 혐오감의 수위라든가 사상적 배경 등은 우리나라로 치면 일부 계층이 주장하는(던) '노 무현은 빨갱이다'와 굉장히 비슷한 구석이 있다. -_-;;

솔직히 본인은 보통 사람들이 좋아하는 것만치 오바마를 좋아하지도 않고, 보통 사람들이 싫어하는 것만치 부시를 싫어하지도 않았다.
뭐, 몇 년간 오바마를 지켜보니까 그도 일부 계층에서 그렇게 오버하는 것만치 나라를 막장으로 다스리는 건 아닌 거 같다만, 그래도 잘은 모르겠다.

다만, “오바마가 이슬람으로 개종하지 않으면 미국을 상대로 테러를 저지르겠다”라고 협박을 하는 친구들도 있는 걸 보면 오바마가 골수 이슬람이 아닌 건 확실한 것 같다. -_-;; 그렇다고 그가 구원받은 독실한 크리스천이라고 단정할 수도 없겠지만. 이 정도가 그나마 중립적이고 객관적인 평가가 아닌가 싶다.
미국에서는 일단 정치 생명이 유지되려면 크리스천들로부터 표를 받아야 하고, 자기 소신과는 상관없이 킹 제임스 성경에다가 손을 얹고 선서를 해야 하니까...;;

이런 사실들이 의미하는 게 무엇일까?
많은 사람들의 의견을 조율· 통솔해야 하는 자리에 있는 지도자는 늘 자기 소신대로만 행동할 수는 없다.

독재자의 딸-_-이라는 오명을 쓰고 있는 박 근혜 씨. 서울 현충원에서 아버지의 묘지를 참배해서 특정 계층으로부터 욕 얻어먹었지만, 나름 호남 지방에 가서는 아버지의 잘못에 대해 사죄-_-도 해서 이번엔 반대 진영으로부터 가루가 되도록 까였다.

전에 내가 예를 들기도 했지만, 노 무현 전대통령이라고 해서 한미 FTA나 이라크 파병 같은 이슈에 대해 진보 진영 입맛에 맺는 결단을 내릴 수는 없었다.

이 명박 대통령은 재임 중에 종교 편향 행위(?) 때문에 욕 많이 얻어먹었지만, 선거 유세하던 시절에만 해도 법당에 가서 불상 앞에서 절까지 한 적이 있으며, 그때는 당연히 크리스천들로부터 까였다. -_-;;

미국의 9· 11 테러와 심지어 카트리나 같은 대재앙이 미국이 아랍 국가들의 비위를 맞추느라 이스라엘 땅을 떼어 주고 유대인들을 몰아낼 때마다 발생했다고 주장하는 사람들이 있다. 그런데 그들의 주장이 맞다면, 이 두 사건이 언제 일어났나? 그 이름도 유명한 조지 W. 부시 대통령. 정치는 좀 못했어도 오로지 기독교 신앙에 충실하다는 메리트 하나 덕분에 재선까지 성공한 양반의 재임 시절에 일어난 일이다. 동성애와 낙태의 합법화에 반대하고 사형 제도에 찬성했다 하더라도, 저런 국제적인 이슈까지 독단적으로 밀어붙일 수는 없었던 것 같다.

이런 일련의 현상과 비슷한 맥락으로, 본인은 오래 전부터 성경의 이 구절이 굉장히 의미심장하다고 생각해 왔다.

요담이 자기 아버지 웃시야가 행한 모든 것에 따라 주의 눈앞에서 올바른 것을 행하였으나 주의 성전에는 들어가지 아니하였고 백성은 여전히 악하게 행하였더라. (대하 27:2)

왕은 선한 통치를 하려 하는데 정작 백성들이 악했다니. 이 얼마나 생뚱맞은 진술인가!
세상의 거의 모든 역사 기록이나 문학 작품에는 악한 통치자 밑에서 신음하는 백성들만 나오지 그 반대의 경우는 찾을 수 없다. 특히 우리나라는 그런 정서가 더 심하다. 나라가 어려울 때는 맨날 민초들이 힘을 합쳐서 외적을 물리쳤다고만 하고...

그러나... 정말 객관적으로 보면 역사상 악한 통치자만큼이나 악한 백성도 적지 않았을 것이다. 그리고 악한 통치자도 그런 악한 백성 가운데서 나오게 마련이다.
악덕 기업주만 있는 게 아니라 무능하고 게으르고 악한 직원들 때문에 망한 사장도 엄청 많을 것이다. 진실은 신만이, 하나님만이 알고 있겠지만.
내가 성경이 좌우 이념에 치우치지 않으며, 인간의 입맛과 사고방식에 맞춰 기록된 책이 아니라고 인정하는 이유 중의 하나이다.

사상, 종교, 색깔, 이념 때문에 사회가 분열되고 온갖 다툼과 비극이 발생해 왔다고들 사람들은 말한다. 하지만, 그렇다고 해서 그런 걸 싹 없애고 그냥 좋은 게 좋은 거라는 식의 생각, 그리고 나에게 이익이 되는 게 옳다는 생각이 '실용'의 탈을 쓰고 팽배하는 건.. 더욱 위험한 현상이 아닐지.

그래서 오늘날의 정치인들은 국민들의 수준에 맞춰 더욱 이것도 아니고 저것도 아닌 박쥐, 기회주의자처럼 돼 가는 것 같다. 그러면서 정부와 시민 사이의 불신풍조는 더욱 심해질 것이고.. -_-
차라리 분명한 소신과 색깔이 대접받던 시절이 그리워질 때가 있다. 뭐 옛날에 그런 이념도 어차피 다 폐단과 부작용을 경험하고 나서 트렌드가 오늘날처럼 바뀐 거겠지만 말이다.

Posted by 사무엘

2011/06/12 08:53 2011/06/12 08:53
,
Response
No Trackback , 2 Comments
RSS :
http://moogi.new21.org/tc/rss/response/524

비주얼 C++ 개발자에게 F12는 무척 특수한 의미를 갖는 단축키이다. 커서가 가리키고 있는 명칭(함수, 변수, 클래스 등~)이 선언되어 있는 위치로 바로 이동해 주는 기능이기 때문이다. Find in Files와 더불어 복잡한 소스 코드를 분석할 때 없어서는 안 되는 기능이다.

또한 Alt+F12는 Symbol 탐색기이다. 무수히 많은 파일들을 무식하게 문자 단위로 검색하는 게 아니라 최적화된 symbol 데이터베이스만을 뒤지기 때문에, 명칭만의 출처를 아주 빠르고 똑똑하게 찾을 수 있다.

사실 이 기능은 비주얼 C++ 6.0에도 있었고, 심지어 더 이전 버전도 갖추고 있었다. 그러나 그때는 이 기능이 활발하게 활용되지는 못했다.
이런 고급 기능을 사용하려면 프로그램의 전체 빌드를 Browse 정보를 남겨 놓는 방법으로 특수하게 다시 해야 했기 때문이다. 그리고 매번 빌드할 때마다 그 Browse 정보도 업데이트해야 했다. 그러므로 빌드 시간도 증가.

원래 C/C++이라는 언어 자체가 빌드 속도가 느린 데다, obj, pch, ncb 등 온갖 잡다한 output을 많이 남기는 걸로 악명 높은 언어이다. 언어의 범용성 보장이라든가 강력한 네이티브 코드 생성을 위해서 어쩔 수 없는 면모도 물론 있긴 하나, 현대의 언어들과 비교했을 때 생산성이 무척 떨어지는 건 사실. 그런데 그것도 모자라서 빌드 오버헤드까지 감수하면서 별도의 Browse 정보를 생성해야 한다니. Browse 기능을 쓰는 사람이 많을 수가 없었다.

내 말이 믿기지 않으면, 비주얼 C++ 6 갖고 계신 분은 프로젝트 하나 만들어서 아무 명칭에다 대고 F12를 눌러 보라. Browse 정보를 생성할 건지 묻는 질문부터 먼저 뜨는 걸 볼 수 있을 것이다.

그러다가 비주얼 C++ .NET이 출시되면서 장족의 발전이 이뤄졌다. 별도의 Browse 정보를 만들 필요가 없이, 빌드 한 번만 하고 나면 명칭 조회와 탐색이 아무 프로젝트에서나 가능해진 것이다. 굉장히 편리해졌다.

사실 이건 어찌 보면 자연스러운 귀결인 게, 비주얼 C++ 6.0부터는 어차피 인텔리센스 기능이 초보적인 수준이나마 추가됐기 때문이다. 함수의 원형이 마우스의 풍선 도움말로 뜨고 명칭을 자동 완성해 주는 기능은 Browse 기능과 성격이 상당수 비슷하지 않은가?

기술적으로 어떻게 변했는지 정확하게는 모르지만, 본인 생각에는, 둘이 서로 따로 DB를 구축하면서 따로 놀던 게 닷넷부터는 동일한 인텔리센스 데이터를 공유하면서 명칭 조회 기능과 인텔리센스가 모두 동작하도록 바뀌었지 싶다. 그래서 그런지, 편리해진 대신에 닷넷 초창기 버전은 과거의 6.0에는 있던 기능이 잠시 사라진 것도 있었다.

바로 함수에 대해서 Caller/Called by 그래프를 그려 주는 기능이다. 이 함수가 또 어떤 함수를 호출하는지 쭉쭉~ 아니면 이 함수를 사용하는 함수는 무엇이 있는지 쭉쭉~

그런데 인텔리센스 정도 구현하는 데는 명칭 자체에 대한 DB만 구축하면 되지, 명칭과 명칭 사이의 각종 인과관계를 따질 필요는 없지 않은가. 그래서 비주얼 C++ 2003(닷넷)에는 잘 살펴보면 저 기능을 어디에도 찾을 수 없다. 본인의 가설을 뒷받침하는 증거 중 하나이다.

잠시 없어졌던 그 기능은 비주얼 C++ 2005부터 완전히 부활했다. 인텔리센스 자체가 버전업을 거듭하면서 굉장히 강력해졌기 때문이다. 2003부터는 #define 심볼과 템플릿도 지원되기 시작했고, 2005/2008부터는 함수 포인터도 지원되기 시작했다. 예전에는 프로젝트를 별도로 빌드해서 파일로 조회를 해야 했던 정보가, 지금은 컴퓨터가 좋아진 덕분에 실시간 업데이트와 조회가 가능한 존재로 바뀌었다.

비주얼 C++ 2010은 듣자하니 인텔리센스 엔진이 또 완전히 바뀌었고, C#이나 베이직 같은 ‘쉬운 언어’에서나 지원되던... 빨간 선 기능(워드 프로세서의 맞춤법 검사기처럼.. 문법에 틀린 부분)이 흠좀무스럽게도 C++에도 도입되었다고 하더라.

인간의 프로그램 개발 환경의 생산성 개선을 위한 노력은 오늘날에도 계속되고 있다. ㄲㄲ

Posted by 사무엘

2011/06/07 19:10 2011/06/07 19:10
Response
No Trackback , 9 Comments
RSS :
http://moogi.new21.org/tc/rss/response/522

C/C++에는 ? : 라는 독특한 연산자가 있다. A ? B: C꼴로 표현되어 피연산자가 3개나 붙는 유일한 연산자이다.
이 연산자의 역할은 매우 단순하다. A가 참이면 연산자의 값은 B가 되고, 그렇지 않으면 C가 된다. 그래서 아예 if문의 역할을 간단히 대신할 수도 있으며, 콤마 연산자와 결합하면 어지간한 함수 호출마저도 한 연산식에다 박아 넣을 수 있다. 다만, 그게 너무 사악하다고 여겨졌는지-_-, C# 언어에는 콤마 연산자가 사라지고 콤마는 for 키워드 안에서만 제한적으로나 허용되지 싶다.

? : 는 &&, || 와 마찬가지로 C/C++에서 단축연산이 적용된다. A && B에서 A가 거짓이면 B는 실행이 전혀 되지 않고 전체 결과가 거짓이 되며, A || B에서 A가 참이면 B는 실행되지 않고 바로 전체 결과가 참이 된다. 그런 것처럼 ? :는 선택되지 않은 항에 대해서는 당연히 연산이 일어나지 않는다.

<날개셋> 한글 입력기는 짝퉁 C언어 문법 수식 해석기를 내장하고 있기 때문에, 이를 이용해 글쇠, 오토마타, 글자판 전환 글쇠 등에서 문자 입력 시스템의 자유도를 굉장히 높일 수 있다. 비록 튜링 완전한 수준은 못 돼도 말이다. 이때에도 ? : 연산자는 물론 매우 요긴하게 쓰인다.

? : 는 좌결합이 아니라 우결합이다. A ? B : C ? D : E는 (A?B:C) ? D : E가 아니라 A ? B : (C?D:E)로 결합한다. 그러므로 전자처럼 쓰려면 괄호를 넣어 줘야 한다.

? : 는 다른 연산 구문들을 포함하는 if문 대용처럼 쓰이는 만큼, 연산자의 우선순위가 상당히 낮다. 다른 평범한 연산자들이 다 결합한 뒤 나중에야 적용된다. 그게 합리적이다.
그러나 얘도 콤마와 대입 연산자보다는 순위가 높다. 그렇기 때문에 A = B ? C : D 라고 써 주면 알아서 A = (B?C:D)로 해석되어, A에는 B 조건의 충족 여부에 따라 C 아니면 D가 대입된다.

반대로, ? : 의 내부에 콤마 연산이나 대입 연산이 포함되어야 한다면 이들 연산은 무조건 괄호로 싸야 한다.

A ? (B=2): (C=5)
B에다가 괄호를 안 하면 = 가 ?와 :를 둘로 쪼개 버리는 효과가 나기 때문에 에러가 발생한다.
그리고 C에다가도 괄호를 생략할 수 없는데, 괄호를 안 하면 연산의 의미가 (A?(B=2):C)=5가 되어 버리기 때문이다. 우선순위의 특성상, =가 C항이 아니라 ? = 전체와 대응한다는 뜻 되겠다.

그리고 또 생각해 볼 것은, ? : 연산자의 값은 L-value가 될 수 있겠냐는 점이다. (대입 가능하겠냐)
<날개셋> 한글 입력기는 수식이 처음 도입된 3.0 이래로 지금까지 (조건 ? A:B)=100 과 같은 구문이 지원된 적은 없다. 그러나 이제 <날개셋> 6.0 이후의 다음 버전부터는 그게 가능해진다. 단, 2항과 3항 중 하나라도 변수에 연산자가 조금이라도 붙어서 A+2, -B 같은 형태가 되면 L-value 원칙이 깨지게 되는데, 그런 오류는 수식 입력 시점에서 프로그램이 자동으로 감지해 준다.

이게 지원되면 조건 ? (A=100): (B=100)보다야 구문을 더욱 간단하게 만들 수 있으니까 사용자의 입장에서 좋을 것이다. 더구나 콤마 연산자도 최후의 항의 변수 정보를 남겨 주기 때문에 (조건 ? (A=100,C): (B=50,D)) +=20 같은 복잡한 대입도 가능해진다. 저 식의 의미는 무엇일지 독자 여러분이 생각해 보기 바란다.

정작 이 연산자에서는 괄호가 필요하지 않다. 조건 ? A:B=100 이라고 하면 (조건 ? A:B)=100이 되며, 100 대입 연산은 3항의 B에만 연결되는 게 아니라 ? : 연산의 결과 전체에 걸린다. ? : 의 우선순위가 =보다 높기 때문에 =보다 먼저 계산되기 때문이다.

<날개셋> 한글 입력기로 복잡한 수식을 다뤄 본 분들은 이미 아시겠지만, 이 프로그램은 사용자가 입력한 수식을 어느 정도 자동으로 간소화를 한다. 상수 연산은 미리 계산을 해 버리며, 100/0나 2=A 같은 뻔한 에러는 미리 지적해 준다. 그리고 우선순위 규정상 굳이 칠 필요가 없는 괄호도 알아서 제거를 해 버린다.

(A+B)-C는 A+B-C로 바뀌며, 이와 비슷한 맥락으로 (조건 ? A:B)=100도 그냥 조건 ? A:B=100으로 바꾼다. 이건 프로그램의 오동작이 아니므로 놀라지 말고 수식을 사용하면 된다.

그런데 비주얼 C++ 같은 요즘의 C/C++ 컴파일러들은 ? :를 본인이 생각한 것처럼 취급하지 않는 것 같다.
A==100 ?B:C=400 라고 하면 =400은 3항의 C에만 붙지 B에는 붙지 않는다. (A==100 ? B:C)=400이라고 해 줘야 한다.
또한 ?와 : 사이에 있는 2항은 사이에 대입이나 콤마 같은 연산자(우선순위가 ? :보다 한참 더 낮은!)가 괄호 없이 연결되어 있어도 알아서 2항의 일부라고 인식해 주는 듯.
물론, 그렇다고 해서 A=조건 ? 2항: 3항 같은 문장이 있으면 A=까지 조건으로 끌어들이지는 않는다.

이런 세세한 동작 방식에 대해서 정보를 얻고 싶어서 비주얼 C++ 도움말을 찾아봐도, ? :는 대입 연산자보다 우선순위가 높다던가, 2항과 3항의 타입이 서로 다를 때 연산자 값이 정해지는 원칙 같은 원론적인 말밖에 없다. 그 말대로라면 무조건 내 프로그램처럼 괄호를 써야만 할 텐데 말이다.

그 간단한 ? : 연산자에도 의외로 복잡한 사연이 있다는 걸 알 수 있다.
어쨌든 내 프로그램은 ? : 안에 대입이나 콤마 연산을 포함시키려면 무조건 괄호를 써야만 하는 구조가 앞으로도 유지될 것이다.

Posted by 사무엘

2011/06/05 19:20 2011/06/05 19:20
, ,
Response
No Trackback , 4 Comments
RSS :
http://moogi.new21.org/tc/rss/response/521

« Previous : 1 : ... 172 : 173 : 174 : 175 : 176 : 177 : 178 : 179 : 180 : ... 221 : Next »

블로그 이미지

그런즉 이제 애호박, 단호박, 늙은호박 이 셋은 항상 있으나, 그 중에 제일은 늙은호박이니라.

- 사무엘

Archives

Authors

  1. 사무엘

Calendar

«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

Site Stats

Total hits:
3046023
Today:
1243
Yesterday:
1972