블로그 이미지
Every unexpected event is a path to learning for you. blueasa

카테고리

분류 전체보기 (2794)
Unity3D (852)
Programming (478)
Server (33)
Unreal (4)
Gamebryo (56)
Tip & Tech (185)
협업 (11)
3DS Max (3)
Game (12)
Utility (68)
Etc (98)
Link (32)
Portfolio (19)
Subject (90)
iOS,OSX (55)
Android (14)
Linux (5)
잉여 프로젝트 (2)
게임이야기 (3)
Memories (20)
Interest (38)
Thinking (38)
한글 (30)
PaperCraft (5)
Animation (408)
Wallpaper (2)
재테크 (18)
Exercise (3)
나만의 맛집 (3)
냥이 (10)
육아 (16)
Total
Today
Yesterday

 is 연산자 : 두 객체가 동일한지 비교하는데 사용, is 연산자는 해당 객체가 is 오른쪽 형식과 호환되는지 확인만 한다. 객체 형식을 변경할 수 는 없다.

  1. char data = 'a';
  2. if(data is char)
  3. System.Console.WriteLine("문자 데이터 입니다.");
  4. else
  5. System.Console.WriteLine("문자 데이터가 아닙니다.");

 

 

as 연산자 : 객체가 호환되지 않으면 null 값을 할당, 호환되면 형식(casting)을 시켜준다. as 연산자는 강제 형변환과 비슷하며 변환시 예외가 발생하면 null을 채운다.

[표현식] as [데이터타입]

 

  1. string obj = data as string;
    if(obj != null)
    {
     ....
    }

 

아래의 형태는 as 연산자가 하는 기능이다.

[표현식] is [데이터타입] ? (데이터타입)[표현식] : (데이터타입) null

 

출처 : http://ocplay.springnote.com/pages/2731066 

반응형

'Programming > C#' 카테고리의 다른 글

Operator Overloading in C#  (2) 2011.12.05
Force property update in propertygrid  (0) 2011.11.29
effective c# - 1  (0) 2011.11.29
TreeNode Visual C# 도구 설명을 추가하는 방법  (0) 2011.11.21
TreeView에서 Find 함수 사용 방법  (0) 2011.11.20
Posted by blueasa
, |

effective c# - 1

Programming/C# / 2011. 11. 29. 10:56

C# 코드를 짤 때 좀 더 효율적인 코드를 짜기 위한 방법들을 정리한 포스트이다.
먼저 Code Project의 아래 포스트를 번역한 후 다른 글들도 한번 찾아 봐야겠다.

원본 : http://www.codeproject.com/KB/cs/effectivecspart1.aspx#item1

포스팅한 날짜가 2005년꺼라 꽤 오래된 자료라 현재 버전에서는 어느정도 차이가 있을듯하다.




Item 1 - String의 사이즈를 체크할때는 Length Property를 사용하라.[Performance]

String 비교는 불필요한 overhead를 포함하고 있다. 스트링이 비어 있는지를 체크하는 것이라면

Length properthy를 사용하도록 한다.

 
//NO

if ( str != "")//comparison of two strings {...}

//YES

if ( str.Length > 0) {...}

 

Item 2 - String을 연속적으로 붙일 때에는 StringBuilder 객체를 사용하라.[Performance]

C# string은 변경되지 않는다. string 값이 변경할 때, 아래와 같은 문제들이 야기된다.

  • 필요한양보다 메모리를 추가적으로 더 사용하게 된다.
  • garbage collector가 작업해야 될 일들이 더 생긴다.
  • 실행시 느려지는 코드를 만들게 된다.
 
//NO

String strConcat;
ArrayList arrayOfStrings = new ArrayList();
arrayOfStrings.Add("a"); 
arrayOfStrings.Add("b");
foreach (string s in stringContainer) {
  strConcat += s; 
}

//YES

StringBuilder sbConcat = new StringBuilder ();
foreach (string s in arrayOfStrings ) { 
  sbConcat.append(s);
}

 

Item 3 - 되도록이면 Boxing과 UnBoxing을 피하라[Performance]

BBoxing은 garbage-collected 힙 영역에 value types들을 저장하는데 이용된다.

value type이 box되면 새로운 ojbect가 메모리에 잡히고 생성되어야 한다.

즉, 아래의 두가지 작업이 일어난다.

  - Object 인스턴스를 할당한다.

  - 위 인스턴스에 value type 값을 복사해서 넣는다.

위의 이유로 되도록이면 Boxing을 피하는것이 좋다. ArrayList를 예로 들어보면 struct 키워드를

통해서 ArrayList의 값을 넣을 때 위와 같은 Boxing과 UnBoxing이 일어나게 된다.

 
//NO

struct st { public Int i; }
Arraylist arr = new ArrayList();
for (int i=0 ; i< count; i++) { 
  st s;
  s.i = 4; 
  arr.item.add(st) ; //<- Boxing (Allocating an object instance

                     // + copying the value-type value into that instance)

}
st obj = (st ) arr[0]; //<- Unboxing (casting and copy)


//YES

//Decalre the data type as class.

Class st { public Int i; }

 

Item4 - == 대신 Equal 함수를 사용하라 [Performance]

== 보다 equal 함수를 사용하는것이 좀 더 빠르다.

 

 
string s1= "code";
string s2 = "code1";
//No:

if(s1 == s2){...}
//Yes:

if(s1.Equals(s2)){...}


Item5 - 'foreach' 말고 'for' 를 사용해야 하는 케이스  . [Performance]

'foreach' 랑 'for'  키워드는 일부 비슷한 기능을 한다. - 블록 안에서 루프를 돌면서 기능을 수행

foreach와 for를 사용할때 가장 중요한 차이쯤은 루프문의 증가와 끝에 대해서 따로 작업이 필요 없다는것이다.  또한 foreach는 모든 collection을 사용할 수 있게 만들어졌다. foreach는for의 private한 case에 사용한다고 하기도 한다.

아래 코드를 통해서,  두 루프문이 동일한 결과를 낸다는것을 알 수 있다. 다만 foreach를 사용했을 경우퍼포먼스가 조금 떨어졌다. 좀더 무거운 변수와 큰 array를 사용하면 그 차이가 더 크게 날것이다.

foreach는 for에 비해서 좀더  사용하기 쉽지만 만약 큰 collection을 도는 경우는에는 'for' 를 사용하는것이 퍼포먼스에 좋을 것이다.


Code snippets:

 Collapse
//foreach

int[] arrayOfInts= new int[5];
int sum= 0; 
foreach(int i arrayOfInts) {
  sum+= i; 
}

//for

int[] arrayOfInts= new int[1]; 
int sum= 0;
for(int i = 0; i < arrayOfInts.Length; i++) {
  sum+= arrayOfInts[i]; 
}

Item7 - Prefer the �as� operator instead of direct type casting. [Usage]

The 'as' operator does not throw an exception. In case of bad cast, the return value is null.

Code snippets:

 Collapse
//NO

object o = 1.3; 
try
{
  string str = (string)o; 
} 
catch(InvalidCastException ex){...}

//YES

string str = o as string;
if(null != str){...}

Item8 - Use the 'checked' keyword to avoid overflow. [Usage]

Code snippets:

 Collapse
//NO

short shortNum;
int i = 32768;
shortNum = (short) i; 
// problem after statment excution

// the shortNum variable has an uninitialized value,


//YES

try {
  shortNum = checked((short)i); // solution 

}
catch(OverflowException efx) {}

Item9 - Use the 'is' operator instead of casting. [Usage]

Code snippets:

 Collapse
public class Preson{int nAge;}

//No:

static void main(object o){
  try {
    (Person)o.nAge = 45;
  }
  catch(InvalidCastException ex){...}
}

//Yes:

static void func(object o)
{
  if ( true == (o is Person) )
  {
    (Person)o.nAge = 45;
  }
}

Item10 - Use Explicit interface to 'hide' the implementation of an interface [Usage]

Implementing an interface explicitly 'hides' the interface methods. Visual Studio does not display the interface methods in the intellisense.

Code snippets:

 Collapse
//interface definition

Public interface IChild{
  bool IsHuman();
  void lie();
}

//class definition

Pubic Pinocchio: IChild {
  IChild.IsHuman() //explicit interface implementation

  {
  }
  public void Lie(); //regular interface implementation

}

//using the object

static void main()
{
  // Visual studio will not display

  // the isHuman mwthod in the intellisence.

  Pinocchio o = new Pinocchio();
  ((IChild) o).IsHuman(); // using the IsHuman method explicitly.

  o.Lie();
}

Item11 - Use @ to ease the work with literal paths. [Usage]

Code snippets:

 Collapse
//Old way

String sFilePath = �c:\\a\\b\\c.txt�;

//The C# way

String sFilePath = @�c:\a\b\c.txt�;

Item12 - Make your API assembly CLS Compliant. [Usage]

The CLS-Compliant attribute cause the compiler to check whether your public exposed types in the assembly are CLS-Compliant.

Prefer to define the attribute for the entire assembly, especially for API. The incentive to create a CLS compliant assembly is that any assembly written in one of the .NET aware languages can use your assembly more efficiently because there is no data types interoperability.

Code snippets:

 Collapse
using System; 
[assembly:CLSCompliant(true)]

Item13 - Define destructor and implement IDisposable interface for classes that use native resource directly. [Garbage Collection]

You should define a destructor whenever you use native code in your assembly, i.e., use types that are not managed by the garbage collector. The compiler changes the destructor method to Finalize method (can be seen in the MSIL using the ILDasm.exe).

The Garbage collector marks a class with destructor as Finalized and calls the Finalize method while destructing the object. This behavior guarantees that your release of resources in the destructor will occur.

But, what if you want to release the resources immediately? For this purpose, you should implement the IDisposable interface and call theDispose method when you want to release the object.

Note 1: Do not use destructor if your class does not use native / unmanaged resources. If you do so, you create unnecessary work for the garbage collector.

Note 2: If you implement the IDisposable and a destructor, you should call the Dispose method from the destructor to force the object to release resources immediately.

Code snippets:

 Collapse
~my class {
  if ( true == b) { 
  }
} 

//The MSIL code:

protected override void Finalize() {
  try { 
    if ( true == b) { 
    }
  }finally { base.Finalize();} 
}

Item14 - Avoid the use of GC.Collect. [Garbage Collection]

The GC.Collect method forces garbage collection of all generations.

The performance is hurt during the call to GC.Collect, the application execution is paused. Moreover, the method might cause the promotion of short lived objects to a higher generation, i.e., those object live longer than it should in the first place.

If you must use it in order to reclaim the maximum amount of available memory, use the method only on generation 0.

Code snippets:

 Collapse
//No:

GO.Collect();
//Yes:

GC.Collect(0);

Item15 - Use StructLayout attribute for classes and structs when using COM Interop. [COM Interop]

The attributes cause the compiler to pack the structure in sequential memory so that it can be sent to unmanaged code correctly (unmanaged code that expects a specific layout).

Code snippets:

 Collapse
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential)] 
public struct st{
  int i;
  float f;
}

What next?

The part II article, will deal with COM Interop in general, and events between managed and unmanaged code in particular.


출처 : http://www.cyworld.com/mengwi/7680825 

반응형
Posted by blueasa
, |

[펌] 윈7 단축키 대박

Tip & Tech / 2011. 11. 26. 03:46
반응형
Posted by blueasa
, |
C/C++의 Data Type 입니다. 그런데 이것은 OS나 컴파일러에 따라서 차이가 있을 수 있습니다. 가령 16비트OS에서 int 는 16비트이고, 32비트OS에서 int 는 32비트입니다. 여기서는 일반적으로 가장 널리 쓰이는 "비주얼C++ (32비트 버전)"를 기준으로 한 것입니다.

정수 자료형


▶ char, unsigned char          1 byte (8비트)
------------------------------------------------------
char 의 최소값: -128
char 의 최대값: 127

unsigned char 의 최소값: 0
unsigned char 의 최대값: 255 (0xff)



▶ short, unsigned short        2 bytes (16비트)
------------------------------------------------------
short 의 최소값: -32768
short 의 최대값: 32767

unsigned short 의 최소값: 0
unsigned short 의 최대값: 65535 (0xffff)


▶ wchar_t 또는 __wchar_t       2 bytes (16비트)
------------------------------------------------------
wchar_t 의 최소값: 0
wchar_t 의 최대값: 65535

※ wchar_t 는 유니코드 글자 1개를 저장합니다. "unsigned short"과 동일.



▶ int, unsigned int            4 bytes (32비트)
------------------------------------------------------
int 의 최소값: -2147483648
int 의 최대값: 2147483647

unsigned int의 최소값: 0
unsigned int의 최대값: 4294967295 (0xffffffff)



