서문
몇 달 전 도서관에서 노트법에 관심이 많은 나의 시선을 훔친 책이 있다. “탁월함에 이르는 노트의 비밀”이라는 책이다. 비록 이 책은 "노트만 잘하면 천재가 된다"고 당차게 운을 땐 후 “노트가 전부는 아니더라” 라는 식의 용두사미 전개로 안타까움을 자아냈지만, 나의 몇 가지 노트 습관을 개선해 주었다. 이 글은 그 이후 노트에 대한 고민의 결과물이다.

노트의 역할
먼저 노트의 역할을 분명히 해야겠다. 노트는 사고력의 부족한 부분을 보완해 주는 것이다. 따라서 먼저 효과적으로 사고하는 방법을 고민하고, 거기서 노트가 보조할 수 있는 사고의 영역을 찾아야 한다. 노트가 보조할 수 있는 사고의 영역엔 기억력과 집중력이 있다. 사람이 망각하는 동물이라는 사실은 누구나 알 것이다. 망각하는 이유에는 소멸론과 간섭론 두 가지 설이 있는데 이는 차치하고 생각보다 망각의 주기가 짧다는 사실을 기억해야 한다. 독일의 심리학자인 에빙하우스가 제시한 망각 곡선은 무작위적인 정보를 접한 일반인의 망각 주기를 나타내는데, 그 주기라는게 고작 10분이다. 10분이면 잊어먹는 것이다. 또한 기억은 상당한 정신력을 소모하게 하는데, 예를들어 누군가 무작위로 5개의 과일이름을 불러주고 노트 없이 순서대로 기억하라고 하면, 그것을 기억하는데 정신력을 쏟느라 다른 일을 허투로 하게 된다. 하지만 노트를 하면 기억할 필요가 없으니 바로 다른 일에 정신력을 쏟을 수 있으며(집중력 향상), 필요할 땐 언제든 다시 찾아볼 수 있다(기억 보조).

사고의 두 단계
노트법에 앞서 사고 과정을 살펴 보자. 사고 과정은 크게 두 단계로 나뉜다. 반복적으로 질문하며 원하는 답을 찾는 단계, 그리고 거기서 얻은 것들을 재사용 가능하게 정보화하는 단계이다. 각 단계는 추구하는 목적이 다르고 당연히 노트법도 다르다. 이제 각 단계의 특징을 정리하고 적합한 노트법을 설명하겠다.

첫 단계: 브레인스토밍
반복적으로 질문하고 답을 찾는 단계를 편의상 브레인스토밍 단계라고 하자. 브레인스토밍 단계는 의미있는 질문을 던지고 거기에 대한 답을 찾아나가는 것이다. 그러다 보면 새로운 의미있는 질문을 발견하고 거기서 또 생각을 확장한다. 여기서 노트의 역할은 기존의 질문과 답들을 보존해 새로운 질문들에 집중할 수 있게 하는 것, 그리고 필요할 땐 언제든 기존의 질문으로 돌아올 수 있도록 하는 것이다. 이 때 상기해야 할 점은 노트는 어디까지나 생각의 보조도구라는 것이다. 노트가 생각의 속도를 늦추는 정도가 기억과 집중의 이점을 넘어서기 시작하면 오히려 사고력을 떨어뜨리기 때문에, 노트가 사고를 돕기는 커녕 방해하진 않는지 주의깊게 살펴보아야 한다. 그래서 이 때의 노트는 생각을 자유롭게 펼칠 수 있는 방사형식으로, 그리고 짧지만 많은 생각을 함축하는 “키워드” 중심으로 하는 것이 좋다. 개중 시각적 묘사가 필요하면 그림을, 이전 답들과 연관되는 부분은 선으로 연결을, 강조할 부분은 별표시나 문장으로 표현을 할 수도 있다. 어쨌든 노트법의 핵심은 확장 가능하게, 자유롭게, 명확하게, 빠르게. 이를 만족하는 브레인스토밍의 대표적인 방법으론 토니 부잔이 대중화 시킨 마인드맵이 있다.

둘째 단계: 정리
고품질의 정보를 추출하는 단계는 짧게 정리 단계라 부르자. 이 단계는 브레인스토밍 과정에서 얻은 지혜와 고급지식을 추려 후에 참고가능한 형태로 만드는 것으로, 나중을 위한 것이다. 여기서 정리된 것들은 지혜와 고품질의 정보가 되어 비슷한 문제를 해결할 때의 소스로 쓰인다. 정리 노트를 만들 때 불필요한 정보는 과감히 제거, 반복되는 정보는 통합, 늘어진 질문들은 연관관계를 따져 수평/수직구조화 한 후, 가급적 선형으로, 그리고 문장으로 표현하여 정리하면 좋다.  선형과 문장은 방사형과 키워드의 조합과는 달리 의식적으로 질문을 닫고 추가 확장을 막는 효과가 있기 때문이다. 그리고 정리 노트는 가급적 전자 문서화 하는게 좋은데, 이는 접근성이 뛰어나고 수정도 용이하기 때문이다. 특히 요즘엔 고품질의 클라우드 서비스들(인터넷상에 존재하는 개인 저장소)이 많이 나왔는데, 덕분에 인터넷이 가능한 곳이라면 어디서든 개인화된 고급 정보에 접근할 수 있게 되었다. 심지어 무료인데 이를 활용하지 않을 이유가 있을까? 나도 노트에 특화된 에버노트라는 클라우드 서비스를 오랫동안 사용하고 있는데 무척 좋다.

