Archive for the ‘IT’ Category

AOP가 대체 뭐냐?

Wednesday, December 5th, 2007

OOP

객체 지향이라는 것은 엄밀하게 말하자면 컴퓨터에 관한 이야기가 아니다. 일종의 세상을 바라보고 이해하는 인식의 방법론이라고 할 수 있다. 객체지향에서는 모든 삼라만상(사건, 사물, 관념)을 별개의 독립된 개체로 본다. 각각의 개체는 속성행위를 가지며, 이 개체들은 인터페이스란 것을 통해서 서로 의사소통한다.

이 과정에서 협력이란 것이 발생하고, 특정 목적의 범주에 포함되는 객체들을 묶어 패키지라고 부르며, 이것이 좀더 거시적인 수준에서 나타날 경우 시스템이라고 한다. 이것이 OOP가 세상을 인지하는 방식이다.

OOP적 설계란 지금까지 설명한 내용을 거꾸로 적용하는 과정이다. 전체 시스템의 목적을 상정하고, 시스템이 목적을 달성하기 위해 협력해야할 패키지들을 정의하고, 패키지의 목적을 달성하기 위한 구성원들을과 이 구성원들이 서로에게 가진 역할(인터페이스)를 정의하는 과정이다.

이로서 프로그래밍은 한결 간단해졌다. 마치 현실문제를 다루듯 설계하고 프로그래밍 하는 것은 철학적으로도 아름다울뿐만 아니라, 설계와 물리적 구현을 거의 일치시킴으로써 생산성의 극대화를 가져올 수 있었다. 하지만 좋던 시절은 끝나버리고 말았다. 씨발 (more…)

Phys2d 소개

Thursday, September 6th, 2007

순수자바로 구현된 거의 유일한 자바 물리엔진이라고 할 수 있다. 퍼포먼스는… 그저 그렇다. 하지만 삼각 함수 캐시를 이용하거나 하면 꽤 쓸만 할 것이라 예견된다.오브젝트의 속도가 빨라서 관통해 버리는 현상을 체크하는CDC는 안되지만, 공부하기엔 유용할듯. 현재 이 프로젝트는 GDC로 포팅되어 C++라이브러리로도 얻을수 있다.

http://www.cokeandcode.com/phys2d/

Google 이미지 검색과 개인 정보 유출

Thursday, August 30th, 2007

플릭커가 쓸만한 사진을 많이 가지고 있기는 하지만, 속도가 너무 느려서 이번엔 구글 이미지 검색을 써볼까 하고 아무 생각 없이 내 이름을 입력해 보았다. 그랬더니, 웬 비디오 카드 사진이 나오는 것이 아닌가. 클릭 해보니, 쇼핑몰 사이트의 상품란 구석에 관련 문의를 한 내 이름이 나타났다.

그게 뭐 어쨌느냐고… 하면 뭐. 그러려니 넘어갔겠지만…
심심해서 친구이름들을 쳐 놓아보았더니, 놈들이 -_- 관심을 가졌던 물품들이 마구마구 쏟아져 나오는 것이다…

이것. 분명 문제 있다. 최첨단 스토커의 시대에… (해봐서 잘 안다.)

How Computer does translate

Thursday, April 15th, 2004

요즘은 인터넷 번역 서비스가 유행이다. 일반인이 여기에 대해 어떤 견해를 가지고 있을 지는 모르겠지만, 많은 사람들이 아마 인공지능 같은 것을 떠올리지 않을까 하는 생각이 든다. 하지만 그것은 철저한 오해이다. 우선, 컴퓨터가 번역을 하는 과정을 따라가 보자!She dumped me.

란 문장을 주고 한글로 번역하라고 컴퓨터에게 시키면, 컴퓨터는 우선 문장들을 다음과 같이 단어별로 쪼개개 된다.

“She”, “dumped”, “me”

쪼개진 하나의 단어들을 토큰이라고 부르는 데, 컴퓨터는 사람이 미리 입력해 놓은 사전을 뒤져서 각 토큰이 명사인지, 동사인지, 목적어인지 등을 구분하게 된다. 이 시점에서 컴퓨터는 각 단어의 의미에는 전혀 관심이 없다.

그러면 컴퓨터는 주어진 단어가 다음과 같은 형태를 가졌다는 것을 알게 될 것이다.

S + V + O

그러면 컴퓨터는 미리 컴퓨터에 입력된  영어 문장구조 데이터 중에 S + V + O형이 있는지 확인한다. 각 형은 번역될 나라의 말로, 대치 형이 함께 입력되어있다. 한국어를 예로 들자면 S + V + OS + O + V로 대치된다.

자 이제 컴퓨터는 “she”, “me”, “dumped” 로 순서가 바뀐 바뀐 토큰 배열과, S + O + V형태의 문장구조에 대한 정보를 가지게 되었다. 이제 컴퓨터는 사전을 다시 뒤져, 각 토큰을 우선 직역 한다.

그녀 나 찼다.

한국어의 경우 목적어 뒤에는 마지막 글자에 받침이 없는 경우 ‘를’을 붙이고, 받침이 있는 경우 ‘을’을 붙인다는 규칙이 있다. 그리고 이 규칙은 사람이 미리 컴퓨터에 입력해 둔다. 그리고 주어의 뒤에는 ‘은’, ‘는’, ‘이’, ‘가’ 중에 하나가 붙는다.

그래서 컴퓨터는, 미리 입력된 정보에 따라 최종적으로 “그녀가 나를 찼다.” 라는 문장을 내어 놓게된다. 엄청 단순하다!

핵심이 되는 부분은, 컴퓨터는 다음과 같은 미리 입력된 표를 가지고 있을 뿐이라는 것이다.

영어 S + V + O : 한글 S + O + V
영어 V + S + O ? : 한글 S + V + O ?
….
….

들어보니까 굉장히 쉽다는 것을 알게 됐을 것이다. 사실 영어의 문장형태는 예외사항을 제외하면 몇개 되지도 않으니, 컴퓨터 언어를 다룰줄 안다면 직접 구현하는 것도 그리 어렵지는 않다. 다만, 모든 단어에 대한 정보를 미리 주어야 하므로, 번역이란, 멋지게 들리는 인공지능이라기 보다는, 단순 노가다 프로그램에 가깝다.

ps.

여기서는 매우 단순하게 묘사했지만, 사실은 단어만으로는 주어인지 목적어인지 구분이 쉽지 않다. 따라서, 컴퓨터는 여러 가능성을 전부 검토해 보거나, 자주쓰이는 문장형을 선택하거나, 혹은, 어문학 전문가가 입력한, 각 형이 완성될 수 있는 조건을 기술한 자세한 식들을 이용한다. 어쨌거나, 컴퓨터는 시키는데로 할 뿐이라는 것이고, 별로 대단한 일은 결코 벌어지지 않는다. 그러니 매트릭스가 현실화 될까 걱정할 필요는 전혀 없다.