▶ long, unsigned long          4 bytes (32비트)
------------------------------------------------------
long 의 최소값: -2147483648L
long 의 최대값: 2147483647L

unsigned long 의 최소값: 0UL
unsigned long 의 최대값: 4294967295UL (0xffffffffUL)

※ 32비트OS에서의 long 은 int 와 동일



▶__int64 또는 long long        8 bytes (64비트)
------------------------------------------------------
__int64 의 최소값: -9223372036854775808i64
__int64 의 최대값: 9223372036854775807i64

unsigned __int64 의 최소값: 0ui64
unsigned __int64 의 최대값: 18446744073709551615ui64 (0xffffffffffffffffui64)





실수 자료형


▶ float                        4 bytes (32비트)
------------------------------------------------------
가장 작은 양수: 1.175494351e-38F
가장 큰 양수  : 3.402823466e+38F



▶ double                       8 bytes (64비트)
------------------------------------------------------
가장 작은 양수: 2.2250738585072014e-308
가장 큰 양수  : 1.7976931348623158e+308



▶ long double                  8 bytes (64비트)
------------------------------------------------------
double 과 같음.

출처 : http://mwultong.blogspot.com/2006/09/c-char-int-float-data-type-ranges.html
반응형
Posted by blueasa
, |

처음 코딩을 하게 되었을 때, 디버깅의 중요성에 대해서 전혀 모르고 있었다. 어느날 버그는 꼬였고, 중단점을 매우 많이 찍으면서 버그 사냥에 몰두하는 나 자신을 보게 되었다. 이것은 .. 디버깅은 정말 정말 중요하다는 사실을 깨닫게 해준 경험이였다.

디버깅을 위해 F9 키를 누르는건 친근한 작업이었고, 보다 더 한눈에 들어왔으면 좋겠다는 생각이 들기 시작했다. 결국 옵션에 이런것이 있지 않을까? 란 궁금증이 들게 되었고, ... 옵션을 가게 된다.

비쥬얼 스트디오 전체

위 그림에서 "도구" 를 클릭한다.


위와 같은 화면이 뜨면 옵션을 클릭 한다.

다음과 같은 화면이 나오면, "디버깅 탭"으로 이동 한다.


"디버깅 탭"에서 "일반 탭" 으로 이동 한다.

이 곳의 세부 설정중 "중단점과 현재 문의 전체 소스 줄 강조 표시" 를 체크 한다.


... 그러면 다음과 같은 효과를 내게 되는 것을 보게 된다.

이것으로 나는 가독성을 높이게 되었고, 눈과 머리로 버그를 보게 되었다.


총평

간단한데, 지금까지 모르고 했었다는게 좀 안타깝다. 이런 Tip 들이 한두가지가 아닌데, 하나씩 정리해 나가는게 좋을 것 같다. 여기서 중요한 사실을 알게 되었는데, "가독성"이란 존재는 머리에도 영향을 미친다는 것이다.

또한 사용자가 보기 편하게 만들어야 한다 는 .. 절대적인 룰으로 받아 들여 진다.



출처 : http://ikpil.com/753
반응형
Posted by blueasa
, |
이 문서에서는 TreeView 컨트롤 노드의 설명을 추가하는 방법에 대해 설명합니다. 도구 설명 위에 마우스 포인터를 일시 TreeNode에 대한 정보를 표시합니다. TreeView 컨트롤의 ToolTip 속성이 없지만 도구 설명 컨트롤의 도구 설명 기능을 제공할 수 있습니다.

이 문서에 설명되어 있는 예제를 사용하여 요일을 표시하는 TreeView 컨트롤을 사용하여 보여 줍니다. 마우스 포인터가 있는 TreeNodes 중 하나 위에 멈추면 주의 요일을 나타내는 도구 설명이 나타납니다.

요구 사항

다음은 권장되는 하드웨어, 소프트웨어, 네트워크 인프라 및 필요한 서비스 팩의 목록입니다.
  • Microsoft Visual Studio .NET 또는 Microsoft Visual Studio 2005
이 문서에서는 사용자가 다음 항목을 잘 알고 있다고 가정합니다.
  • Visual C# 구문
  • Windows 폼

만들기 및 예제 양식 채우기

  1. Visual C# 에서 새 Windows 프로그램을 만듭니다.
  2. TreeView 컨트롤을 Form1에 추가하십시오.
  3. ToolTip 컨트롤을 Form1에 추가하십시오.

도구 설명을 위해 TreeNodes 추가

  1. Form1 로드 이벤트에 다음 코드를 붙여 넣습니다.
    // Create a root node.
    TreeNode rootNode = treeView1.Nodes.Add("Day of Week");
    
    // Create a series of child nodes and then set the Tag property for each.
    for (int count = 0; count <= 6; count++)
    {
       DayOfWeek day = (DayOfWeek)count;
       TreeNode childNode = rootNode.Nodes.Add(day.ToString());
       childNode.Tag = "This day is " + day.ToString() + ".";
    }
    
    // Expand all of the TreeView nodes.
    rootNode.ExpandAll();
    					
  2. TreeView MouseMove 이벤트에 다음 코드를 붙여 넣습니다.
    // Get the node at the current mouse pointer location.
    TreeNode theNode =  this.treeView1.GetNodeAt(e.X, e.Y);
    
    // Set a ToolTip only if the mouse pointer is actually paused on a node.
    if ((theNode != null))
    {
       // Verify that the tag property is not "null".
       if (theNode.Tag != null)
       {
          // Change the ToolTip only if the pointer moved to a new node.
          if (theNode.Tag.ToString()!=this.toolTip1.GetToolTip(this.treeView1))
          {
             this.toolTip1.SetToolTip(this.treeView1, theNode.Tag.ToString());
          }
       }     
       else
       {
          this.toolTip1.SetToolTip(this.treeView1, "");
       }
    }
    else     // Pointer is not over a node so clear the ToolTip.
    {
       this.toolTip1.SetToolTip(this.treeView1, "");
    }
    					
    노트 해당 코드는 Visual Studio 2005에서 변경해야 합니다. Windows Forms 프로젝트를 만들 때 Visual C# 한 폼을 프로젝트에 기본적으로 추가됩니다. 이 폼은 Form1을 이라고 합니다. 폼을 나타내는 두 파일의 Form1.cs 및 Form1.designer.cs가 지정됩니다. Form1.cs 있는 코드를 작성할 수 있습니다. Windows Forms 디자이너 도구 상자에서 컨트롤을 끌어서 의해 수행된 모든 작업을 구현하는 코드를 기록하는 위치 designer.cs 파일이 없습니다. Windows Forms 디자이너를 Visual C# 2005에 [NULL]에 대한 자세한 내용은 다음 Microsoft 웹 사이트를 방문하십시오.
  3. 저장하고 프로그램을 실행하십시오. 노드 중 하나에서 마우스 포인터를 잠시 두면 도구 설명이 나타납니다.


    출처 : http://support.microsoft.com/kb/322634/ko 
반응형

'Programming > C#' 카테고리의 다른 글

is 비교 연산자, as 연산자  (0) 2011.11.29
effective c# - 1  (0) 2011.11.29
TreeView에서 Find 함수 사용 방법  (0) 2011.11.20
C# C++ COM Interop  (0) 2011.11.15
C#에서 포인터  (0) 2011.11.15
Posted by blueasa
, |

[참조]


위에 보면 Find 함수를 쓴다.
[예: treeNode.Nodes.Find(string key, bool searchAllChildren)]

그런데 직접 만들고 써보니 찾지를 못한다..
[처음 삽질한 방법]
TreeNode.Nodes.Add("AAA");
TreeNode[] arrayTN = TreeNode.Nodes.Find("AAA", false);

뭘까..하고 이리저리 찾아보다보니..

TreeNode.Nodes.Add() 함수는 몇가지 오버로딩 함수를 가지는 데,

그 중,
1) TreeNode.Nodes.Add(string text);
2) TreeNode.Nodes.Add(string key, string text); 
두가지 함수의 차이에 대해 알아야 될 것 같다.

첫 삽질에서 사용 한 함수는 1) 함수이다.

그런데 Find 함수의 첫 인자인 key는 Node의 Name이라고 위 참조글에 적혀 있다.
TreeNode.Nodes.Add("AAA"); 는 1) 함수에 보면 key(Name)가 아니라 text이다.
 그래서 Name엔 기본값인 빈 문장("")이 들어가 있다.
결과적으로 Find로 찾는 Name값은 빈문장이기 때문에 "AAA"를 찾을 수 없다.

Find를 쓰려면 Node를 Add할 때 2) 함수로 추가를 해줘야 한다.
어차피 Text와 Name이 다를 필요가 없을 것 같아서 같게 해줬다.

[해결방법]
TreeNode.Nodes.Add("AAA", "AAA");
TreeNode.Nodes.Find("AAA", false);

P.s. Find 후 TreeNode[] 변수가  반환 되는데, 찾은 노드의 개수 판단은 Count가 아니라 Length 프로퍼티이다.
      (
Length가 0이면 찾는 항목이 없음.)

P.s.2 bool 
searchAllChildren 은 하위레벨 노드를 검색할 지 판단 변수이다. false로 하면 같은 레벨 노드에서만 검색을 한다.
        나는 같은 레벨에서 검색이 필요하기 때문에 false를 했다.

반응형

'Programming > C#' 카테고리의 다른 글

effective c# - 1  (0) 2011.11.29
TreeNode Visual C# 도구 설명을 추가하는 방법  (0) 2011.11.21
C# C++ COM Interop  (0) 2011.11.15
C#에서 포인터  (0) 2011.11.15
TreeView 이용하기(추가/선택삭제/체크삭제)  (0) 2011.11.14
Posted by blueasa
, |
허성도 서울대학교 중어중문학과 교수의 강연 녹취록

사단법인 한국엔지니어클럽
일 시: 2010년 6월 17일 (목) 오전 7시 30분
장 소: 서울특별시 강남구 테헤란로 521 그랜드 인터컨티넨탈 호텔 2층 국화룸

저는 지난 6월 10일 오후 5시 1분에 컴퓨터를 뚫어지게 바라보고 있었습니다.

우리 나로호가 성공하기를 바라는 마음이 여기에 계신 어르신들도 크셨겠지만 저도 엄청나게 컸습니다. 그런데 대략 6시쯤에 실패했다는 이야기가 나오고 7시에 거의 그것이 확정되었습니다. 저는 성공을 너무너무 간절히 바랐습니다.
그날 연구실을 나오면서 이러한 생각으로 정리를 했습니다. 제가 그날 서운하고 속상했던 것은 나로호의 실패에도 있었지만 행여라도 나로호를 만들었던 과학자, 기술자들이 실망하지 않았을까 그분들이 의기소침하지 않았을까 그것이 더 가슴 아팠습니다. 그분들이 용기를 잃지 않고 더 일할 수 있기를 바라는 심정으로 어떻게 이것을 학생들에게 말해 주고 그분들에게 전해 줄까 하다가 그로부터 얼마 전에 이런 글을 하나 봤습니다.

1600년대에 프랑스에 라 포슈푸코라는 학자가 있었는데 그 학자가 이런 말을 했습니다.
‘촛불은 바람이 불면 꺼진다. 그러나 큰 불은 바람이 불면 활활 타오른다.’라는 말을 했습니다. 저는 우리의 우주에 대한 의지가 강열하다면 또 우리 연구자, 과학자들의 의지가 강열하다면 나로호의 실패가 더 큰 불이 되어서 그 바람이 더 큰 불을 만나서 활활 타오르기를 진심으로 기대합니다.

○ 그런데 이 나로호 말씀을 드리는 이유는 이러한 것도 바로 우리의 역사와 연관이 되어 있기 때문입니다. 이 실패가 사실은 너무도 당연하고 우리가 러시아의 신세를 지는 것을 국민이 부끄러움으로 여기지만 그것이 너무나도 당연하다는 것을 역사는 말해 주고 있습니다.

-1957 년입니다. 제가 초등학교 2학년 때 소련이 스푸트니크 1호라고 하는 인공위성을 발사했습니다. 그 충격은 대단했다고 하는데, 초등학교 학생인 저도 충격을 엄청나게 많이 받았습니다. 그러고 나서 미국이 깜짝 놀랐습니다. 그리고 뱅가드호를 발사했는데 뱅가드호는 지상 2m에서 폭발했습니다. 이것을 실패하고 미국이 본격적인 조사에 착수했습니다. 왜 소련은 성공하고 우리는 실패했는가, 그 연구보고서의 맨 마지막 페이지는 이렇게 끝이 나 있습니다.
‘우리나라(미국)가 중학교, 고등학교의 수학 교과과정을 바꿔야 한다.’ 아마 연세 드신 분들은 다 기억하실 것입니다.