정리
이래저래 말 많았지만 결론은 단순하다. 열심히 생각해서, 깔끔하게 정리하는것. 열심히 생각할 때 노트를 잘 활용하면 "생각의 전개를 효과적으로 보조"해 줄 수 있다. 그리고 사고 과정으로부터 “고품질의 정보"를 남기면 나중에 다른 문제를 해결할 때 참고할 수도 있다. 노트의 전문가의 말처럼 천재는 노트법 때문에 천재가 아니고 그냥 날 때부터 천재일지도 모른다. 하지만 스포츠도 아닌데 굳이 천재적인 우사인볼트 같은 사람과 맨발로 경주할 필요는 없다고 생각한다. 당당히 노트로 무장하고 나아가자.

  그림을 잘 그리고 싶어서 여러 방법들을 찾아보았다. 대부분 소묘를 권했다. 하지만 소묘는 석고상이 필요했고, 걔네들은 왠지 무섭고 낯설었다. 그러던 중 잡지떼기라는 방법이 눈에 들어왔다. 잡지 한 권 펴놓고 매일 30분 이상씩 편하게 따라 그리라는 잡지떼기. 가뭄에 단비를 만난것 같았다. 꾸준히 잡지 한 권을 다 끝냈다. 실력 향상이 있긴 있었던 것 같다. 하지만 미묘했고, 난 뭔가 문제가 있다고 생각했다.

  내가 너무 발제자를 맹신한 것이 아닌가 하는 생각이 들었다. 발제자가 잘못됐다는 것이 아니라, 발제자의 생각을 이해하지 못하고 무작정 따라했다는 것이다. 난 왜 잡지떼기를 하는가부터 생각했다. 이유는 간단했다. 그림을 잘 그리기 위해서. 하지만 그림을 잘 그린다는게 무슨 뜻인지 묻자 난 생각에 잠겼다.

  효과적인 표현이었는가. 그림의 목적은 표현이 아닐까? 내가 본 꽃의 아름다움, 길거리에서 마주친 이상형, 어제 밤에 꾼 무서운 꿈. 우린 갖가지 감정과 생각을 기록하고 표현하길 원한다. 그림은 시, 노래, 춤, 글 등과 같은 많은 표현 방식들 중 하나인 것 같다. 그렇다면 그림을 잘 그린다는 것은 잘 표현한다는 것이 된다. 좋은 표현은 두 가지를 만족해야 한다. 먼저 표현하는 대상의 주의를 잡을 수 있어야 하고, 그 다음 대상이 내가 표현하고자 하는 것에 공감할 수 있어야 한다.

  표현은 기초와 기술 위에서 노는 것이다. 그림엔 어떤 기초와 기술이 있을까? 기초에는 형태, 색, 명암, 재질감이, 기술엔 강조, 생략, 구도, 배치, 구성 등이 있다. 기초가 부족하면 어색한 그림이 되고, 기술이 부족하면 표현력이 떨어진다. 따라서 그림을 연습할 땐 표현을 목표로 기초와 기술을 두루 향상 시키도록 노력해야 한다.

  잡지는 어느 카페에나 있고 가방에도 넣고 다니면서 언제든 볼 수 있어서 참 좋다. 이런 잡지를 활용한 잡지떼기가 효과가 있다면 좋을 것이다. 그러면 잡지떼기는 과연 그림 실력 향상에 효과적일까? 잡지떼기를 통해 기초와 기술을 두루 훈련할 수 있을까? 그렇다. 잡지떼기로 위의 두 가지 능력을 모두 키워줄 수 있는 방법이 있다.

  틀은 최초로 잡지떼기의 이론을 정립한(?) 방사의 석가님의 것을 빌려왔다.

* 틀(구성)
1. 관찰하기
2. 그려보기
3. 표현하기

* 방법
  1. 잡지를 하나 선택한다.
  2. 잡지의 첫 페이지를 펼친다.
  3. 첫 이미지에 대해 *관찰하기를 수행한다.
  4. *그려보기를 수행한다.
  5. 그림에 간단히 관찰하기/그려보기를 하며 느낀 점을 기술한다.
  6. 다음 그림으로 넘어간다.
  7. 매일 꾸준히 최소 30분-1시간 반복 수행한다.
  8. 일과중 심심할 때 *표현하기를 수행한다.

* 관찰하기(그림 당 1-2분)
  1. 그릴 그림을 선택한다.
  2. 그림을 보며 어떤 느낌을 받는지 묘사해본다.
  3. 어째서, 무엇으로부터 그런 느낌을 받는지 분석한다. 어떠한 기술들이 사용된 것 같고 그들이 어떤 감정을 일으키는지도 생각해본다.
  4. 형태 잡는게 어려운 사람은 형태에 대한 분석도 해본다.