그런데 사실은 소련이 스푸트니크 1호를 발사한 것도 독일 과학자들의 힘이었다는 것을 아실 것입니다. 미국이 뱅가드호를 실패하고 그 다음에 머큐리, 재미니, 여러분들이 아시는 아폴로계획에 의해서 우주사업이 성공했습니다. 그런데 그것도 미국의 힘이 아니라 폰 브라운이라고 하는 독일 미사일기술자를 데려다가 개발했다는 것도 여러분이 아실 것입니다.

○ 중국은 어떻게 되냐면 여기는 과학자들이니까 전학삼(錢學森)이라는 이름을 기억하실 텐데요, 전학삼은 상해 교통대학을 졸업하고 미국에 유학을 가서 캘리포니아에 공과대학에서 29살에 박사학위를 받고 캘리포니아 공과대학 교수를, 2차대전 때 미국 국방과학위원회의 미사일팀장을, 그리고 독일의 미사일기지 조사위원회 위원장을 했습니다. 미국에서는 핵심기술자입니다.

그런데 이 전학삼이라는 인물이1950년에 미사일에 관한 기밀문서를 가지고 중국으로 귀국하려다가 이민국에 적발되었습니다. 그래서 간첩혐의로 구금이 되었고 그때 미국에서는 ‘미국에 귀화해라. 미국에 귀화하면 너는 여기서 마음껏 연구할 수 있다.’라고 이야기했고 전학삼은 그것을 거절하고 있었습니다. 중국에서는 모택동이 미국 정부에 전학삼을 보내달라고 했습니다.

그런데 미국이 이 말을 들을 수밖에 없었던 것은 그때 중국 정부는 미국인 스파이를 하나 구속하고 있었고, 이 둘을 1 대 1로 교환하자고 그랬어요. 그런데 미국이 그 이야기를 들어주면서 전학삼에게 ‘마지막 기회를 주겠다, 우리는 너와 우리의 스파이를 교환하지만 네가 미국에 귀화한다면 너는 여기 있을 수 있다.’ 그랬더니 전학삼은 가겠다고 했어요. 그러니까 미국에서 전학삼에게 ‘너는 중국에 가더라도 책 한 권, 노트 한 권, 메모지 한 장도 가져갈 수 없다, 맨몸으로만 가라.’
그래도 전학삼은 가겠다고 했습니다.

나이 마흔여섯에 중국에 가서 모택동을 만났습니다. 여기서부터는 일화입니다.
모택동이 ‘우리도 인공위성을 쏘고 싶다, 할 수 있느냐.’ 그랬더니 전학삼이 이렇게 말했다고 합니다.
‘내가 그것을 해낼 수 있다. 그런데 5년은 기초과학만 가르칠 것이다. 그 다음 5년은 응용과학만 가르친다. 그리고 그 다음 5년은 실제 기계제작에 들어가면 15년 후에 발사할 수 있다. 그러니까 나에게 그동안의 성과가 어떠하냐 등의 말을 절대 15년 이내에는 하지 마라. 그리고 인재들과 돈만 다오. 15년 동안 나에게 어떠한 성과에 관한 질문도 하지 않는다면 15년 후에는 발사할 수 있다.’ 이렇게 대답했습니다.

모택동이 그것을 들어 주었습니다. 그래서 인재와 돈을 대주고 15년 동안은 전학삼에게 아무것도 묻지 말라는 명령을 내려 놓고 있었습니다.
그리고 이 사람 나이 61세, 1970년 4월에 중국이 인공위성 발사에 성공했습니다. 그리고 중국 정부가 이 모든 발사제작의 책임자가 전학삼이라는 것을 공식 확인해 주었습니다.
이렇게 보면 오늘날 중국의 우주과학 이러한 것도 전부 전학삼에서 나왔는데 그것도 결국은 미국의 기술입니다. 미국은 독일의 기술이고 소련도 독일의 기술입니다. 저는 이런 이야기를 하면서 우리가 러시아의 신세를 지는 것은 부끄러운 일이 아니다. 선진국도 다 그랬다는 말씀을 드리고자 합니다.

◈ 한국역사의 특수성

○ 미국이 우주과학을 발전시키기 위해서 중·고등학교의 수학 교과과정을 바꾸었다면 우리는 우리를 알기 위해서 무엇을 해야 하는가, 결론은 그것 입니다.

-역사를 보는 방법도 대단히 다양한데요. 우리는 초등학교 때 이렇게 배웠습니다.
‘조선은 500년 만에 망했다.’ 아마 이 가운데서 초등학교 때 공부 잘하신 분들은 이걸 기억하실 것입니다. 500년 만에 조선이 망한 이유 4가지를 달달 외우게 만들었습니다. 기억나십니까?
“사색당쟁, 대원군의 쇄국정책, 성리학의 공리공론, 반상제도 등 4가지 때문에 망했다.” 이렇게 가르칩니다. 그러면 대한민국 청소년들은 어떻게 생각하느냐 하면
‘아, 우리는 500년 만에 망한 민족이구나, 그것도 기분 나쁘게 일본에게 망했구나.’ 하는 참담한 심정을 갖게 되어 있습니다.

그런데 아까 나로호의 실패를 중국, 미국, 소련 등 다른 나라에 비추어 보듯이 우리 역사도 다른 나라에 비추어 보아야 됩니다.
조선이 건국된 것이 1392년이고 한일합방이 1910년입니다. 금년이 2010년이니까 한일합방 된 지 딱 100년이 되는 해입니다. 그러면 1392년부터 1910년까지 세계 역사를 놓고 볼 때 다른 나라 왕조는 600년, 700년, 1,000년 가고 조선만 500년 만에 망했으면 왜 조선은 500년 만에 망했는가 그 망한 이유를 찾는 것이 맞을 것입니다. 그런데 만약 다른 나라에는 500년을 간 왕조가 그 당시에 하나도 없고 조선만 500년 갔으면 어떻게 하겠습니까?

조선은 어떻게 해서 500년이나 갔을까 이것을 따지는 것이 맞을 것입니다.

-1300 년대의 역사 구도를 여러분이 놓고 보시면 전 세계에서 500년 간 왕조는 실제로 하나도 없습니다. 서구에서는 어떻게 됐느냐면, 신성로마제국이 1,200년째 계속되고 있었는데 그것은 제국이지 왕조가 아닙니다. 오스만투르크가 600년째 계속 되고 있었습니다. 그런데 그것도 제국이지 왕조는 아닙니다. 유일하게 500년 간 왕조가 하나 있습니다. 에스파냐왕국입니다. 그 나라가 500년째 가고 있었는데 불행히도 에스파냐왕국은 한 집권체가 500년을 지배한 것이 아닙니다.
예를 들면 나폴레옹이 ‘어, 이 녀석들이 말을 안 들어, 이거 안 되겠다. 형님, 에스파냐 가서 왕 좀 하세요.’ 그래서 나폴레옹의 형인 조셉 보나파르트가 에스파냐에 가서 왕을 했습니다. 이렇게 왔다 갔다 한 집권체이지 단일한 집권체가 500년 가지 못했습니다.

전세계에서 단일한 집권체가 518년째 가고 있는 것은 조선 딱 한 나라 이외에는 하나도 없습니다.

-그러면 잠깐 위로 올라가 볼까요.
고려가 500년 갔습니다. 통일신라가 1,000년 갔습니다. 고구려가 700년 갔습니다. 백제가 700년 갔습니다. 신라가 BC 57년에 건국됐으니까 BC 57년 이후에 세계 왕조를 보면 500년 간 왕조가 딱 두 개 있습니다. 러시아의 이름도 없는 왕조가 하나 있고 동남 아시아에 하나가 있습니다. 그 외에는 500년 간 왕조가 하나도 없습니다. 그러니까 통일신라처럼 1,000년 간 왕조도 당연히 하나도 없습니다. 고구려, 백제만큼 700년 간 왕조도 당연히 하나도 없습니다.
제가 지금 말씀드린 것은 과학입니다.

-그러면 이 나라는 엄청나게 신기한 나라입니다. 한 왕조가 세워지면 500년, 700년, 1,000년을 갔습니다. 왜 그럴까요? 그럴려면 두 가지 조건 중에 하나가 성립해야 합니다.
하나는 우리 선조가 몽땅 바보다, 그래서 권력자들, 힘 있는 자들이 시키면 무조건 굴종했다, 그러면 세계 역사상 유례없이 500년, 700년, 1,000년 갔을 것입니다. 그런데 우리 선조들이 바보가 아니었다, 인간으로서의 권리를 주장하고 다시 말씀드리면 인권에 관한 의식이 있고 심지어는 국가의 주인이라고 하는 의식이 있다면, 또 잘 대드는 성격이 있다면, 최소한도의 정치적인 합리성, 최소한도의 경제적인 합리성, 조세적인 합리성, 법적인 합리성, 문화의 합리성 이러한 것들이 있지 않으면 전 세계 역사상 유례없는 이러한 장기간의 통치가 불가능할 것이라고 말씀드릴 수 있습니다.

◈ 기록의 정신

○ "조선왕조실록(朝鮮王朝實錄)"을 보면 25년에 한 번씩 민란이 일어납니다.

여러분이 아시는 동학란이나 이런 것은 전국적인 규모이고, 이 민란은 요새 말로 하면 대규모의 데모에 해당합니다. 우리는 상소제도를 가지고 있었습니다. 백성들이, 기생도 노비도 글만 쓸 수 있으면 ‘왕과 나는 직접 소통해야겠다, 관찰사와 이야기하니까 되지를 않는다.’ 왕한테 편지를 보냅니다. 그런데 이런 상소제도에 불만을 가진 사람들이 생겨났습니다. 왜? 편지를 하려면 한문 꽤나 써야 되잖아요. ‘그럼 글 쓰는 사람만 다냐, 글 모르면 어떻게 하느냐’ 그렇게 해서 나중에는 언문상소를 허락해 주었습니다.

그래도 불만 있는 사람들이 나타났습니다. ‘그래도 글줄 깨나 해야 왕하고 소통하느냐, 나도 하고 싶다’ 이런 불만이 터져 나오니까 신문고를 설치했습니다. ‘그럼 와서 북을 쳐라’ 그러면 형조의 당직관리가 와서 구두로 말을 듣고 구두로 왕에게 보고했습니다. 이래도 또 불만이 터져 나왔습니다. 여러분, 신문고를 왕궁 옆에 매달아 놨거든요. 그러니까 지방 사람들이 뭐라고 했냐면 ‘왜 한양 땅에 사는 사람들만 그걸하게 만들었느냐, 우리는 뭐냐’ 이렇게 된 겁니다. 그래서 격쟁(?錚)이라는 제도가 생겼습니다. 격은 칠격(?)자이고 쟁은 꽹과리 쟁(錚)자입니다. 왕이 지방에 행차를 하면 꽹과리나 징을 쳐라. 혹은 대형 플래카드를 만들어서 흔들어라, 그럼 왕이 ‘무슨 일이냐’ 하고 물어봐서 민원을 해결해 주었습니다. 이것을 격쟁이라고 합니다.

○ 우리는 이러한 제도가 흔히 형식적인 제도겠지 라고 생각하지만 그게 아닙니다.
예를 들어 정조의 행적을 조사해 보면, 정조가 왕 노릇을 한 것이 24년입니다. 24년 동안 상소, 신문고, 격쟁을 해결한 건수가 5,000건 입니다. 이것을 제위 연수를 편의상 25년으로 나누어보면 매년 200건을 해결했다는 얘기이고 공식 근무일수로 따져보면 매일 1건 이상을 했다는 것입니다.

영조 같은 왕은 백성들이 너무나 왕을 직접 만나고 싶어 하니까 아예 날짜를 정하고 장소를 정해서 ‘여기에 모이시오.’ 해서 정기적으로 백성들을 만났습니다. 여러분, 서양의 왕 가운데 이런 왕 보셨습니까? 이것이 무엇을 말하느냐면 이 나라 백성들은 그렇게 안 해주면 통치할 수 없으니까 이러한 제도가 생겼다고 봐야 합니다.
그러면 이 나라 국민들은 바보가 아닙니다. 그렇게 보면 아까 말씀 드린 두 가지 사항 가운데 후자에 해당합니다. 이 나라 백성들은 만만한 백성이 아니다. 그러면 최소한도의 합리성이 있었을 것이다. 그 합리성이 무엇인가 하는 것을 오늘 말씀 드리고자 합니다.

-첫째는 조금 김새시겠지만 기록의 문화입니다.여러분이 이집트에 가 보시면, 저는 못 가봤지만 스핑크스가 있습니다. 그걸 딱 보면 어떠한 생각을 할까요? 중국에 가면 만리장성이 있습니다. 아마도 여기 계신 분들은 거의 다 이런 생각을 하셨을 것입니다. ‘이집트 사람, 중국 사람들은 재수도 좋다, 좋은 선조 만나서 가만히 있어도 세계의 관광달러가 모이는 구나’
여기에 석굴암을 딱 가져다 놓으면 좁쌀보다 작습니다. 우리는 뭐냐. 이런 생각을 하셨지요? 저도 많이 했습니다. 그런데 역사에 관심을 가지고 있다 보니까 그러한 유적이 우리에게 없는 것이 얼마나 다행인가 싶습니다. 베르사유의 궁전같이 호화찬란한 궁전이 없는 것이 얼마나 다행인가 싶습니다.

여러분, 만약 조선시대에 어떤 왕이 등극을 해서 피라미드 짓는 데 30만 명 동원해서 20년 걸렸다고 가정을 해보죠. 그 왕이 ‘국민 여러분, 조선백성 여러분, 내가 죽으면 피라미드에 들어가고 싶습니다. 그러니 여러분의 자제 청·장년 30만 명을 동원해서 한 20년 노역을 시켜야겠으니 조선백성 여러분, 양해하시오.’
그랬으면 무슨 일이 났을 것 같습니까? ‘마마, 마마가 나가시옵소서.’ 이렇게 되지 조선백성들이 20년 동안 그걸 하고 앉아있습니까? 안 하지요. 그러니까 우리에게는 그러한 문화적 유적이 남아 있을 수 없습니다. 만일 어떤 왕이 베르사유궁전 같은 것을 지으려고 했으면 무슨 일이 났겠습니까. ‘당신이 나가시오, 우리는 그런 것을 지을 생각이 없소.’ 이것이 정상적일 것입니다. 그러니까 우리에게는 그러한 유적이 있을 수가 없습니다.

-대신에 무엇을 남겨 주었느냐면 기록을 남겨주었습니다. 여기에 왕이 있다면, 바로 곁에 사관이 있습니다.
여러분, 이렇게 생각하시면 간단합니다. 여러분께서 아침에 출근을 딱 하시면, 어떠한 젊은이가 하나 달라붙습니다. 그래서 여러분이 하시는 말을 다 적고, 여러분이 만나는 사람을 다 적고, 둘이 대화한 것을 다 적고, 왕이 혼자 있으면 혼자 있다, 언제 화장실 갔으면 화장실 갔다는 것도 다 적고, 그것을 오늘 적고, 내일도 적고, 다음 달에도 적고 돌아가신 날 아침까지 적습니다. 기분이 어떠실 것 같습니까?
공식근무 중 사관이 없이는 왕은 그 누구도 독대할 수 없다고 경국대전에 적혀 있습니다. 우리가 사극에서 살살 간신배 만나고 장희빈 살살 만나고 하는 것은 다 거짓말입니다. 왕은 공식근무 중 사관이 없이는 누구도 만날 수 없게 되어 있습니다.

심지어 인조 같은 왕은 너무 사관이 사사건건 자기를 쫓아다니는 것이 싫으니까 어떤 날 대신들에게 ‘내일은 저 방으로 와, 저 방에서 회의할 거야.’ 그러고 도망갔습니다. 거기서 회의를 하고 있었는데 사관이 마마를 놓쳤습니다. 어디 계시냐 하다가 지필묵을 싸들고 그 방에 들어갔습니다. 인조가 ‘공식적인 자리가 아닌 데서 회의를 하는데도 사관이 와야 되는가?’ 그러니까 사관이 이렇게 말했습니다. ‘마마, 조선의 국법에는 마마가 계신 곳에는 사관이 있게 되어 있습니다.’ 그리고 적었습니다.
너무 그 사관이 괘씸해서 다른 죄목을 걸어서 귀향을 보냈습니다. 그러니까 다음 날 다른 사관이 와서 또 적었습니다. 이렇게 500년을 적었습니다.

사관은 종7품에서 종9품 사이입니다. 오늘날 대한민국의 공무원제도에 비교를 해보면 아무리 높아도 사무관을 넘지 않습니다. 그러한 사람이 왕을 사사건건 따라 다니며 다 적습니다. 이걸 500년을 적는데, 어떻게 했냐면 한문으로 써야 하니까 막 흘려 썼을 것 아닙니까? 그날 저녁에 집에 와서 정서를 했습니다. 이걸 사초라고 합니다.
그러다가 왕이 돌아가시면 한 달 이내, 이것이 중요합니다. 한 달 이내에 요새 말로 하면 왕조실록 편찬위원회를 구성합니다. 사관도 잘못 쓸 수 있잖아요. 그러니까 ‘영의정, 이러한 말 한 사실이 있소? 이러한 행동한 적이 있소?’ 확인합니다. 그렇게 해서 즉시 출판합니다. 4부를 출판했습니다. 4부를 찍기 위해서 목판활자, 나중에는 금속활자본을 만들었습니다.

여러분, 4부를 찍기 위해서 활자본을 만드는 것이 경제적입니까, 사람이 쓰는 것이 경제적입니까? 쓰는 게 경제적이지요. 그런데 왜 활판인쇄를 했느냐면 사람이 쓰면 글자 하나 빼먹을 수 있습니다. 글자 하나 잘못 쓸 수 있습니다. 하나 더 쓸 수 있습니다. 이렇게 해서 후손들에게 4부를 남겨주는데 사람이 쓰면 4부가 다를 수 있습니다. 그러면 후손들이 어느 것이 정본인지 알 수 없습니다. 그러니까 목판활자, 금속활자본을 만든 이유는 틀리더라도 똑같이 틀려라, 그래서 활자본을 만들었습니다.
이렇게 해서 500년 분량을 남겨주었습니다.

유네스코에서 조사를 했습니다. 왕의 옆에서 사관이 적고 그날 저녁에 정서해서 왕이 죽으면 한 달 이내에 출판 준비에 들어가서 만들어낸 역사서를 보니까 전 세계에 조선만이 이러한 기록을 가지고 있습니다. 이것이 6,400만자입니다. 6,400만자 하면 좀 적어 보이지요? 그런데 6,400만자는 1초에 1자씩 하루 4시간을 보면 11.2년 걸리는 분량입니다. 그러니까 우리나라에는 공식적으로 "조선왕조실록"을 다룬 학자는 있을 수가 없게 되어 있습니다.

-그런데 여러분, 이러한 생각 안 드세요? ‘사관도 사람인데 공정하게 역사를 기술했을까’ 이런 궁금증이 가끔 드시겠지요? 사관이 객관적이고 공정한 역사를 쓰도록 어떤 시스템을 가지고 있었는지를 말씀드리죠.
세종이 집권하고 나서 가장 보고 싶은 책이 있었습니다. 뭐냐 하면 태종실록입니다. ‘아버지의 행적을 저 사관이 어떻게 썼을까?’ 너무너무 궁금해서 태종실록을 봐야겠다고 했습니다. 맹사성이라는 신하가 나섰습니다.
‘보지 마시옵소서.’ ‘왜, 그런가.’ ‘마마께서 선대왕의 실록을 보시면 저 사관이 그것이 두려워서 객관적인 역사를 기술할 수 없습니다.’
세종이 참았습니다. 몇 년이 지났습니다. 또 보고 싶어서 환장을 했습니다. 그래서 ‘선대왕의 실록을 봐야겠다.’ 이번에는 핑계를 어떻게 댔느냐면 ‘선대왕의 실록을 봐야 그것을 거울삼아서 내가 정치를 잘할 것이 아니냐’
그랬더니 황 희 정승이 나섰습니다. ‘마마, 보지 마시옵소서.’ ‘왜, 그런가.’
‘마마께서 선대왕의 실록을 보시면 이 다음 왕도 선대왕의 실록을 보려 할 것이고 다음 왕도 선대왕의 실록을 보려할 것입니다. 그러면 저 젊은 사관이 객관적인 역사를 기술할 수 없습니다. 그러므로 마마께서도 보지 마시고 이다음 조선왕도 영원히 실록을 보지 말라는 교지를 내려주시옵소서.’ 그랬습니다.
이걸 세종이 들었겠습니까, 안 들었겠습니까? 들었습니다. ‘네 말이 맞다. 나도 영원히 안 보겠다. 그리고 조선의 왕 누구도 실록을 봐서는 안 된다’는 교지를 내렸습니다. 그래서 조선의 왕 누구도 실록을 못 보게 되어 있었습니다.

-그런데 사실은 중종은 슬쩍 봤습니다. 봤다는 기록이 남아 있습니다. 그러나 그 누구도 안보는 것이 원칙으로 되어 있었습니다.
여러분, 왕이 못 보는데 정승판서가 봅니까? 정승판서가 못 보는데 관찰사가 봅니까? 관찰사가 못 보는데 변 사또가 봅니까?
이런 사람이 못 보는데 국민이 봅니까? 여러분, 문제는 여기에 있습니다.
조선시대 그 어려운 시대에 왕의 하루하루의 그 행적을 모든 정치적인 상황을 힘들게 적어서 아무도 못 보는 역사서를 500년을 썼습니다. 누구 보라고 썼겠습니까?

대한민국 국민 보라고 썼습니다.

저는 이런 생각을 합니다. 이 땅은 영원할 것이다. 그리고 우리의 핏줄 받은 우리 민족이 이 땅에서 영원히 살아갈 것이다. 그러니까 우리의 후손들이여, 우리는 이렇게 살았으니 우리가 살았던 문화, 제도, 양식을 잘 참고해서 우리보다 더 아름답고 멋지고 강한 나라를 만들어라, 이러한 역사의식이 없다면 그 어려운 시기에 왕도 못 보고 백성도 못 보고 아무도 못 보는 그 기록을 어떻게 해서 500년이나 남겨주었겠습니까.
"조선왕조실록"은 한국인의 보물일 뿐 아니라 인류의 보물이기에, 유네스코가 세계기록문화유산으로 지정을 해 놨습니다.

○ ‘승정원일기(承政院日記)’가 있습니다. 승정원은 오늘날 말하자면 청와대비서실입니다. 사실상 최고 권력기구지요. 이 최고 권력기구가 무엇을 하냐면 ‘왕에게 올릴 보고서, 어제 받은 하명서, 또 왕에게 할 말’ 이런 것들에 대해 매일매일 회의를 했습니다. 이 일지를 500년 동안 적어 놓았습니다. 아까 실록은 그날 밤에 정서했다고 했지요. 그런데 ‘승정원일기’는 전월 분을 다음 달에 정리했습니다. 이 ‘승정원일기’를 언제까지 썼느냐면 조선이 망한 해인 1910년까지 썼습니다. 누구 보라고 써놓았겠습니까? 대한민국 국민 보라고 썼습니다. 유네스코가 조사해보니 전 세계에서 조선만이 그러한 기록을 남겨 놓았습니다. 그런데 ‘승정원일기’는 임진왜란 때 절반이 불타고 지금 288년 분량이 남아있습니다. 이게 몇 자냐 하면 2억 5,000만자입니다. 요새 국사편찬위원회에서 이것을 번역하려고 조사를 해 보니까 잘하면 앞으로 50년 후에 끝나고 못하면 80년 후에 끝납니다. 이러한 방대한 양을 남겨주었습니다. 이것이 우리의 선조입니다.

○ ‘일성록(日省錄)’이라는 책이 있습니다. 날 日자, 반성할 省자입니다. 왕들의 일기입니다. 정조가 세자 때 일기를 썼습니다. 그런데 왕이 되고 나서도 썼습니다. 선대왕이 쓰니까 그 다음 왕도 썼습니다. 선대왕이 썼으니까 손자왕도 썼습니다. 언제까지 썼느냐면 나라가 망하는 1910년까지 썼습니다.
아까 ‘조선왕조실록’은 왕들이 못 보게 했다고 말씀 드렸지요. 선대왕들이 이러한 경우에 어떻게 정치했는가를 지금 왕들이 알게 하려면 어떻게 해야 되는가를 정조가 고민해서 기왕에 쓰는 일기를 체계적, 조직적으로 썼습니다. 국방에 관한 사항, 경제에 관한 사항, 과거에 관한 사항, 교육에 관한 사항 이것을 전부 조목조목 나눠서 썼습니다.
여러분, 150년 분량의 제왕의 일기를 가진 나라를 전 세계에 가서 찾아보십시오. 저는 우리가 서양에 가면 흔히들 주눅이 드는데 이제부터는 그럴 필요 없다고 생각을 합니다.