* 그려보기(그림 당 5-30분)
  1. 형태를 잡는다.
  2. 색감을 채운다.( 지루하면 패스 )
  3. 명암을 준다.( 지루하면 패스 )
  4. 할 일이 없으면 질감도 줘 본다.( 기본 패스 )

* 표현하기(시간은 자유)
  1. 심심할 때 한다.
  2. 무엇을 표현할지 명확히 정한다.(청순한 여인의 옆모습??)
  3. 표현에 초점을 맞추고 그려본다.
  4. 망쳐도 즐거워한다.

  관찰하기가 잡지떼기의 꽃이다. 무작정 그리는 것보다 그림과 그것을 바라보는 나를 분석하는 시간을 짧게 1분이라도 가진다. 이게 감수성, 분석력, 표현력 향상에 큰 도움이 된다. 그리고 그림을 기술적으로 분석하는 훈련을 하면 그림 보는 능력 뿐만 아니라 표현력도 향상된다. 형태에 약한 경우 그리기 전 전체적인 형태를 분석해 보면 그리는 과정이 한결 수월해질 것이다.

  그려보기는 기초를 훈련하는 시간이다. 따라서 방식도 소묘의 축소판과 같다. 형태를 그릴 때에는 전체로부터 디테일로 옮겨 가는 것이 좋다. 얼굴 다 완성하고 몸으로 가는 것이 아니라 얼굴과 몸통, 팔, 다리의 위치를 대략 잡아 주고, 계속 전체를 주시하며 각 부분을 조금씩 조금씩 옮겨 다니며 완성해 나가도록 한다.

메인은 아니지만 표현하기도 중요하다. 표현도 해본 놈이 한다고, 표현하려는 노력을 해야 표현력이 향상 된다. 또한 관찰하기, 그려보기를 하며 느끼고 분석하고 발견한 기술들을 써먹어 볼 수 있는 시간이다. 심심할 때, 5분만, 어느 종이든 상관 없으니 그려 본다. 메인은 아니니까 압박 없이 즐거운 느낌으로 낙서하듯 한다.

잡지떼기 오리지날( by 석가님 )
  1. 잡지떼기 1
  2. 잡지떼기 2
  3. 잡지떼기 3

'Essay > Drawing' 카테고리의 다른 글

잡지떼기에 대하여  (0) 2014.03.23

   아인슈타인이 한창 자신의 업적을 인정받으며 막 유명인사가 됐을 무렵, 한 지방 단체의 점심회식에 초대 된 적이 있었습니다. 그곳에서 그는 단체 사람들과 식사도 하고 이야기도 나누며 즐거운 시간을 보내고 있었습니다. 그러던 중 모임의 대표의 정중한 요청이 들어왔습니다. 사람들 앞에서 요즘 진행되고 있는 연구에 대한 발표를 부탁하는 요청이었습니다.

   하지만 그 모임의 사람들은 주로 40~50대의 여성들로 구성되어 있었습니다. 대부분이 과학에 관심이 없는 분들이었죠. 그 분들은 아인슈타인이라는 당대의 유명인사를 만나는 것과 그 사람의 시대적 연구에 대해 들을 수 있다는 것 자체가 기쁨이었고 기대하는 바였지, 진짜로 어렵고 복잡한 연구중인 이론이 듣고 싶은 사람들은 아니었죠. 아인슈타인은 그들의 입장에서 깊게 생각한 후 이렇게 답했습니다. “제가 바이올린을 연주하는건 어떨까요?”

   대화 끝에 모임의 대표도 연구 발표보다는 바이올린 연주가 더 나을 것 같다고 판단하였고, 아인슈타인은 자신이 가장 잘 치는 바이올린 곡중 하나의 곡을 그들 앞에서 연주하기로 합니다. 아인슈타인은 청중이 기다리는 무대에 올라섰고, 연주곡을 진중히 연주하기 시작합니다. 아인슈타인의 딱딱한 강의를 예상했던 여인들은 쥐죽은 듯이 잔잔한 그의 연주에 귀를 기울입니다. 어느덧 연주는 끝이 났고, 우래와 같은 박수소리가 쏟아집니다. 아인슈타인은 가볍지만 젠틀하게 감사를 표하고 무대에서 내려옵니다.

   어째서 아인슈타인은 바이올린을 연주했을까요? 그가 아무리 바이올린 연주를 잘했다고 해도 바이올린 연주자보다 잘했을까요? 하지만 분명한 것은 그의 연주가 그의 발표보다 청중들에게 더 큰 감동과 위로가 되었을 것이라는 겁니다. 아인슈타인은 그들이 진정 원하는 것이 무엇인지를 간파하고 있었습니다. 그들은 그의 연구가 얼마나 어렵고 복잡하고 신기한 것인지를 듣고 싶었던게 아닙니다. 그들은 그저 아인슈타인을 보고 싶었고 그와 있었다는 기억을 남기고 싶었습니다. 그리고 아인슈타인은 그것을 간파하고 그들이 좋아할 만한 것을 들려준 것입니다.

   아인슈타인이 들려준 바이올린 연주는 아주 오랫동안 여인들의 마음에 머물 수 있었습니다. 그가 연구에 대해서 구구 절절 발표했다면 여인들은 그날 밤 들은 것을 모두 잊어먹었을 테지만요.