저는 언젠가는 이루어졌으면 하는 꿈과 소망이 있습니다. 이러한 책들을 전부 한글로 번역합니다. 이 가운데 ‘조선왕조실록’은 개략적이나마 번역이 되어 있고 나머지는 손도 못 대고 있습니다. 이것을 번역하고 나면 그 다음에 영어로 하고 핀란드어로 하고 노르웨이어로 하고 덴마크어로 하고 스와힐리어로 하고 전 세계 언어로 번역합니다. 그래서 컴퓨터에 탑재한 다음날 전 세계 유수한 신문에 전면광고를 냈으면 좋겠습니다.
‘세계인 여러분, 아시아의 코리아에 150년간의 제왕의 일기가 있습니다. 288년간의 최고 권력기구인 비서실의 일기가 있습니다. 실록이 있습니다. 혹시 보시고 싶으십니까? 아래 주소를 클릭하십시오. 당신의 언어로 볼 수 있습니다.’
해서 이것을 본 세계인이 1,000만이 되고, 10억이 되고 20억이 되면 이 사람들은 코리안들을 어떻게 생각할 것 같습니까.
‘야, 이놈들 보통 놈들이 아니구나. 어떻게 이러한 기록을 남기는가, 우리나라는 뭔가.’이러한 의식을 갖게 되지 않겠습니까. 그게 뭐냐면 국격이라고 하는 것입니다. 한국이라고 하는 브랜드가 그만큼 세계에서 올라가는 것입니다. 우리의 선조들은 이러한 것을 남겨주었는데 우리가 지금 못 하고 있을 뿐입니다.

○ 이러한 기록 중에 지진에 대해 제가 조사를 해 보았습니다. '삼국사기(三國史記)'에는 지진이 87회 기록되어 있습니다. ‘삼국유사(三國遺事)’에는 3회 기록되어 있습니다. ‘고려사(高麗史)’에는 249회의 지진에 관한 기록이 있습니다. ‘조선왕조실록’에는 2,029회 나옵니다. 다 합치면 2,368회의 지진에 관한 기록이 있습니다.

우리 방폐장, 핵발전소 만들 때 이것을 참고해야 한다고 생각합니다. 이것을 통계를 내면 어느 지역에서는 155년마다 한 번씩 지진이 났었을 수 있습니다. 어느 지역은 200년마다 한 번씩 지진이 났었을 수 있습니다. 이러한 지역을 다 피해서 2000년 동안 지진이 한 번도 안 난 지역에 방폐장, 핵발전소 만드는 것이 맞을 것입니다. 이렇게 해서 방폐장, 핵발전소 만들면 세계인들이 틀림없이 산업시찰을 올 것입니다. 그러면 수력발전소도 그런 데 만들어야지요. 정문에 구리동판을 세워놓고 영어로 이렇게 썼으면 좋겠습니다.
‘우리 민족이 가진 2,000년 동안의 자료에 의하면 이 지역은 2,000년 동안 단 한번도 지진이 발생하지 않았다. 따라서 이곳에 방폐장, 핵발전소, 수력발전소를 만든다. 대한민국 국민 일동.’
이렇게 하면 전 세계인들이 이것을 보고 ‘정말 너희들은 2,000년 동안의 지진에 관한 기록이 있느냐?’고 물어볼 것이고, 제가 말씀드린 책을 카피해서 기록관에 하나 갖다 놓으면 됩니다.

이 지진의 기록도 굉장히 구체적입니다. 어떻게 기록이 되어 있느냐 하면 ‘우물가의 버드나무 잎이 흔들렸다’ 이것이 제일 약진입니다. ‘흙담에 금이 갔다, 흙담이 무너졌다, 돌담에 금이 갔다, 돌담이 무너졌다, 기왓장이 떨어졌다, 기와집이 무너졌다‘ 이렇게 되어 있습니다.
현재 지진공학회에서는 이것을 가지고 리히터 규모로 계산을 해 내고 있습니다. 대략 강진만 뽑아보니까 통일신라 이전까지 11회 강진이 있었고 고려시대에는 11회 강진이, 조선시대에는 26회의 강진이 있었습니다. 합치면 우리는 2,000년 동안 48회의 강진이 이 땅에 있었습니다.
이러한 것을 계산할 수 있는 자료를 신기하게도 선조들은 우리에게 남겨주었습니다.

◈ 정치, 경제적 문제

○ 그 다음에 조세에 관한 사항을 보시겠습니다.

세종이 집권을 하니 농민들이 토지세 제도에 불만이 많다는 상소가 계속 올라옵니다. 세종이 말을 합니다.
‘왜 이런 일이 나는가?’ 신하들이 ‘사실은 고려 말에 이 토지세 제도가 문란했는데 아직까지 개정이 안 되었습니다.’
세종의 리더십은 ‘즉시 명령하여 옳은 일이라면 현장에서 해결 한다’는 입장입니다. 그래서 개정안이 완성되었습니다. 세종12년 3월에 세종이 조정회의에 걸었지만 조정회의에서 부결되었습니다. 왜 부결 되었냐면 ‘마마, 수정안이 원래의 현행안보다 농민들에게 유리한 것은 틀림없습니다. 그러나 농민들이 좋아할지 안 좋아할지 우리는 모릅니다.’ 이렇게 됐어요. ‘그러면 어떻게 하자는 말이냐’ 하다가 기발한 의견이 나왔어요.
‘직접 물어봅시다.’ 그래서 물어보는 방법을 찾는 데 5개월이 걸렸습니다. 세종12년 8월에 국민투표를 실시했습니다. 그 결과 찬성 9만 8,657표, 반대 7만 4,149표 이렇게 나옵니다. 찬성이 훨씬 많지요. 세종이 조정회의에 다시 걸었지만 또 부결되었습니다. 왜냐하면 대신들의 견해는 ‘마마, 찬성이 9만 8,000, 반대가 7만 4,000이니까 찬성이 물론 많습니다. 그러나 7만 4,149표라고 하는 반대도 대단히 많은 것입니다. 이 사람들이 상소를 내기 시작하면 상황은 전과 동일합니다.’ 이렇게 됐어요. 

세종이 ‘그러면 농민에게 더 유리하도록 안을 만들어라.’해서 안이 완성되었습니다. 그래서 실시하자 그랬는데 또 부결이 됐어요. 그 이유는 ‘백성들이 좋아할지 안 좋아할지 모릅니다.’였어요. ‘그러면 어떻게 하자는 말이냐’하니 ‘조그마한 지역에 시범실시를 합시다.’ 이렇게 됐어요. 
시범실시를 3년 했습니다. 결과가 성공적이라고 올라왔습니다. ‘전국에 일제히 실시하자’고 다시 조정회의에 걸었습니다. 조정회의에서 또 부결이 됐어요. ‘마마, 농지세라고 하는 것은 토질이 좋으면 생산량이 많으니까 불만이 없지만 토질이 박하면 생산량이 적으니까 불만이 있을 수 있습니다. 그래서 이 지역과 토질이 전혀 다른 지역에도 시범실시를 해 봐야 됩니다.’ 세종이 그러라고 했어요. 다시 시범실시를 했어요. 성공적이라고 올라왔어요. 
세종이 ‘전국에 일제히 실시하자’고 다시 조정회의에 걸었습니다. 또 부결이 됐습니다. 이유는 ‘마마, 작은 지역에서 이 안을 실시할 때 모든 문제점을 우리는 토론했습니다. 그러나 전국에서 일제히 실시할 때 무슨 문제가 나는지를 우리는 토론한 적이 없습니다.’ 세종이 토론하라 해서 세종25년 11월에 이 안이 드디어 공포됩니다. 
조선시대에 정치를 이렇게 했습니다. 세종이 백성을 위해서 만든 개정안을 정말 백성이 좋아할지 안 좋아할지를 국민투표를 해 보고 시범실시를 하고 토론을 하고 이렇게 해서 13년만에 공포·시행했습니다. 

대한민국정부가 1945년 건립되고 나서 어떤 안을 13년 동안 이렇게 연구해서 공포·실시했습니까. 저는 이러한 정신이 있기 때문에 조선이 500년이나 간 것이 아닌가 하는 생각을 하고 있습니다. 

◈ 법률 문제 

○ 법에 관한 문제를 보시겠습니다. 

우리가 오늘날 3심제를 하지 않습니까? 조선시대에는 어떻게 했을 것 같습니까? 조선시대에 3심제는 없었습니다. 그런데 사형수에 한해서는 3심제를 실시했습니다. 원래는 조선이 아니라 고려 말 고려 문종 때부터 실시했는데, 이를 삼복제(三覆制)라고 합니다. 
조선시대에 사형수 재판을 맨 처음에는 변 사또 같은 시골 감형에서 하고, 두 번째 재판은 고등법원, 관찰사로 갑니다. 옛날에 지방관 관찰사는 사법권을 가지고 있었습니다. 마지막 재판은 서울 형조에 와서 받았습니다. 재판장은 거의 모두 왕이 직접 했습니다. 왕이 신문을 했을 때 그냥 신문한 것이 아니라 신문한 것을 옆에서 받아썼어요. 조선의 기록정신이 그렇습니다. 기록을 남겨서 그것을 책으로 묶었습니다. 
그 책 이름이 ‘심리록(審理錄)’이라는 책입니다. 정조가 1700년대에 이 '심리록'을 출판했습니다. 오늘날 번역이 되어 큰 도서관에 가시면 ‘심리록’이라는 책이 있습니다. 왕이 사형수를 직접 신문한 내용이 거기에 다 나와 있습니다. 
왕들은 뭐를 신문했냐 하면 이 사람이 사형수라고 하는 증거가 과학적인가 아닌가 입니다. 또 한 가지는 고문에 의해서 거짓 자백한 것이 아닐까를 밝히기 위해서 왕들이 무수히 노력합니다. 이 증거가 맞느냐 과학적이냐 합리적이냐 이것을 계속 따집니다. 이래서 상당수의 사형수는 감형되거나 무죄 석방되었습니다. 
이런 것이 조선의 법입니다. 이렇기 때문에 조선이 500년이나 간 것이 아닌가 하는 생각을 합니다. 

◈ 과학적 사실 

○ 다음에는 과학에 대해 말씀 드리겠습니다. 

코페르니쿠스가 태양이 아니라 지구가 돈다고 지동설을 주장한 것이 1543년입니다. 그런데 코페르니쿠스의 주장에는 이미 다 아시겠지만 물리학적 증명이 없었습니다. 물리학적으로 지구가 돈다는 것을 증명한 것은 1632년에 갈릴레오가 시도했습니다. 종교법정이 그를 풀어주면서도 갈릴레오의 책을 보면 누구나 지동설을 믿을 수밖에 없으니까 책은 출판금지를 시켰습니다. 그 책이 인류사에 나온 것은 그로부터 100년 후입니다. 1767년에 인류사에 나왔습니다. 

-동양에서는 어떠냐 하면 지구는 사각형으로 생겼다고 생각했습니다. 하늘은 둥글고 지구는 사각형이다, 이를 천원지방설(天圓地方說)이라고 얘기합니다. 그런데 실은 동양에서도 지구는 둥글 것이라고 얘기한 사람들이 상당히 많았습니다. 대표적인 사람이 여러분들이 아시는 성리학자 주자입니다, 주희. 주자의 책을 보면 지구는 둥글 것이라고 나와 있습니다. 황진이의 애인, 고려시대 학자 서화담의 책을 봐도 ‘지구는 둥글 것이다, 지구는 둥글어야 한다, 바닷가에 가서 해양을 봐라 지구는 둥글 것이다’ 이렇게 주장했습니다. 

-그런데 이것을 어떠한 형식이든 증명한 것이 1400년대 이순지(李純之)라고 하는 세종시대의 학자입니다. 이순지는 지구는 둥글다고 선배 학자들에게 주장했습니다. 그는 ‘일식의 원리처럼 태양과 달 사이에 둥근 지구가 들어가고 그래서 지구의 그림자가 달에 생기는 것이 월식이다, 그러니까 지구는 둥글다.’ 이렇게 말했습니다. 이것이 1400년대입니다. 그러니까 선배 과학자들이 ‘그렇다면 우리가 일식의 날짜를 예측할 수 있듯이 월식도 네가 예측할 수 있어야 할 것 아니냐’고 물었습니다. 이순지는 모년 모월 모시 월식이 생길 것이라고 했고 그날 월식이 생겼습니다. 이순지는 ‘교식추보법(交食推步法)’이라는 책을 썼습니다. 일식, 월식을 미리 계산해 내는 방법이라는 책입니다. 그 책은 오늘날 남아 있습니다. 