말을 못하는 이유 ? 충분히 생각하고 말하지 않기 때문!
사람들이 하는 것 중 말 만큼 자주 하면서도 실력의 편차가 큰 것은 드물다. 갑작스러운 질문에도 청산유수처럼 대답을 쏟아내는 사람이 있는가 하면, 일상적인 질문에도 당황하는 사람이 있다. 물론 성격의 차도 있겠지만 말에 있어 진정으로 중요한 것이 무엇인지를 명확히 인지하지 않고 있기 때문인지도 모른다.

말은 속도보다는 효율성이다
언어를 구사하는 데 있어 중요한 것이 두 가지가 있다. 첫째는 속도이고, 두 번째는 효용성이다. 하지만 여기에도 우선순위가 있다. 첫째가 효용성이고 둘째가 속도이다. 말을 잘 하지 못하는 대부분의 사람들은 속도를 더 중요하게 여긴다. 효용성보다는 질문을 받는 즉시 대답하려고 한다. 하지만 효용성이 없으면 속도는 무의미하다.

상대의 진의를 파악하라
말을 하기 전 속도보단 효용성을 생각하라. 얼마나 효율적으로 말 할 것인가. 말에 있어 효율적이란 것은 가장 적합한 말을 적합한 타이밍에 하는 것을 의미한다. 그러기 위해서는 문맥을 알아야 한다. 그 중에서 가장 중요한 것이 상대방의 의도이다. 상대방의 의도는 상대의 말 위에 써 있지 않다. 그 속을 꿰뚫어 보아야 한다. 그래서 속도를 좀 늦추고 상대를 관찰하며 그 말 속에 숨겨진 진의를 파악해야 한다. 만약 그렇지 않고 당황하며 반사적으로 말을 뱉고 나면 후회할 순간이 올 것이다. 너무 많은 정보를 주거나, 너무 적은 정보를 주거나, 전혀 다른 얘기를 해 상대를 당황하게 하거나, 너무 진지해지거나 가벼워져서 상대가 무안해 지거나. 모두 대화의 질을 떨어뜨릴 뿐이다.

강력한 말- 진지하자!
말의 힘은 강력하다. 약한 말은 잠깐 허공을 맴돌다 사라지지만, 강한 말은 나폴레옹처럼 전쟁을 좌우하고 히틀러처럼 대학살을 부른다. 말을 할 때에는 좀 진지해져야 한다. 상대의 의도를 파악하고 나의 입장을 정리하여 가장 적합한 방식으로 대답하는 것. 어렵지만 강력하기에 필요한 수련이다.

책임감의 어원
단어의 어원을 배우는 것은 언제나 새롭고 신선한 충격을 준다. 원칙 중심의 리더십이란 책을 읽다가 본 Responsibility(책임감)란 단어도 그 중 하나이다. 우리 나라 말로 책임감이라고 번역된 이 단어의 어원은 Response(응답)과 -ability(능력)의 합성어이다. 응답 능력. 책임감에 대한 참으로 명쾌한 단어 해설이 아닐 수 없다.

응답 능력이란
당신은 자기 자신에 대해서 Responsibility(책임감)를 가지고 있는가? 즉 자신에 대한 책임을 스스로 지고 있느냐는 말이다. 이 질문에 대답하려면 자신에 대해 책임을 진다는 것이 무슨 의미인지를 이해해야 한다. 다행히도 Response-ability가 대답해주었다. 당신은 당신의 삶에 닥친 상황을 해결하는 주체로써 그 상황에 응답할 수 있는 능력이 있는가. 그리고 그것은 그 단어가 시사하듯, ability(능력)의 차이이다. 그리고 여느 능력이 그렇듯 Response-ability도 향상시킬 수 있다.

응답 능력이 왜 중요할까
하지만 왜 응답 능력이 중요할까. 그 이유는 응답하기가 좀 어려운 상황이 닥치는 순간에 있다. 응답 능력이 낮은 사람은 그런 상황을 만들어 준 주변 환경을 탓한다. 관리자가 스케줄링을 제대로 하지 못했기 때문에… 여자친구가 자꾸 만나자고 해서 시험을 망쳤다… 알람시계가 고장나서 못 일어났다… 엄마가 밥먹고 가라고 해서 지각했다… 문제는 바로 여기에 있다. 응답 능력이 약한 사람은 “이미 만들어진 지금의 상황”을 해결하려하기 보다는 그 상황을 만든 과정, 즉 과거를 탓하게 되는데, 이것이 매우 소모적인 행위라는 것이다.

응답 능력이 강하면
물론 그렇게 된 상황에 외부 환경이 개입이 된 것은 사실이지만, 응답 능력이 강한 사람의 경우 다음과 같이 생각할 수도 있을 것이다. 프로젝트에 더 애정을 가지고 관리자를 좀만 더 도와주자. 나도 책임이 있다!… 다음 시험 때에는 여자친구에게 시험의 중요성을 설명하고 같이 공부하던가 만남을 줄이던가 해야겠다!… 다음엔 건전지를 제때제때 교체해야겠다. 일을 바로바로 처리하는 습관을 기르자!… 다음엔 반드시 일찍 일어나자! 그래서 어머니와 맛있는 식사도 하고 지각도 하지 말아야겠다!… 과연 다음에 똑같은 상황을 마주칠 확률은 어느 쪽이 더 낮을까.

응답 능력을 키우자
외부 요인을 탓해 버리면, 난 잘못한 것이 없는 것이 되기 때문에 더 이상 발전 시킬 것도 고칠 것도 없어 마음이 편안해진다. 하지만 편안함을 댓가로 우리는 외부 요인에게 날 컨트롤 할 수 있는 파워를 내어주고 있음을 알아야 한다. 자신의 삶을 진정으로 책임진다는 것은 바로 여기서 부터 시작하는 것이 아닐까. 주어진 상황에 대한 나의 응답(반응)은 전적으로 나의 책임이며 능력이라는 것 말이다. 오늘부터 외부 요인에게 빼앗겼던 나의 힘들을 하나 하나 되찾아 오는 훈련을 해보는 것은 어떨까? 외부 요인을 탓해버리고 싶은 자기 방어 기제를 억누르고 자신의 영향력의 원을 넓혀나가자.

관련 글
감정과 이성, 자극과 반응

   공공의 승리와 개인의 승리. 둘은 어떤 상관관계가 있을까? 스티븐 코비의 “원칙 중심의 리더십”이라는 책에 이런 말이 있다. 공공의 승리는 개인의 승리를 전제한다. 이 문장을 처음 접했을 때 난 무조건 공감했다. 수신제가 치국 평천하라고 했던가. 하지만 방황의 시기에 있는 지금, 난 이렇게 되물을 수 밖에 없었다. 승리? 좋다. 하지만 무엇을 위한 승리를 말하는 것인가? 성공하는 것? 능력자가 되는 것? 하지만 내가 그걸 원하는지 모르겠는데? 왜 내가 승리를 해야하지?

   승리라. 승리. 참 긍정적이고 성취감을 주는 단어이다. 어느 누가 승리하고 싶지 않겠는가. 또 어느 누가 패배하고 싶겠는가. 하지만 수 많은 젊은이들이 무한 경쟁을 외치며 서로를 이기고 승리하고 패배자가 되지 않으려 하는 이 시대 속에서 과연 그 승리는 무엇을 위한 승리이며 얼마나 값진 것인지에 대한 의구심이 든다.

   지금의 난 심각하게 방황하고 있다. 적당히 하자, 이 정도 하면 되겠지 싶은 매너리즘과 자기 기만식 긍정에 빠져 어느 길이 나의 길인지 조차 잊어버려 가고 있다. 내 인생의 길 조차 흐릿흐릿한 이 상황 속에서 무엇을 승리하자는 것인지 의문이 드는 것은 당연한 것이다. 추구하는게 있어야 승리라는 것도 존재하는 것이기 때문이다. 끝내 이 승리의 의미를 난 알 수 없었다. 내 인생의 길과 사명감이 생겨야 승리라는 것이 가능하지 않을까?

   하지만 개인의 승리에 대해서 어느 정도 목표가 섰다. 개인의 승리란 자신을 잘 통제하는 것이다. 내가 나를 이기는 것이다. 이 것은 인생에 있어 가장 첫 번째 승리가 된다. 인생의 길이 눈에 보일 듯이 선명해도 자신을 잘 통제하지 못하면 그 길을 똑바로 갈 수 없다. 이 유혹, 저 유혹, 혹은 각종 시련과 감정적 도발, 순간적 이익에 눈이 멀어 갈 길, 지금 해야 할 일을 알면서도 샛길로 빠지고 일을 그르치게 된다.

   따라서 개인의 승리-즉 자기 통제력-은 공공의 승리를 원하던 지금 당장에는 원하지 않던 이루어서 나쁠 것이 없으며, 행여나 나중에 공공의 승리를 이루고 싶을 때에도 강력한 밑바탕이 될 것이다.

   결론적으로, 공공의 승리를 목표하기 전, 개인의 승리를 추구하는 것은 인생에 있어 중요한 밑거름이 될 것이다. 후에 이 밑거름은 내가 그 위에서 은행나무를 키우던 쌀농사를 짓던 커다란 도움이 될 것이다. 따라서, 지금 당장의 목표조차 불확실하다면, 모든 것의 기본이 될, 셀프 컨트롤력을 키우자.

   그리고 매일 나의 삶과 세상의 진실을 발견하기 위해 묵묵히 노력하자. 사명은 때가 되면 하늘이 준다고 하지 않았던가.^^