이렇게 과학적인 업적을 쌓아가니까 세종이 과학정책의 책임자로 임명했습니다. 이때 이순지의 나이 약관 29살입니다. 그리고 첫 번째 준 임무가 조선의 실정에 맞는 달력을 만들라고 했습니다. 여러분, 동지상사라고 많이 들어보셨지요? 동짓달이 되면 바리바리 좋은 물품을 짊어지고 중국 연변에 가서 황제를 배알하고 뭘 얻어 옵니다. 다음 해의 달력을 얻으러 간 것입니다. 달력을 매년 중국에서 얻어 와서는 자주독립국이 못될뿐더러, 또 하나는 중국의 달력을 갖다 써도 해와 달이 뜨는 시간이 다르므로 사리/조금의 때가 정확하지 않아요. 
그러니까 조선 땅에 맞는 달력이 필요하다 이렇게 됐습니다. 수학자와 천문학자가 총 집결을 했습니다. 이순지가 이것을 만드는데 세종한테 그랬어요. 
‘못 만듭니다.’ 
‘왜?’ 
‘달력을 서운관(書雲觀)이라는 오늘날의 국립기상천문대에서 만드는데 여기에 인재들이 오지 않습니다.’ 
‘왜 안 오는가?’ 
‘여기는 진급이 느립니다.’ 그랬어요. 
오늘날 이사관쯤 되어 가지고 국립천문대에 발령받으면 물 먹었다고 하지 않습니까? 행정안전부나 청와대비서실 이런 데 가야 빛 봤다고 하지요? 옛날에도 똑같았어요. 그러니까 세종이 즉시 명령합니다. 
‘서운관의 진급속도를 제일 빠르게 하라.’ 
‘그래도 안 옵니다.’ 
‘왜?’ 
‘서운관은 봉록이 적습니다.’ 
‘봉록을 올려라.’ 그랬어요. 
‘그래도 인재들이 안 옵니다.’ 
‘왜?’ 
‘서운관 관장이 너무나 약합니다.’ 
‘그러면 서운관 관장을 어떻게 할까?’ 
‘강한 사람을 보내주시옵소서. 왕의 측근을 보내주시옵소서.’ 
세종이 물었어요. ‘누구를 보내줄까?’ 
누구를 보내달라고 했는 줄 아십니까? 
‘정인지를 보내주시옵소서.’ 그랬어요. 정인지가 누구입니까? 고려사를 쓰고 한글을 만들고 세종의 측근 중의 측근이고 영의정입니다. 

세종이 어떻게 했을 것 같습니까? 영의정 정인지를 서운관 관장으로 겸임 발령을 냈습니다. 그래서 1,444년에 드디어 이 땅에 맞는 달력을 만드는 데 성공했습니다. 이순지는 당시 가장 정확한 달력이라고 알려진 아라비아의 회회력의 체제를 몽땅 분석해 냈습니다. 일본학자가 쓴 세계천문학사에는 회회력을 가장 과학적으로 정교하게 분석한 책이 조선의 이순지著 ‘칠정산외편(七政算外篇)’이라고 나와 있습니다. 

그런데 달력이 하루 10분, 20분, 1시간 틀려도 모릅니다. 한 100년, 200년 가야 알 수 있습니다. 이 달력이 정확한지 안 정확한지를 어떻게 아냐면 이 달력으로 일식을 예측해서 정확히 맞으면 이 달력이 정확한 것입니다. 이순지는 '칠정산외편'이라는 달력을 만들어 놓고 공개를 했습니다. 1,447년 세종 29년 음력 8월 1일 오후 4시 50분 27초에 일식이 시작될 것이고 그날 오후 6시 55분 53초에 끝난다고 예측했습니다. 이게 정확하게 맞아떨어졌습니다. 세종이 너무나 반가워서 그 달력의 이름을 ‘칠정력’이라고 붙여줬습니다. 이것이 그 후에 200년간 계속 사용되었습니다. 

여러분 1,400년대 그 당시에 자기 지역에 맞는 달력을 계산할 수 있고 일식을 예측할 수 있는 나라는 전 세계에 세 나라밖에 없었다고 과학사가들은 말합니다. 하나는 아라비아, 하나는 중국, 하나는 조선입니다. 
그런데 이순지가 이렇게 정교한 달력을 만들 때 달력을 만든 핵심기술이 어디 있냐면 지구가 태양을 도는 시간을 얼마나 정교하게 계산해 내는가에 달려 있습니다. ‘칠정산외편’에 보면 이순지는 지구가 태양을 도는 데 걸리는 시간은 365일 5시간 48분 45초라고 계산해 놓았습니다. 오늘날 물리학적인 계산은 365일 5시간 48분 46초입니다. 1초 차이가 나게 1400년대에 계산을 해냈습니다. 여러분, 그 정도면 괜찮지 않습니까? 

-홍대용이라는 사람은 수학을 해서 ‘담헌서(湛軒書)’라는 책을 썼습니다. ‘담헌서’는 한글로 번역되어 큰 도서관에는 다 있습니다. 이 ‘담헌서’ 가운데 제5권이 수학책입니다. 홍대용이 조선시대에 발간한 수학책의 문제가 어떤지 설명 드리겠습니다. ‘구체의 체적이 6만 2,208척이다. 이 구체의 지름을 구하라.’ cos, sin, tan가 들어가야 할 문제들이 쫙 깔렸습니다. 조선시대의 수학책인 ‘주해수용(籌解需用)’에는 이렇게 되어 있습니다. 
sinA를 한자로 正弦, cosA를 餘弦, tanA를 正切, cotA를 餘切, secA를 正割, cosecA를 如割, 1-cosA를 正矢, 1-sinA를 餘矢 이렇게 되어 있습니다. 그러면 이런 것이 있으려면 삼각함수표가 있어야 되잖아요. 이 ‘주해수용’의 맨 뒤에 보면 삼각함수표가 그대로 나와 있습니다. 제가 한 번 옮겨봤습니다. 
예를 들면 正弦 25도 42분 51초, 다시 말씀 드리면 sin25.4251도의 값은 0.4338883739118 이렇게 나와 있습니다. 제가 이것을 왜 다 썼느냐 하면 소수점 아래 몇 자리까지 있나 보려고 제가 타자로 다 쳐봤습니다. 소수점 아래 열세 자리까지 있습니다. 이만하면 조선시대 수학책 괜찮지 않습니까? 

다른 문제 또 하나 보실까요? 甲地와 乙地는 동일한 子午眞線에 있다. 조선시대 수학책 문제입니다. 이때는 子午線이라고 안 하고 子午眞線이라고 했습니다. 이런 것을 보면 이미 이 시대가 되면 지구는 둥글다고 하는 것이 보편적인 지식이 되어 있는 것 같습니다. 甲地와 乙地는 동일한 子午線上에 있다. 甲地는 北極出地, 北極出地는 緯度라는 뜻입니다. 甲地는 緯度 37도에 있고 乙地는 緯度 36도 30분에 있다. 甲地에서 乙地로 직선으로 가는데 고뢰(鼓?)가 12번 울리고 종료(鍾鬧)가 125번 울렸다. 이때 지구 1도의 里數와 지구의 지름, 지구의 둘레를 구하라. 이러한 문제입니다. 

이 고뢰(鼓? ) , 종료(鍾鬧)는 뭐냐 하면 여러분 김정호가 그린 대동여지도를 초등학교 때 사회책에서 보면 오늘날의 지도와 상당히 유사하지 않습니까? 옛날 조선시대의 지도가 이렇게 오늘날 지도와 비슷했을까? 이유는 축척이 정확해서 그렇습니다. 대동여지도는 십리 축척입니다. 십리가 한 눈금으로 되어 있는데 이것이 왜 정확하냐면 기리고거(記里鼓車)라고 하는 수레를 끌고 다녔습니다. 
기리고거가 뭐냐 하면 기록할 記자, 리는 백리 2백리 하는 里자, 里數를 기록하는, 고는 북 鼓자, 북을 매단 수레 車, 수레라는 뜻입니다. 어떻게 만들었냐 하면 수레가 하나 있는데 중국의 동진시대에 나온 수레입니다. 바퀴를 정확하게 원둘레가 17척이 되도록 했습니다. 17척이 요새의 계산으로 하면 대략 5미터입니다. 이것이 100바퀴를 굴러가면 그 위에 북을 매달아놨는데 북을 ‘뚱’하고 치게 되어 있어요. 북을 열 번 치면 그 위에 종을 매달아놨는데 종을 ‘땡’하고 치게 되어 있어요. 여기 고뢰, 종료라고 하는 것이 그것입니다. 그러니까 이것이 5km가 되어서 딱 10리가 되면 종이 ‘땡’하고 칩니다. 김정호가 이것을 끌고 다녔습니다. 

우리 세종이 대단한 왕입니다. 몸에 피부병이 많아서 온양온천을 자주 다녔어요. 그런데 온천에 다닐 때도 그냥 가지 않았습니다. 이 기리고거를 끌고 갔어요. 그래서 한양과 온양 간이라도 길이를 정확히 계산해 보자 이런 것을 했었어요. 이것을 가지면 지구의 지름, 지구의 둘레를 구할 수 있다는 얘기입니다. 그러니까 원주를 파이로 나누면 지름이다 하는 것이 이미 보편적인 지식이 되어 있었습니다. 

◈ 수학적 사실 

○ 그러면 우리 수학의 씨는 어디에 있었을까 하는 것인데요, 

여러분 불국사 가보시면 건물 멋있잖아요. 석굴암도 멋있잖아요. 불국사를 지으려면 건축학은 없어도 건축술은 있어야 할 것이 아닙니까, 최소한 건축술이 있으려면 물리학은 없어도 물리술은 있어야 할 것 아닙니까. 물리술이 있으려면 수학은 없어도 산수는 있어야 할 것 아닙니까? 이게 제가 고등학교 3학년 때 가졌던 의문입니다, 이것을 어떻게 지었을까. 
그런데 저는 ‘삼국사기’의 저자 김부식 선생님을 너무 너무 존경합니다. 여러분 세계에서 가장 오래된 대학이 어디인 줄 아십니까? 에스파냐, 스페인에 있습니다. 1490년대에 국립대학이 세워졌습니다. 여러분이 아시는 옥스퍼드와 캠브리지는 1600년대에 세워진 대학입니다. 우리는 언제 국립대학이 세워졌느냐, ‘삼국사기’를 보면 682년, 신문왕 때 국학이라는 것을 세웁니다. 그것을 세워놓고 하나는 철학과를 만듭니다. 관리를 길러야 되니까 논어, 맹자를 가르쳐야지요. 그런데 학과가 또 하나 있습니다. 김부식 선생님은 어떻게 써놓았냐면 ‘산학박사와 조교를 두었다.’ 이렇게 되어 있습니다. 명산과입니다. 밝을 明자, 계산할 算자, 科. 계산을 밝히는 과, 요새 말로 하면 수학과입니다. 수학과를 세웠습니다. ‘15세에서 30세 사이의 청년 공무원 가운데 수학에 재능이 있는 자를 뽑아서 9년 동안 수학교육을 실시하였다.’ 이렇게 되어 있습니다. 여기를 졸업하게 되면 산관(算官)이 됩니다. 수학을 잘 하면 우리나라는 공무원이 됐습니다. 
전 세계에서 가서 찾아보십시오. 수학만 잘 하면 공무원이 되는 나라 찾아보십시오. 이것을 산관이라고 합니다. 삼국시대부터 조선이 망할 때까지 산관은 계속 되었습니다. 이 산관이 수학의 발전에 엄청난 기여를 하게 됩니다. 산관들은 무엇을 했느냐, 세금 매길 때, 성 쌓을 때, 농지 다시 개량할 때 전부 산관들이 가서 했습니다. 세금을 매긴 것이 산관들입니다. 
그런데 그때의 수학 상황을 알려면 무슨 교과서로 가르쳤느냐가 제일 중요하겠지요? 정말 제가 존경하는 김부식 선생님은 여기다가 그 당시 책 이름을 쫙 써놨어요. 삼개(三開), 철경(綴經), 구장산술(九章算術), 육장산술(六章算術)을 가르쳤다고 되어 있습니다. 그 가운데 오늘날 우리가 볼 수 있는 것은 구장산술이라는 수학책이 유일합니다. 구장산술은 언제인가는 모르지만 중국에서 나왔습니다. 최소한도 진나라 때 나왔을 것이라고 얘기하고 있습니다. 어떤 사람은 주나라 문왕이 썼다고 하는데 중국에서는 좋은 책이면 무조건 다 주나라 문왕이 썼다고 하는 경향이 있습니다. 
이 책의 제 8장의 이름이 방정입니다. 방정이 영어로는 equation입니다. 방정이라는 말을 보고 제 온 몸에 소름이 쫙 돋았습니다. 저는 사실은 중학교 때 고등학교 때부터 방정식을 푸는데, 방정이라는 말이 뭘까가 가장 궁금했습니다. 어떤 선생님도 그것을 소개해 주지 않았습니다. 그런데 이 책에 보니까 우리 선조들이 삼국시대에 이미 방정이라는 말을 쓴 것을 저는 외국수학인 줄 알고 배운 것입니다. 