언어의 지역화란?
프로그래머가 반드시 알아야 하는 것이 언어의 지역화입니다. 한국어를 사용하는 게임을 미국에 출시하려면 NPC의 대사나 퀘스트, 케릭터 이름, 심지어 게임 무비의 대사까지도 영어가 되어야 합니다. 반대로 미국에서 출시한 게임을 한국에 출시하기 위해선 모든 영어를 한국어로 바꾸어야 하죠.

컴퓨터에서 영어(알파벳)를 표현하는 방법
컴퓨터는 숫자 밖에 알지 못합니다. 0~9까지 알기도 함들어서 0과 1밖에 알지 못합니다. 하지만 어떻게 우리 모니터 화면에는 0~9가, ‘ABC..’ ‘abc..’ 등등의 알파벳들이 떡하니 있는 걸까요? 다음과 같이 0,1로 된 숫자 세트를 문자와 연결시키면 되겠죠.
0000 = 0
0001 = 1
0010 = 2
0011 = 3

그 뿐만 아니라 다음과 같이 연결할 수도 있습니다.
0000 = a
0001 = b
0010 = c
0011 = d


그래서 0000을 보여주라고 하면 1번 방식의 컴퓨터에서는 0를 보여주고 2번 방식에서는 a를 보여줍니다. 여기서 문제가 발생하겠네요. 1번 방식의 컴퓨터에서 텍스트 파일에 “123”을 저장해 2번 방식의 컴퓨터에게 준다면, 텍스트 파일을 여는 순간 “123”이 아닌 “bcd”가 보이겠죠? 이건 아주 중요한 문제입니다. 전 “안녕?” 이라고 보냈는데 상대방은 “꺼져!”로 받을 수 있으니까요. 그래서 Standard라는 것이 생겨나 “모두 이런 방식으로 숫자와 문자를 연결해 주세요!” 라고 독려를 하는 것입니다. 이것에 관한 최초의 Standard가 ASCII였습니다.

최초의 인코딩 표준 : ASCII Code
아스키 코드는 큰 장점이 있습니다. 바로 그것이 128개의 문자만을 표현하고 있다는 것인데 그것은 1byte의 메모리의 절반만을 (0000 0000 ~ 0111 1111) 사용해서 다 표현할 수 있는 숫자입니다. 하지만 그것은 동시에 아스키의 단점이기도 하였습니다. 아스키가 표현할 수 있는 문자는 알파벳 소문자, 알파벳 대문자, 그리고 !?#@%^& 등의 특수문자를 포함합니다. 그럼 한글은 어떻게 보여주죠? 네, 아스키로는 방법이 없군요. 메모리의 나머지 절반을 사용해서 표현하려고 해도 한글을 조합 하면 10,000자가 넘어갑니다. 128개로는 택도 없죠. 근데 한글만 있습니까. 한자, 일본어, 불어, 헝가리어 등등 세상엔 수십가지 종류의 문자가 존재합니다. 그래서 먼저 나온 것이 UNICODE-16입니다.

UNICODE-16
UNICODE-16의 컨셉은 아주 간단합니다. 한 문자를 1byte가 아닌 2byte로 표현하는 것이죠. 그래서 와이드 Char라고도 불립니다. 그러면 0000 0000 0000 0000 ~ 1111 1111 1111 1111 까지의 숫자를 문자와 연결 시켜 훨씬 더 많은 문자를 표현할 수 있습니다. 하지만 그만큼 한 문자를 표현하는 데에 필요한 메모리를 더 잡아먹게 되고, 거기다 기존의 ASCII 코드를 사용하던 문자를 읽을 수가 없게 되는 단점이 생깁니다. ASCII 의 두 글자를 하나로 인식해 전혀 다른 글자를 보여줄 테니까요. 또한 기존엔 1byte면 충분한 알파벳과 자주 사용하는 특수문자들도 모두 2byte를 사용해야 한다는 사실은 그다지 매력적이지 않았습니다. 컴퓨터의 메모리는 소중하니까요. 이 방식은 또 메모리의 한계를 드러냅니다. 2byte를 사용해도 표현할 수 있는 문자는 65,536 개 뿐인데, 5만 글자가 넘어가는 한자는 또 어떻게 표현해야 할까요.

UNICODE-8
그래서 나온 것이 이 인코딩 방식입니다. 아스키 코드를 1byte로 표현할 때 가장 왼쪽의 숫자가 쓰이지 않는 점을 이용한 것인데, 만약 이게 1이 되면 한 문자를 읽는데 2byte를 사용합니다.
1000 0000 0000 0000 = 가
1000 0000 0000 0001 = 나
1000 0000 0000 0010 = 다

1000 1000 0000 0000 = 쀍

그리고 가장 왼쪽의 숫자 2개가 1이면 한 문자를 표현하는데 3byte를 사용합니다.
1100 0000 0000 0000 0000 0000 = ¢
1100 0000 0000 0000 0000 0001 = ¤

이렇게라면 정말 표현할 수 있는 문자의 범위가 끝이 없지 않을까요? 또한 기존의 아스키코드도 인코딩 변환 없이 바로 읽을 수 있겠고요. 게다가 아스키 코드를 표현하는 데에는 아스키 코드를 쓰던 시절 처럼 1byte면 충분하겠네요. 참 놀라운 인코딩 방식인 것 같습니다.

참조
조엘 온 소프트웨어
Game Engine Architecture( 책 )

일을 재빨리 마치고 집에서 인터넷을 깨작 거리고 있었습니다. 어느덧 시계를 보니 9시. 저녁도 안먹었는데… 미니 전기 밥통의 버튼을 툭 튕겨 밥이 있나 보았지만 세 술갈도 없었습니다. 이럴 때면 항상 찾게 되는 편리한 친구가 있지요. 바로 라면입니다. 군침을 입에 물고 제빨리 가스렌지에 물을 올렸습니다.

당신도 그런가요? 저의 라면에는 계란이 빠지지 않습니다. 스프를 탈탈 털고 면을 넣은 후 계란을 판에서 조심스럽게 꺼냅니다. 탁 쳐서 금을 낸 후 라면 위로 투척합니다. 보글보글 라면 속으로 풍덩 들어갑니다.

계란은 모양이 어쩜 그렇게 이쁜 타원인지 모르겠습니다. 얼마나 이쁘냐면 얼굴형 중에서도 최고가 계란형입니다. 건강에도 좋습니다. 몇년 전만 해도 계란을 우유와 함께 완전식품이라고도 했습니다. 노른자에는 좋은 콜레스테롤이, 흰자에는 단백질이 풍부합니다.

이런 계란을 암탉이 낳는 과정을 상상해보면 참 신기한 것 투성입니다. 기회가 되면 꼭 보고싶습니다. 그 단단한 껍질이 엄마의 배 어느 공간에서 생겨나는지, 또 인간이 볼 때 상대적으로 약한 그 껍질이 부서지지 않고 세상으로 나오는지. 또 다른 생명체로써 궁금한 것도 많습니다. 그 중에서도 가장 궁금한 것은 언제부터 계란은 병아리처럼 의지를 가지고 생각하고 행동하는지입니다.

이 계란을 운반할 때에는 누구든 조심합니다. 어디에 살짝만 부딪혀도 깨어지기 때문입니다. 겉보기엔 그냥 타원이지만 그 안에 소중한 생명이 잠들어 있습니다. 그리고 모두가 그것을 알고 있습니다. 그게 조심하게 되는 이유지요.

계란은 가능성을 가지고 있습니다. 그것도 가장 소중한 가능성을 가지고 있습니다. 바로 이 생명의 가능성 입니다. 어느 날 계란 하나가 처참하게 깨어진 광경을 보았는데, 이미 깨어지기 전부터 죽어있었음을 알면서도 마음이 다소 불쾌했습니다. 0.000001%이든 99.9%이든 그 생명의 가능성이 사라진 것을 보면 마음이 아픕니다. 계란은 가장 소중한 가능성, 즉 생명의 가능성입니다. 교회에서 부활절에 계란을 주는 것은 우연이 아닙니다. 그것은 탄생을, 부활을, 잠재적 생명력을 상징합니다.

그래서 난 계란이 좋습니다. 보면 작게나마 두근두근 설랩니다.
그리고 무엇보다도 맛있습니다.

'Essay > Random' 카테고리의 다른 글

계란, 그 생명의 가능성에 대하여  (0) 2012.01.13
감정과 이성, 자극과 반응  (0) 2011.09.03
삶은 그림이다  (0) 2011.09.03
이런 세상  (0) 2011.08.08

오브젝트(Object)의 반대말로 서브젝트(Subject)가 있다. 서브젝트는 주체란 뜻이고, 오브젝트는 객체란 뜻이다. 주는 주인 주 자이고 객은 손님 객 자이다. 쉬운 말로 하면 서브젝트는 '나'이고 오브젝트는 '나를 제외한, 나의 관념으로 들어온 손님이다. 연필도 객체고 책도 객체고 친구도 객체고 거울도 객체다. 나를 제외한 내가 인식하는 모든 것은 객체이다.

지금은 객체지향 프로그래밍의 시대다. 객체지향 프로그래밍은 객체를 중심으로 프로그래밍한다는 뜻이다. 객체지향 프로그래밍의 시대가 오기 전에는 절차지향 프로그래밍의 시대였다. 어떤 일을 특정한 순서대로 처리해 나간다. 절차지향 프로그래밍은 함수 중심의 프로그래밍 패러다임이고 객체지향 프로그래밍은 객체 중심의, 즉 클래스 중심의 프로그래밍 패러다임이다.

객체는 자신을 표현하는 정보를 가지고 있다. 예를 들어서 책은 여러장의 페이지, 제목, 저자, 출판사, 소비자가격, 그리고 수만글자의 텍스트와 그림들을 가지고 있다. 그리고 자신에게 특수화된 행동을 하거나 행동이 행해질 수 있다. 책은 펴질 수 있으며, 각 페이지는 접힐 수 있고, 제목 옆에 주인의 이름을 기입할 수도 있다. 연필은 펴질 수 없다. 거울에는 이름을 기입할 수 없다. 객체를 표현하는 정보 하나하나를 객체의 Instance variable 이라고 하고, 객체가 가할 수 있거나 객체에 가해질 수 있는 특수한 행위들을 그 객체의 Instance methods라고 한다.