○ 9 장을 보면 9장의 이름은 구고(勾股)입니다. 갈고리 勾자, 허벅다리 股자입니다. 맨 마지막 chapter입니다. 방정식에서 2차 방정식이 나옵니다. 그리고 미지수는 다섯 개까지 나옵니다. 그러니까 5원 방정식이 나와 있습니다. 중국 학생들은 피타고라스의 정리라는 말을 모릅니다. 여기에 구고(勾股)정리라고 그래도 나옵니다. 자기네 선조들이 구고(勾股)정리라고 했으니까. 
여러분 이러한 삼각함수 문제가 여기에 24문제가 나옵니다. 24문제는 제가 고등학교 때 상당히 힘들게 풀었던 문제들이 여기에 그대로 나옵니다. 이러한 것을 우리가 삼국시대에 이미 교육을 했습니다. 그런데 우리는 이러한 것들이 전부 서양수학인 줄 알고 배우고 있습니다. 
여기에는 밀률(密率)이라는 말도 나옵니다. 비밀할 때 密, 비율 할 때 率. 밀률의 값은 3으로 한다고 되어 있습니다. 고려시대의 수학교과서를 보면 밀률의 값은 3.14로 한다. 이렇게 되어 있습니다. 아까 이순지의 칠정산외편, 달력을 계산해 낸 그 책에 보면 ‘밀률의 값은 3.14159로 한다.’ 이렇게 되어 있습니다. 우리 다 그거 삼국시대에 했습니다. 그런데 어떻게 해서 우리는 오늘날 플러스, 마이너스, 정사각형 넓이, 원의 넓이, 방정식, 삼각함수 등을 외국수학으로 이렇게 가르치고 있느냐는 겁니다. 

저는 이런 소망을 강력히 가지고 있습니다. 
우리 초등학교나 중·고등 학교 책에 플러스, 마이너스를 가르치는 chapter가 나오면 우리 선조들은 늦어도 682년 삼국시대에는 플러스를 바를 正자 정이라 했고 마이너스를 부채, 부담하는 부(負)라고 불렀다. 그러나 편의상 正負라고 하는 한자 대신 세계수학의 공통부호인 +-를 써서 표기하자, 또 π를 가르치는 chapter가 나오면 682년 그 당시 적어도 삼국시대에는 우리는 π를 밀률이라고 불렀다, 밀률은 영원히 비밀스런 비율이라는 뜻이다, 오늘 컴퓨터를 π를 계산해 보면 소수점 아래 1조자리까지 계산해도 무한소수입니다. 그러니까 무한소수라고 하는 영원히 비밀스런 비율이라는 이 말은 철저하게 맞는 말이다, 그러나 밀률이라는 한자 대신 π라고 하는 세계수학의 공통 부호를 써서 풀기로 하자 하면 수학시간에도 민족의 숨결을 느낄 수 있습니다. 
저는 없는 것을 가지고 대한민국이 세계 제일이다라고 말씀드리는 것이 아닙니다. 선조들이 명백하게 다큐멘트, 문건으로 남겨주었음에도 불구하고 우리 선조들이 그것을 배웠음에도 불구하고 이것이 ‘서양 것’이라고 가르치는 것은 거짓이 아닌가라는 생각이 듭니다. 이러한 것이 전부 정리되면 세계사에 한국의 역사가 많이 올라갈 수 있을 것입니다. 이것은 우리가 잘났다는 것을 자랑하는 것이 아니라 인류의 역사인 세계사를 풍성하게 한다는, 세계사에 대한 기여입니다. 

◈ 맺는 말 

○ 결론으로 들어가겠습니다. 

제가 지금까지 말씀드린 모든 자료는 한문으로 되어 있습니다. 그런데 선조들이 남겨준 그러한 책이 ‘조선왕조실록’ 6,400만자짜리 1권으로 치고 2억 5,000만자짜리 ‘승정원일기’ 한 권으로 칠 때 선조들이 남겨준 문질이 우리나라에 문건이 몇 권 있냐면 33만권 있습니다. 그런데 여러분 주위에 한문 전공한 사람 보셨습니까? 
정말 엔지니어가 중요하고 나로호가 올라가야 됩니다. 그러나 우리 국학을 연구하려면 평생 한문만 공부하는 일단의 학자들이 필요합니다. 이들이 이러한 자료를 번역해 내면 국사학자들은 국사를 연구할 것이고, 복제사를 연구한 사람들은 한국복제사를 연구할 것이고, 경제를 연구한 사람들은 한국경제사를 연구할 것이고, 수학교수들은 한국수학사를 연구할 것입니다. 그런데 이러한 시스템이 우리나라에는 전혀 되어 있지 않습니다. 한문을 공부하면 굶어죽기 딱 좋기 때문에 아무도 한문을 하지 않습니다. 

그러면 결국 우리의 문건을 해결하기 위해서 언젠가는 동경대학으로 가고 북경대학으로 가는 상황이 나타날 것입니다. 그러나 어떤 사람이 한문을 해야 되냐 하면 공대 나온 사람이 한문을 해야 합니다. 그래야 한국물리학사, 건축학사가 나옵니다. 수학과 나온 사람이 한문을 해야 됩니다. 그래야 허벅다리, 갈고리를 아! 딱 보니까 이거는 삼각함수구나 이렇게 압니다. 밤낮 논어·맹자만 한 사람들이 한문을 해서는 ‘한국의 과학과 문명’이라는 책이 나올 수가 없습니다. 
여러분, 사회에 나가시면 ‘이 시대에도 평생 한문만 하는 학자를 우리나라가 양성할 필요가 있다.’ 이러한 여론을 만들어주십시오. 이 마지막 말씀을 드리기 위해서 이런 데서 강연 요청이 오면 저는 신나게 와서 떠들어 댑니다. 

감사합니다.


출처 : 
http://todayhumor.co.kr/board/view.php?kind=&ask_time=&search_table_name=&table=bestofbest&no=59610&page=1&keyfield=&keyword=&mn=&nk=%BD%BA%C5%D7%B3%EB%B1%D7%B7%A1%C6%DB&ouscrap_keyword=&ouscrap_no=&s_no=59610&member_kind= 
반응형

'Etc' 카테고리의 다른 글

[링크] 우리나라 IT 업체가 소프트웨어 설계를 하면 안 되는 이유(?)  (0) 2012.02.08
배터리 충전 방법  (2) 2011.12.06
[펌] 파랑새 신드롬  (0) 2011.11.16
눈에 좋은 색  (1) 2011.10.19
하루 6분 복근만들기  (0) 2011.09.11
Posted by blueasa
, |

[펌] 파랑새 신드롬

Etc / 2011. 11. 16. 13:26

시험 기간이구나

이 글을 읽는 독자 중 다수는 아마 고등학교 시험 기간 중에 컴퓨터 전문 서적을 맹렬히 읽고 싶은 열망을 누르기 어려웠던 적이 있을 것이다. 나도 그랬다. 그러면서 우린 상상을 했다. "아, 컴퓨터에 대해 시험 공부하면 얼마나 좋을까." 그런 사람들이 대학에 들어가 컴퓨터 전공을 하면 시험 기간 중에 컴퓨터 책이 아닌 또 다른 주제를 공부하고 싶어진다(내가 그랬다). 내가 아는 뛰어난 프로그래머 몇 명은 시험 기간만 되면 재미난 프로그램을 하나씩 만든다(물론 시험과는 전혀 상관이 없는 프로그램들이다). 그래서 나는 그 친구가 프로그램을 하나 만들면 "아, 요즘 시험 기간인가 보구나"하고 추측한다.


꿈의 직장, 그리고 현실

우리는 항상 부러워하는 회사가 한 둘은 있다. 돈을 많이 주기도 하고, 좀 더 수평적이기도 하고, 야근이 없어서이기도 하고, 개인 프로젝트 시간을 주기 때문이기도 하다. 아, 식사가 맛있어서이기도 하다.

신문에서, TV에서, 블로그에서 그 회사가 소개되면 점심 시간에 남몰래 그 자료를 꼼꼼히 읽으며 마음 속으로 외친다. ‘아, 나도 저 회사에서 일하고 싶다.’ 그러고는 퇴근 이후 친구들과 어울려 술잔을 기울이며 회사에 대한 불평을 안주 삼는다. "우리 팀장은 말이야...", "우리 사장은 말이야...", "우리 회사는 말이야..." 몇 시간을 그렇게 불평하다가 집에 돌아가 자고 나서 일어나면 다시 그 불만스러운 회사로 출근한다.

필자는 여러 개발자를 보아왔다. 많은 개발자가 현재 환경이 열악하다고 생각한다(정말 그렇다). 그리고 동경하는 직장이 한 둘 있다. 그런데 그런 사람들 중 일부에게서 어떤 패턴을 지속적으로 발견했다.

  1. 그 사람들은 계속 현재 상황이 문제라고 생각하며 불평을 반복하고
  2. 그 상황을 개선하는 데에 자신이 할 수 있는 일은 없다고 생각하며
  3. 자신은 다른 직장에 가야 빛을 발할 수 있다고 믿으며
  4. 따라서 현 직장에서는 최선을 다하지 않으려고 한다.

그런데 이상한 점은 그 사람들이 스스로 그렇게도 불만스러워 하는 그 직장이 다른 어떤 사람들에게는 동경의 직장인 경우가 종종 있다는 점이고, 게다가 자신이 동경하는 직장으로 옮겨도 거기에서 또 다시 불평을 하면서 다른 직장을 동경한다는 점이다.


파랑새를 찾아

나는 이런 현상을 파랑새 신드롬이라고 부른다.

노벨문학상 수상 작가인 모리스 마테를링크는 『파랑새』를 지었다. 많은 사람이 이 『파랑새』를 동화나 TV 만화 형태로 접했다. 띨띨(Tyltyl, 치르치르)과 뮈띨(Mytyl, 미치르)이라는 아이들이 행복을 준다는 파랑새를 찾아 긴 여행을 하지만 결국 찾지 못하고 집으로 돌아와서는 자기 집 새장 속의 새가 파랑새라는 사실을 알게 된다는 이야기다(그 뒤에도 이야기가 있고, 나름 중요한 메세지를 전한다).

사람들은 저마다 파랑새 직장을 찾는다. 하지만 그냥 상상해 보자. 내 파랑새 직장이 내가 이미 퇴사한 직장 중 하나라면(실제로 내가 예전에 퇴사한 회사를 동경해 입사하는 사람들도 있을 것이다)? 혹은, 현 직장이 내 파랑새 직장이라면?

만성 파랑새 신드롬에 걸린 사람들은 항상 불행하다. 언제나 파랑새는 내가 없는 곳에 있기 때문이다. 그래서 늘 파랑새가 있는 쪽을 동경한다. 그러면서 현재에 최선을 다하지 않는다. 핑계거리가 많다. 그러다가 자리를 옮기면 파랑새는 여기에도 없다. 고개를 갸우뚱한다. 이상하네. 여기에는 파랑새가 있을 줄 알았는데. 도돌이표.


직장을 바꾸거나 직장을 바꾸거나

마틴 파울러(Martin Fowler)가 재미있는 조언을 했다.

직장을 바꾸거나 직장을 바꾸거나.

동어 반복 같다. 그러면 멍청한 표현이다. 하지만 이 말은 꽤나 현명한 조언이다. ‘바꾸다’라는 말에 여러 가지 의미가 있다는 점을 재치있게 이용했다.

첫 번째 "바꾸거나"는 자신의 현 직장을 변화시키라는 뜻이고, 두 번째 "바꾸거나"는 그래도 안 되면 직장을 옮기라는 뜻이다.

여기에서 중요한 부분은 순서다. 우선 직장을 변화시켜 보고, 안 되면 직장을 옮기라는 것이다. 그냥 직장부터 옮겨보라는 조언이 아니다. 하지만 파랑새 신드롬에 걸린 사람들은 앞 부분이 없다. 그래서 가까운 파랑새를 발견하거나 자기 집 안에서 만들어내지 못한다.

파랑새 직장에서 일하기 위해서는, 내가 어떤 직장을 고르느냐 이상으로 내가 그 직장에서 어떻게 일하는지도 중요하다. 하지만 그 사실을 깨닫지 못하고, 계속 여기 저기를 옮겨다니며 불평한다. 왜 세상에는 내가 바라는 좋은 직장이 없냐고. 그런 사람은 설사 자기가 직장을 만들더라도 만족하지 못할 것이다.


치명적 질문

애자일 컨설팅은 기업 대상으로 구인 과정을 컨설팅해 주기도 한다. 성공하는 프로젝트를 위해 필요한 것들을 하나둘 챙겨넣다 보니 결국은 "적합한 사람을 애초에 뽑았어야 했다"라는 후회에 도달해서 구인 프로세스도 포함했다. 내가 스스로 사람을 뽑거나, 다른 회사를 위해 사람을 뽑아주거나, 조언해 주는 입장에서 항상 중요하게 여기는 질문이 있다. 이직을 계획하는 사람에게 면접에서 다음과 같이 묻는다. "지난 직장에서 가장 불만스러웠던 점이 무엇인가요?" 여기는 쉬운 부분이다. 핵심은 두 번째 질문이다. "그럼 그걸 개선하기 위해 어떤 구체적 노력을 하셨나요?"

중요한 것은 그 노력이 성공했냐 못했냐가 아니다. 물론 성공까지 했으면 좋겠지만 그런 사람이 왜 굳이 이직을 하려 할까. 정말 중요한 것은 노력을 했냐 안 했냐 하는 것이다. 불만스러웠지만 정말 아무 노력도 안 한 사람이라면 파랑새 신드롬에 걸린 사람일 확률이 있다. 약간의 패배주의와 회의주의 그리고 보신주의를 조금씩 섞으면 파랑새 신드롬에 걸린다. 그런 사람들은 회사에 들어온 다음 전염병을 일으키는 경우가 있다. 쉬는 시간만 되면 밖에 담배 피러 나가 동료들에게 이 회사를 욕하고 다른 회사를 부러워하는 이야기를 한다. 뭔가 일이 안 풀리면 회사의 체제 욕을 하고, 상사 욕을 한다. 이런 이야기를 자꾸 듣다 보면 사람이 부정적으로 생각하는 습관이 든다. 전염된 것이다.

나에겐 아무 문제가 없다. 하지만 왜 내게 애인이 없는지 모르겠다고 주장하는 사람들을 잘 관찰해 보자. 몇 분 안에 백 가지도 넘는 이유를 찾아낼 수 있다. 파랑새 신드롬에 걸리면 자신은 자각하기 어렵지만 남들은 비교적 쉽게 알 수 있다.


다양한 병원체

꼭 직장에 대해서만 이런 일이 벌어지는 것이 아니다. 파랑새 신입사원, 파랑새 팀장, 파랑새 기획자, 파랑새 영업사원, ......

또 사람에 대해서만 파랑새 신드롬이 걸리는 게 아니다. 파랑새 언어, 파랑새 방법론, 파랑새 빌드 도구, 파랑새 프레임워크, ......

파랑새 언어를 좇는 사람을 예로 들어보자. 그 사람에겐 주특기 언어가 없다. 딱히 내세울 언어가 없다. 다 고만고만하다. 이 언어 집적거리다가 보면 이런 단점이 보이고, 저 언어 집적거리다가 보면 속도가 맘에 안 들고, 주변에서 이 언어가 전망이 좋다고 하니 또 잠깐 입문서 깔짝대다가 하는 식이었다. 결국 파랑새 언어들 뒤꽁무니만 계속 좇아 다니면서 항상 불안하다. 이 언어가 맞나? 그 동안 파랑새 신드롬에 안 걸린 개발자는 자신이 쓰는 언어의 결을 따라 사용하려 연구하고, 자신이 이미 아는 언어들을 상보적으로 사용하고 있다.

빌드 도구도 그렇다. 주변에서 좋다고 해서 좀 공부해 보려고 했더니 화면이 맘에 안 든다. 그래서 다른 도구를 구해다가 공부했다. 하면서도 ‘아닌데 아닌데’ 싶다. 결국 최근에 새로 급부상하는 도구를 좀 만져본다. 가장 기본적인 기능만 세팅을 했는데 ‘아뿔싸, 거시기 기능이 지원되지 않는다네.’ 오늘도 또 파랑새 빌드 도구 찾으러 웹 서핑을 한참 했다. 그러는 동안, 파랑새 신드롬에 걸리지 않은 개발자는 기존에 팀원들이 쓰던 셸 스크립트와 파이썬 스크립트 좀 엮어서 간단하게 빌드 자동화를 했다.


지금 여기

켄트 벡(Kent Beck)의 익스트림 프로그래밍 2판 서문에 감동적인 글귀가 있다.

  • 상황이 어떻건 간에 당신은 언제나 더 나아질 수 있습니다(No matter the circumstance you can always improve).
  • 당신은 언제나 자기 자신부터 개선을 시작할 수 있습니다(You can always start improving with yourself).
  • 당신은 언제나 오늘부터 개선을 시작할 수 있습니다(You can always start improving today).

나는 이 글을 가끔씩 들춰보면서 몸과 마음을 추스리곤 한다. 사실 내가 할 수 있는 것은 정말 많다. 그리고 그것은 바로 지금, 바로 여기에서 시작할 수 있다. 지금 여기에서 시작하지 못하면 나중에도 안 될 확률이 높다.

우선은 쉽고 간단한 것부터 시작을 해보자. 또 남이 나를 행복하게 해주지 못하면 스스로에게 보상을 주고 행복하게 만들면 어떨까.

작은 변화라고 너무 실망하지 말자. 때로는 작은 변화이지만 다른 사람에게는 큰 변화로 다가오는 경우도 있다. 매일 밤 10시가 넘어 집에 오느라 애 얼굴을 사진으로만 확인하는 처지라면 하루에 30분씩 일찍 집에 와서 아이가 자기 전에 30분이라도 놀아주면 어떨까. 아이 입장에서는 천지 차이가 될 것이다. 지금 당장은 물론이고 그 앞으로 오랫 동안.


하지만

하지만 마틴 파울러가 한 조언의 마지막 부분을 늘 잊지 말자. 직장을 옮긴다고 세상이 끝나지는 않는다. 정말 불행하다고 느낀다면 떠나라. 하지만 직장을 옮기되 파랑새를 찾으러 가지 말고, 만들러 가라. 나는 수년 전에 안전한 직장을 관둔 적이 있다. 지금 생각해 보면 참 잘했다고 생각이 든다. 당시 아내가 한 말이 큰 위안이 되었다. "설마 우리가 길바닥에 나앉겠어? 때려쳐." 거창고 직업 선택 십계명의 아홉 번째 항목(부모나 아내가 결사반대를 하는 곳이면 틀림없다, 의심치 말고 가라)이 해당하지 않는 예인 듯 싶다.

반응형

'Etc' 카테고리의 다른 글

배터리 충전 방법  (2) 2011.12.06
[펌] 자랑스러운, 위대한 대한민국 史  (0) 2011.11.16
눈에 좋은 색  (1) 2011.10.19
하루 6분 복근만들기  (0) 2011.09.11
엔지니어로 성공하고 싶다면 하지말아야 할 48가지  (0) 2011.08.31
Posted by blueasa
, |

C# C++ COM Interop

Programming/C# / 2011. 11. 15. 14:38

관리되는 코드(C# or C++/CLI) 와 비관리되는 코드(C or C++)이 프로젝트에서 함께 사용되는 경우가 발생한다.
이때 사용되는 기술이 Interop 기술이다.

MSDN : 비관리 코드와의 상호운용

다음 두가지 경우를 생각해보자.

1. C++에서 C# 함수 호출


내용 보기


//-- C# Com Server ---------------------------------------------------------------------//

[InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface ICOMClass
{
    void HelloWorld();
}

[ClassInterface(ClassInterfaceType.AutoDual)]
public class COMClass : ICOMClass
{
    ...

    public void HelloWorld()
    {
        MessageBox.Show("Hello");
    }
}

--> 이런 클래스가 있다면 클래스 라이브러리로 컴파일을 하고 C++에서 사용할수 있는 형식라이브러리 생성 및 등록       
      
     regasm COMClass.dll /regfile COMClass.reg
     regasm COMClass.dll /tlb:COMClass.tlb
     참고 : http://msdn.microsoft.com/ko-kr/library/tzat5yw6.aspx

//-- C++ Client -------------------------------------------------------------------------//

[[ Heaer ]]
/** #import attribute
 *        no_namespace : Specifies that the namespace name is not generated by the compiler.
 *        raw_interfaces_only : Suppresses the generation of error-handling wrapper functions and property (C++) declarations that use those wrapper functions
 *        named_guids : Tells the compiler to define and initialize GUID variables in old style, of the form LIBID_MyLibCLSID_MyCoClassIID_MyInterface, andDIID_MyDispInterface.
 **/
#import "COMClass.tlb" no_namespace raw_interfaces_only named_guids

[[ CPP ]]

HRESULT hr;
_COMClassPtr pClass;
hr = pClass->CoCreateInstance(CLSID_COMClass,NULL,CLSCTX_ALL,IID__COMClass,(void**)&pClass);
if(hr != S_OK) return;

ICOMClassPtr pIClass;
pClass->QueryInterface(IID_ICOMClass,(void**)&pIClass);
if(SUCCEEDED(hr))
    pClass->HelloWorld();

잘되었다면.. Hello 메시지 박스를 볼수 있을 것이다. 



2. C# 이벤트를 C++에서 받기

내용 보기


C#의 컨트롤에서 발생하는 이벤트를 C++에서 처리할 경우가 있다.
IDispEventSimpleImpl 를 이용하여 이벤트를 등록하는 방식을 알아보자.

[[ C# ]]
    [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
    public interface _EventInterface
    {
        [DispId(1)]
        void ClickedEvent(int ID, bool selected);       
    }
    [ComSourceInterfaces(typeof(_EventInterface))]
    [ClassInterface(ClassInterfaceType.AutoDual)]
    public class VCGraphControl
    {
        [ComVisible(false)]
        public delegate void ClickedEvent(int ID, bool selected);
        public event ClickedEvent ClickEvent;

        // 이벤트발생시
        public function()
        { 
            if(ClickEvent!= null) ClickEvent();
        }
    }

[[ C++ - Header ]]
extern _ATL_FUNC_INFO OnClickEventInfo;
class CEventSink : public IDispEventSimpleImpl<1, CVCMapEventSink, &DIID__EventInterface>
{
    BEGIN_SINK_MAP(CEventSink )
        SINK_ENTRY_INFO(1,DIID__EventInterface, 1, OnClickEvent, &OnClickEventInfo)
    END_SINK_MAP()

    ...

public:
    void Start()
    {
        DispEventAdvise((IUnkown*) pClass);
    }
    void Stop();
    {
        DispEventUnadvise((IUnknown*) pClass);
    }

    void __stdcall OnClickEvent(int ID, bool selected);

private:
    _COMClassPtr pClass;
    CWnd* m_pTargetWnd;
}

[[ C++ - Cpp ]] 
_ATL_FUNC_INFO OnClickEventInfo= {CC_STDCALL, VT_EMPTY, 2, {VT_INT,VT_BOOL}};

void CEventSink::OnSelectedTeacher(int ID, bool selected)
{
    ...
}

/// main
void main()
{
    ...

    CEventSink  sink = new CEventSink(this);
    sink->Start();
    
    ...

    /// release
    sink->Stop();
    delete sink;    
    ...
}

이런식으로 구현하면 될것이다. 
참고 : http://msdn.microsoft.com/ko-kr/library/b91kf2t0(VS.80).aspx



ps. 여기까지 C#의 컨트롤을 가져와 C++에서 운용하는 VS2003으로 되어있는 프로젝트를 VS2008로 업그레이드 하면서 Interop에 대하여 정리하였다. 

    닷넷1.1에서 동작하던 함수들이 닷넷2.0으로 넘어오면서 발생된 문제.. 
    http://www.codeforum.net/blog/pitoosung/entry/Net-Framework-11-에서-Net-Framework-20-으로의-Migration-CollectionBase-문제#comment1328

    Custom Object를 닷넷2.0에서 직접 가져와 사용하는 부분이 닷넷2.0에서는 불가능해진것 같다.(확실하진 않음)
    Object를 가져오는 인터페이스와 Collection Enumerator를 사용하면서 가져오는 부분은 에러를 리턴한다. 
    그래서 C++은 C#의 인터페이스 함수만 참조하게 단순화 시켰다. 

    그리고 예제 코드는 클래스 이름과 인터페이스이름을 바꾸면서 적은 코드로 동작안할 가능성이 있음.. 참조만 하시길..^^;
    관련 예제 - http://msdn.microsoft.com/ko-kr/library/65t81w8a.aspx



출처 : http://icarosss.egloos.com/1999092#none
반응형
Posted by blueasa
, |