다음은 학생 객체의 가벼운 예시다.

// 학생 타입의 hanbyeol이란 이름의 객체 선언
Student hanbyeol = [[Student alloc] init];
// hanbyeol 객체의 instance variable 'name'을 "한별"로 셋팅
hanbyeol.name = @"한별";

// instance variable 'age' 셋팅
hanbyeol.age = 23;

// 'major' 셋팅
hanbyeol.major = @"Computer Scinece";

// hanbyeol이 'takeExam' 이라는 instance method를 통해 시험을 침. 총 세 번 침.
[hanbyeol takeExam];
[hanbyeol takeExam];
[hanbyeol takeExam];

// hanbyeol 자신이 지금까지 친 시험의 평균 성적을 계산해 돌려줌.
char grade = [hanbyeol calculateAverageGrade];

처음으로 서버 프로그래밍을 할 때, 가장 낯선 개념 중 하나가 로그였다. 로그를 남기는 이유는 막연하게나마 알 것 같은데 언제, 어떻게 남겨야 할지는 허공의 구름을 잡는 듯한 느낌이었다. 뭔가 잡히는 것 같은데 안 잡히는… 그래서 새로운 콘텐츠를 담당하게 되었을 때, 로그를 제대로 남기어보고 싶어서 그에 대한 고민을 해 보았다.

로그를 도대체 왜 남길까? 그 이유는 간단하다. 로그는 표시다. 로그는 표시를 하기 위해서 남긴다. 그렇다면 왜 표시를 하냐. 바로 표시된 부분을 알기 위해서이다. 왜 표시된 부분을 알아야 하냐. 그것이 로직의 흐름이나, 문제점이나, 오작동여부를 확인하는 데 도움을 주기 때문이다. 그렇다. 로그를 남기는 이유는 로직이 의도된 바로 흐르는지, 내 코드의 문제나 내 코드를 잘못 사용한 코드가 없는지를 감지하기 위해서이다.

로그의 주 된 목표인 오류를 방지하기 위한 로그에 대해 생각해보자. 오류엔 두 종류가 있다. 내가 실수해서 생긴 오류, 그리고 다른 프로그래머가 내 코드를 잘못 사용해 생긴 오류이다. 전자나 후자나 로그를 남기는 방식은 똑같다. 어느 함수의 몇 번째 줄에 위치한 에러인지를 기록하고, 그 에러를 가장 잘 표현해주는 메시지를 남기도록 한다. 또한 그 에러가 발생한 정황을 역추적할 수 있는 정보들도 함께 출력해주면 원인을 더 쉽게 찾을 수 있다.

객체지향의 환경에서 클래스를 구현할 때, 오류에 대해서 우리가 신경 써야 할 2가지 가정이 있다. 절대 가정과 체크 가정이다. 절대 가정은 그것이 사실이라는 가정하에 클래스를 구현할 정도로 당연시 되는 가정이다. 따라서 사실이 아니면 오작동을 하거나 프로그램이 크래쉬가 날 수 있다. 너무나 당연히 사실이어야 하는 부분이기에 보통 따로 그 에러를 체크하여 로그를 남기지는 않는다. 하지만 크래쉬가 난다는 것은 서버 프로그래머에게 있어서 매우 치명적인 에러이기 때문에 퍼포먼스상의 하향이 있어도 가능한 한 이런 오류도 체크를 해서 로그로 남기고 크래쉬가 나지 않도록 돌려 처리하는 것이 좋다. 아닌 경우 헤더파일에 이러한 가정에 대해서 분명히 명시하는 것이 좋다. 이러한 가정은 행여나 인수인계 후 다른 사람이 그 클래스를 수정할 때 반드시 알고 있어야 하는 부분이므로 타작업자의 소스 분석의 혼돈을 줄이기 위해서라도 꼭 명시해 주도록 한다. 절대 가정은 아주 위험한 결과를 초래할 수 있기 때문에 그 내부 사정을 잘 알고 있는 클래스 내부에서만, 혹은 아주 결합도가 높은 컴퍼넌트 레벨에서만 하도록 한다.

Check 가정은 그 클래스 외부에서 그 클래스를 올바로 사용하는지를 검출하기 위한 것이다. 다른 메소드를 호출한 후에 호출해야 할 메소드를 바로 호출하거나, 클래스 멤버의 어떤 값을 설정해야 유효한 메소드를 설정 없이 호출한다거나, 무효한 값의 파라미터를 넘기는 행위 등은 오작동을 초래할 수 있다. 이런 외부동작에 대해서 그 클래스는 무조건 무결성으로 동작하는 것이 좋은 코드이지만 로그나 어썰트를 남기어 주는 것은 그러한 잘못된 사용을 감지하고 수정하는 데에도 도움을 준다. 이 경우 우린 로그를 남기어 그 코드를 사용하는 사람이 오류를 수정하도록 도와준다.