본문 바로가기

기타

객체지향의 탄생-Template Method Pattern 템플릿 메소드 패턴(Template Method) 1. 나는 군대를 전산 장비 정비 하사로 오랫동안 보냈다. 나는 어느 초대형 전산 장비를 정비하는 특기를 수행했다. 만약 5분이상 장비가 멈추면 대한민국 안보가 구멍날 정도로 중요한 장비였다. 처음 내가맡은 역할은 조수였다. 팔뚝에 굵은 근육이 인상적인 젊은 중사/상사 또는 나이 지긋한 잔뼈가 굵으신 원사/준위들이 대형 장비를 어두운 구석에서 정비하면 나는 옆에서 트러블 라이트라는 전구를 들고 고참이 능숙하게 정비하는 모습을 보좌했다. 때로 고참들은 인상을 쓰고 입에 담배를 피면서 멋지게 장비를 정비하곤 했는데 그때 담배연기 참는 모습을 내색하지 않고 조용히 보좌해야 했던 시절은 지금에 와서 아늑한 추억이 되었다. 군대시절 정비사로 일하면서 많이 느끼고 .. 더보기
객체지향의 탄생-Commander Pattern 커맨드 패턴(Command) 1. 어렸을때 나의 머리는 온통 삼국지의 광활한 무대였다. 제갈량의 전략을 음미하고 조자룡의 무예를 상상하며 유비가 말년의 고집으로 이릉에서 육손에게 대패하여 죽음을 맞게 된 안타까움과 헌제와 정적에게 지독하게 잔인했던 조조에 대한 분노 그리고 당대의 영웅호걸들을 녹인 초선 같은 미녀들에 대한 상상까지 집에 누우면 삼국지에 대한 온갖 상상의 무대를 천장에 그려보았고, 책을 읽으면 읽었던 삼국지를 또 읽었고, 컴퓨터를 키면 삼국지 게임에 매달리곤 했다. 지금에 와서 삼국지를 생각하면 미처 생각하지 않았던 존재이지만 나름 중요한 역할을 수행하는 사람들이 있었는데 바로 '사자'라고 부른 사람들이다. 사자는 주군의 전령을 받고 동맹군이나 적군에게 달려가 전령을 전달하는 역할을 했던 .. 더보기
객체지향의 탄생-Observer Pattern 옵저버 패턴(Observer) 1. 이제 좀더 다양한 객체 구조의 세계로 나아간다. 사람은 혼자 살수 없는 존재이다. 사람은 늘 주변의 소식에 관심을 갖고, 나라의 소식에 관심을 갖고, 세상 모든곳에서 벌어지는 소식에 관심을 갖는다. 그 소식에 따라 사람의 생각과 행동이 바뀌기도 한다. 사람은 언제나 무언가에 관심을 갖고 그 관심에 따라 자신의 생각과 행동을 결정한다. 그러므로 사람이 관심갖는 모든것에 어떻게 소식을 주고 받을지의 문제는 인류의 역사가 시작되면서 먹고 자는것만큼 중요한 화두가 되었다. 손짓발짓에서 언어가 탄생되고 문자가 탄생되어 소식을 주고 받기 시작했다. 동양에서는 봉화로 소식을 전하기도 했다. 말이나 낙타도 이용하여 소식을 전하기도 했다. 산업혁명이후 모르스 부호로 소식을 전하고 전화.. 더보기
객체지향의 탄생-Strategy Pattern 패턴 디자인 패턴은 '객체와 객체간의 관계에서 반복적으로 발견되는 좋은 원칙을 이끌어 내어 패턴으로 만들어낸 것' 이라고 정의했다. 객체지향의 기법이 가장 고도화 되고 추상화 되고 패턴화 된 결과물이 디자인 패턴이다. 디자인 패턴은 객체지향의 최고 고수, 저명한 학자들이 발견하고 패턴화 했다. 우리가 디자인 패턴을 안다는 것은 객체지향 최고의 추상화되고 패턴화된 지혜를 손 쉽게 아는 것과 같다. 디자인패턴은 '특정한 객체지향 개발 영역에서 자주 발생되는 설계 및 구현 문제에 대하여, 유연하고 확장성 높은 객체지향적 설계 패턴으로 해결하는 방법들의 모음' 이다. 디자인패턴 정의에 모음이란 단어를 포함했듯이 디자인패턴 안에 많은 패턴들이 존재한다. 많은 종류의 디자인패턴은 종류별로 비슷한 특성을 보이기도 한.. 더보기
객체지향의 탄생-객체지향 글쓰기 객체지향 글쓰기 프로그램 개발자가 가장 싫어하는 일중 하나는 문서 작성이다. 나도 문서 작성을 밤새 야근 하는 것처럼 싫어한다. 개발자들이 문서 작성을 싫어하는 결정적인 이유는 개발자 문서 작성이 '단순반복 노가다성'이기 때문일 것이다. 화면 캡춰나 기능에 대한 가이드 라인 설명 문구는 지극히 단순 작업으로 개발자를 지치게 하는 요소 중의 하나이다. 그리고 개발자와 글쓰기라는 단어 자체가 북극과 남극처럼 멀리 떨어진 이미지로 느껴진다. 개발자 중 글쓰기를 좋아하는 사람은 많지 않다. 이유는 아마도 프로그램 개발은 이공계 영역이고 글쓰기는 인문계 영역이라는 극단의 차이가 이 둘은 별개의 사고영역이라 생각하면서 내가 잘하기 힘들고, 내가 싫어하는 영역이라고 처음부터 단정짓는 것이 아닐까 싶다. 그러나 개발자.. 더보기
객체지향의 탄생-객체지향 설계를 위한 조언 지금까지 객체지향의 다양한 요소들을 살펴보면서 객체지향이 좋은 프로그램을 만드는데 어떻게 기여하는지 살펴보았다. 한마디로 좋은 프로그래밍 중에 하나는 객체지향 기술이 온전히 녹아든 프로그래밍이다. 그러나 객체지향 기술은 고도의 사색이 필요한 철학적인 요소가 있어 객체지향 기술을 제대로 쓰기 위해서는 많은 공부를 통해 그 깊은 뜻을 머리로 몸으로 이해해야 한다. 고급 와인을 만들기 위해 몇십년, 몇백년을 묵히듯 객체지향 공부도 많은 노력이 필요하다. 다행히 객체지향을 창시하고 발전시킨 선각자들은 객체지향 기술을 이용하여 바람직하게 설계하는 몇개의 디자인 원칙과 더 나아가 디자인패턴과 리팩토링이라는 훌륭한 지름길을 닦아놓았다. 우리는 지름길을 따라가면 빠르게 좋은 기법을 익힐 수 있다. 변하는 것을 캡슐화한.. 더보기
객체지향의 탄생-객체지향적인 개발 단계 기타 객체지향 이야기거리 객체지향적인 개발 단계 옛날 간단한 사다리 게임 짜면서 취미생활 삼아 프로그램을 짜곤 했다. 그때는 단순히 언어 문법에 대한 지식과 로직 구현 능력만 있으면 프로그램을 구현할 수 있다고 생각했다. 그래서 프로그래머를 하면, 내가 하고 재미있어 하는 일 편하게 하면서 일하겠구나 라고 생각하곤 했다. 하지만 막상 프로그래머가 되어 보니, 프로그램 짜는 일은, 하나의 프로젝트는, 인류 문명의 갖가지 요소를 적용하여 뭉친 복잡한 실타래와 같았다. 고도의 업무분석 능력, 커뮤니케이션 능력, 일정 관리 능력, 인력 관리 능력이 요구되었다. 어느 고참 개발자의 얘기를 들어보면 고급 관리자가 되면 정치싸움에도 능숙해야 한다고 했다. 나도 프로젝트를 경험해보니 실제 프로그램 구현 능력도 중요했지.. 더보기
객체지향의 탄생-DRY DRY(Don't Repeat Yourself) 여지껏 무수히 많이 설명했고 유별나게 많이 언급되는 규칙들이 있다. 낮은 결합도와 높은 응집도, 클래스는 하나의 일만 해야 된다. 중복되는 코드는 하나로 통합한다. 등의 규칙들이다. 마치 먼지하나도 용서하지 못하는 결벽증 환자처럼 이런 규칙들을 강조한다. 그러나 다행인것은 객체지향 디자인 원리와 상속과 폴리모피즘등의 객체지향 요소를 잘 활용하면 이런 결벽증같이 강조하는 규칙들을 저절로 지킬수 있다는 점이다. 중복되는 코드는 하나로 통합한다. 를 객체지향 개발에 맞게 풀어쓰면 공통되는 부분을 추출하여 추상화하고 한 곳에 두어 중복코드를 피하라. 라고 얘기한다. 이것이 DRY라는 반복 금지의 원리이다. 하나의 요구사항은 한곳에 두어야 한다는 원리이다. 프로그램.. 더보기
객체지향의 탄생-ISP ISP(Interface Segregation Principle) 나는 옛날에 다세대 연립 주택에 살았다. 우리집 주변의 길은 개똥과 쓰레기가 적당히 엉켰고, 우리집 연립 주택 앞에는 각종 우편물과 전단지가 어지럽게 떨어져 있었다. 1층부터 3층까지 작은방이 덕지덕지 붙어 있었고, 그 속에 여러 사람들이 비좁게 살고 있었다. 이곳이 오래 있을 곳은 아니었지만, 그렇다고 이곳을 떠나기엔 아직 많은 시간과 노력이 필요했다. 연립 주택에 살면서 여러가지 불편한 일을 경험했다. 먼저 좁은집에 여러 사람이 붙어 사니, 종종 시끄러운 소리가 들렸다. 술취한 아저씨의 주정 소리도 들리고, 가족끼리 싸우는 소리도 많이 들렸다. 특히 한집의 가족이 자주 새벽에 싸우곤 했다. 삶에 지친 그들의 푸념 같은 싸우는 소리를 새.. 더보기
객체지향의 탄생-LSP LSP(Liskov Substitution Principle) 자식 타입들은 부모 타입들이 사용되는 곳에 대체될 수 있어야 한다. 초창기 자바 개발자일때 이 규칙을 잘 모른 상태에서 상속과 폴리모피즘을 어설프게 적용한적이있다. 이 규칙을 확실히 이해했다면 개발할때 해매는것이 아니라 더 깔끔하게 개발했을 것이다. 지금까지 무수히 강조했던 상속과 폴리모피즘을 명확하게 적용하고 싶을때 곰곰히 곱씹어야할 중요한 원칙이다. LSP와 연결되는 개념인 상속과 폴리모피즘의 전형적인 구조는 다음과 같다. [상속과 폴리모피즘의 전형적인 구조 그림] 이런 구조는 클라이언트가 하위 클래스가 아닌 상위 클래스나 인터페이스에 의존하고 클라이언트를 실행하는 런쳐 클래스에서 클라이언트 객체를 생성하면서 하위클래스를 넘겨주는 구조로 .. 더보기
객체지향의 탄생-OCP OCP(Open Closed Principle) 사람 사는 세상은 복잡다단하다. 예를들어 마른하늘에 정말로 날벼락이 칠수도 있다. 어플리케이션은 사람 사는 세상을 고스란히 옮겨놓았다. 틀림없이 어플리케이션에도 마른하늘에 날벼락이 치는 변화무쌍한 요구사항이 발생할것이다. 요구사항에는 기존 개발된 기능의 변경 건이 있거나 새로운 기능 확장의 경우가 있다. 이런 요구사항이 생길때 객체지향 설계자는 어플리케이션을 어떻게 변경하거나 확장할지 고민한다. 기존의 클래스에 메소드의 내부코드를 변경하는 방법이 있다. 이 경우는 가장 직관적으로 해결하는 방법일 것이다. 그러나 위험하다. 기존의 소스를 변경하는 방법은 기름바닥이라는 높은 결합도에 라이타불을 던지는 것과 마찬가지이다. 기존의 소스는 이미 여러 클래스들에 의해.. 더보기
객체지향의탄생-객체지향 디자인 원리 SOLID, SRP 수영 한지 5년이 됐다. 나는 글을 쓰는 지금 수영을 책과 글쓰기와 프로그래밍외 유일한 삶의 낙으로 부단히 연습하고 있다. 수영을 배운지 10개월 즈음 되었던 어느날, 수영 연습을 하다가 나는 뭔가 깨달음을 얻고 크게 기뻐했다. 수영의 고수로 오르는 중요한 길목인 '물잡기'의 감을 처음 느꼈다. 극심한 몸치로서 3개월동안이나 물에 못 뜨다가 드디어 처음 물에 떴을때의 감동에 이은 모처럼의 큰 깨달음과 감동이었다. 물은 액체다. 나는 물은 액체라고 생각하고 손을 뒤로 저었다. 나는 흐물흐물한 액체를 젓고 있으므로, 이때 물을 저으며 몸이 나아가는 느낌은 약하고 불안하다. 수영에 대한 강좌 글을 읽어보니 물을 고체라고 생각하고 물을 잡고 뒤로 젓는 물잡기가 진정한 '스트로크' 라고 한다. 물을 고체 잡듯 잡.. 더보기
객체지향의 탄생-UML2 클래스, 인터페이스 클래스와 인터페이스는 클래스다이어그램의 몸체에 해당한다. 상단에 이름을 적고, 중간에 속성을 적고, 하단에 메소드를 적는다. 보통 속성과 메소드를 넣을 필요가 없으면 넣지 않아도 된다. 상속 화살표는 마치 자식이 엄마에게 용돈 달라고 손내미는 모습과 같다. 화살표 방향의 클래스나 인터페이스를 자신이 상속받는다는 뜻이다. 연관, 의존 연관과 의존은 마치 나는 너를 알고 있어라고 손가락질 하는 모습과 같다. 화살표 방향의 클래스나 인터페이스를 자신이 알고 있다는 뜻이다. 구성, 집합 구성과 집합의 마름모꼴은 마치 둘이 강하게 악수한 모습과 같다. 마름모 꼴로 연결된 두 객체 패밀리 그룹은 한쪽이 다른 한쪽의 구성요소, 부속품의 요소로서 존재한다. 보통 악수할때 팔을 거의 내밀지 않는 쪽이.. 더보기
객체지향의 탄생-UML1 UML로 객체지향 세계를 그리다. 사람은 소통한다. 살기위해 소통하고 얻기위해 소통한다. 사람들이 얼굴보고 소통할때는 말뿐만 아니라 손짓, 발짓, 표정 그리고 알수 없는 미묘한 감성까지 힙을 합쳐 소통 한다. 그래서 사람들이 얼굴보고 소통할때는 자신이 전하고자 하는 뜻을 대부분 빠트리지 않고 전달한다. 과학 기술 영역에서는 소통의 어긋남이 조금이라도 발생하면 전체가 어긋난다. 섬세한 기록이 요구되는 과학 기술 영역에서 사람의 언어는 불완전한 소통 수단으로 전락한다. 그래서 과학 기술 영역에서는 사람의 불완전한 언어를 보완할 간결하고 명확한 언어를 쓴다. 수학은 간결함과 명확함으로 상징되는 과학의 언어이다. 수학은 인류의 발전을 우주로 이끌어 올린 로켓 엔진과 같은 힘을 주었다. 사실 수학은 나에게 어려움.. 더보기
객체지향의 탄생-상속과 구성 상속과 구성 세상의 모든 기술은 저절로 습득되는 것이 있고, 따로 공부와 훈련이 필요한 경우도 있다. 예를 들어 당구를 치다보면 경험을 쌓으며 저절로 기술을 습득한다. 그러나 정식으로 배우지 않은 당구 기술은 한계가 있거나 아무리 오래쳐도 300넘기가 쉽지 않다. 대신 정식으로 당구를 배울 경우 처음에는 번거롭고 힘들어도 언젠가부터 실력이 빠르게 향상 될 것이다. 저절로 익혀지는 기술은 처음 배우기는 쉬우나 갈수록 효율성이 떨어지는 기술일 것이고, 따로 배워야 하는 고급 기술은 처음 배우기는 어려우나 알수록 효율성이 높아 편하게 활용하는 기술일 것이다. 시골의 아이들은 어렸을때 물가에서 놀면서 형들이 약간만 알려주면, 저절로 헤엄치기를 배운다. 누가 정석으로 가르쳐 준것도 아닌데 잘도 헤엄친다. 상속은 .. 더보기
객체지향의 탄생-상속과 폴리모피즘 상속과 폴리모피즘 상속에 대하여 생각해보면, 부모의 재산을 물려 받는 것도 상속이고, 스승으로부터 기술을 전수 받는 것도 일종의 상속이다. 한창 프로그래밍에 관심이 많을 때 나는 부모의 재산을 물려받은 재벌2세보다 훌륭한 맨토를 만나 소중한 기술과 삶의 지혜를 배우길 더 바랬다. 부모의 재산을 물려받은 재벌2세는 부모가 낚은 고기를 그대로 물려준것에 불과하다. 맨토의 지식을 물려받은 제자는 고기를 잘 낚는 법을 배우는 것이다. 고기를 잘 낚는 법을 배운 제자가 더 자부심이 클 것이기 때문에 나는 훌륭한 맨토를 만나기를 더 바랐다. 지금도 나는 훌륭한 맨토를 만나고 싶은 열망이 많지만, 사실 나이가 들고 사회생활을 하다보니 역시 부모 재산의 혜택을 입은 부자2세들이 더 부럽기도 하다. 이렇게 변한 나를 볼.. 더보기
객체지향의 탄생-캡슐화와 정보은닉 얼마전 이사간 우리집 내방은 창문이 훤히 뚫렸다. 창문 밖은 시원한 바람이 불었다. 창문 바깥에는 높은 건물도 없어 바깥 경치도 훤히 보였다. 나는 좋은집으로 이사왔다. 그러나 걱정도 되었다. 우리집이 2층인데다가 창문이 크고 넓어서 도둑이 마음만 먹으면 쉽게 칩입할수 있었다. 나는 고민하다가 결국 2층 넓은 창문을 방범창으로 막았다. 방범창으로 막았더니 내 집은 안전해지기는 했지만, 마치 감옥의 창살과 같은 느낌이라 보기 좋지는 않았다. 그래도 이 방법이 최선이었기 때문에 나는 곧 방범창에 익숙해졌다. 이번에 컴퓨터를 새로 마련했다. 기본 컴퓨터 사양에 업그레이드 옵션으로 구입하려고 했더니 돈이 들었다. 따로 램하고 하드디스크와 키보드를 구입하는 것이 돈을 더 아꼈다. 컴퓨터 본체가 오고 얼마뒤 램과 .. 더보기
객체지향의 탄생–오버로딩과 오버라이딩 군대를 다시 가고 싶어하는 사람은 없다. 그러나 군대 한번 갔다오면 그곳의 이야기 거리는 마치 당겨도 당겨도 묶인 손수건이 계속 나오는 마술 상자와 같다. 군대에서 나는 정비쪽 업무도 종종 보곤 했다. 처음 나는 조수였다. 고참이 능숙하게 장비를 고치면 옆에서 나는 라이트~ 를 비춰주거나 공구심부름을 하곤 하였다. 사실 공구심부름은 고역이었다. 1층 작업하는 곳에서 3층 사무실까지 갔다 와야 했다. 정비작업이 필요할땐 미리 필요한 공구를 예상하여 챙겨 내려갔다. 그래도 빠진 공구가 있어 가끔 3층 계단을 힘들게 올라갈때면, 막강한 만능공구 하나만 챙겨서 쓰면 얼마나 좋을까 하며 투덜거리곤 했다. 맥가이버 칼은 공구를 좋아하는 남자들의 작은 로망이다. 맥가이버 칼 하나로 갖가지 공구를 쓴다. 오버로딩은 맥.. 더보기
객체지향의 탄생-인터페이스 인터페이스는 산의 맑은 공기와 같다. 등산할때는 맑은 공기를 마실 수 있지만, 맑은 공기의 고마움은 쉽게 인식하지 못한다. 등산을 마치고 도시속에 찌든 공기를 마실때 기침을 콜록일 때야 고마움을 깨닫곤 한다. 인터페이스는 산의 맑은 공기처럼 늘 객체지향 개발자와 함께 하는 존재이며, 무의식중에 쓰는 존재이지만, 인터페이스의 유익함과 고마움을 쉽게 인식하지 못한다. 꼬마때 삼국지를 열심히 읽었다. 삼국지는 꼬마가 꿈꾸는 갖가지 상상력을 소설로 모두 담았다. 넓은 대륙, 영웅 호걸 장수들의 무협 소설 같은 활약, 천재 모사들의 머리 싸움, 영웅들의 사랑까지~ 담을 수 있는 '판타지' 는 모두 담은 소설이니 영웅들을 동경하며 열심히 읽었다. 나는 천재 모사들의 머리 싸움을 좋아했다. 제갈량이나 조조가 전장을 .. 더보기
객체지향의 탄생-객체지향 보물지도의 해석 꼬마때 동화나 만화, 고전 소설들을 읽다보면 보물이 꼭꼭 숨겨져 있다. 보물을 찾기 위한 험난한 스토리가 이어진다. 진부하면서도 손을 놓을 수 없는 스토리 전개에 푹 빠졌다. 어린 나이에 나도 보물을 찾아 어려운 집안에 도움을 줘야겠다는 상상도 했다. 그러나 지금 생각해보니 보물찾기 소설은 어쩌면 한탕주의를 부추기는 스토리이기도 하다. 중학교때는 무협소설, 무협영화에 빠져지냈다. 유명한 황비홍, 동방불패 시리즈를 보며 인간의 한계를 저렇게 뛰어넘을수도 있겠구나 싶었다. 무협에 대해 좀더 알고 싶어 여러 무협소설을 읽었다. 무협소설도 읽어보니 공통점이 있다. 하나의 무공비급을 얻기위해 각 인물이나 문파들이 기를쓰고 싸운다는 것이다. 무공비급들도 하나의 책에 불과할 것인데, 무공비급만 얻으면 천하무적이 되는.. 더보기
객체지향의 탄생-객체지향을 이롭게 하는 5가지 특징 나는 시스템이라는 용어를 좋아한다. 국어사전의 정확한 정의를 보니 '시스템은 필요한 기능을 실현하기 위해 관련 요소를 어떤 법칙에 따라 조합한 집합체'라고 한다. 시스템은 집합체 구성요소 하나만 잘하면 되는 것이 아니고 모든 구성요소가 정확하게 맞물려가야만 시스템이 작동된다. 그래서 복잡다단한 구성요소들이 자기의 위치에서 정확하게 시스템을 위한 일을 할때, 내가 속한 시스템이 건강하게 돌아가는 것을 보면, 나는 복잡다단한 구성요소들의 협동심에 감탄하고 나도 저런 구성요소가 되야 겠다는 생각을 한다. 세상은 모두 경이로운 시스템들이 또 다른 시스템에 속하고 더 큰 시스템에 속하는 식으로 마치 알고리즘의 재귀구조로 블랙홀에 빠져들어가듯이 연관되어 있다. 사람도 수많은 장기가 유기적으로 돌아가는 시스템이고 최.. 더보기
객체지향의탄생-생성자 노을이 질 때 나는 편안한 주황색 색감에 취해 잠시 몽롱해지곤한다. 몽롱함은 마치 소주에 취한 것처럼 달고 약간은 쓸쓸하다. 1,2년에 한번씩 동해바다 아침 노을을 볼 때 나는 진하게 취한 느낌이 든다. 어쩌다 한번 마시는 고급 양주를 마시는 느낌이다. 아침 노을은 어쩌다 한번 비싼 값을 치루고 보는 광경이라 고급 양주와 같다. 작은 동그란 노른자 태양이 서서히 뜰때면 나는 새로운 생명의 에너지를 받는 착각에 빠진다. 저녁에는 저 에너지 넘치는 태양이 흐릿하게 사라질것이다. 삶과 죽음은 순환한다. 돌아가신 외할머니의 구순 생신때 찍은 사진을 보았다. 외할머니와 외할머니의 증손주 다섯살 내 조카가 생일케익을 앞에두고 똑같이 촛불을 끄고 있었다. 나는 그 사진을 보며 생각 많고 감수성 풍부한 시인처럼 뭉클해.. 더보기
객체지향의 탄생-메소드 문득 CSI 요원들의 섬세한 관찰력과 증거로부터 단서를 추출하는 능력을 생각했다. 그들은 객체지향 전문가가 되더라도 훌륭한 설계자, 개발자가 되었을 것이 분명하다. CSI 요원이 발품팔고 깊이있게 관찰하여 얻은 소중한 증거물들은 범죄를 해결하기 위한 중요한 '속성'들이다. 그러나 속성만 확보만 해서는 수사의 아무런 진전이 없다. 증거물(속성)로부터 범죄와 관련된 데이터를 추출해야한다. 데이터를 추출하는 '방법'을 알아야 한다. CSI 에서는 요원들이 채취한 증거물을 분석하기 위한 다양한 첨단장비들이 등장한다. 지문 분석기, DNA 분석기, 범죄 현장을 3차원으로 재구성하여 시뮬레이션 하는 소프트웨어도 있다. 이 첨단장비들은 모두 채취한 증거를 분석하기 위한 '방법' 들이다. 어느 객체든 어느 일이든 그 .. 더보기
객체지향의탄생-속성 유독 주변을 잘 관찰하고 기억하는 친구들이 있다. 친구들은 한번 갔던 길이나 거리의 간판을 보고 바로 기억하여, 필요할때 편리하게 써먹곤 한다. 나는 친구들이 부러웠다. 나는 10번을 가보기전에는 갔던 길이나 거리의 간판을 봐도 기억하지 못했다. 친구들은 타고난 관찰자 들이다. 타고난 관찰자들을 책에서도 드라마에서도 보곤한다. 자전거 여행이란 수필 책을 읽으면 보이는 자연과 음식과 사람에 대해 어떻게 이렇게 새밀하게 관찰하고 묘사했는지 탄성을 지를때가 있다. 보리밭, 대나무숲에 대해 몇페이지에 걸쳐 관찰하고 묘사하기도 한다. 쑥된장국의 냄새를 "먹이 피라미드 밑바닥의 아린 냄새"라고 묘사하는 부분을 읽을때면, 이 책의 저자가 세상을 보는 관찰력과 통찰력이 경지에 이르렀구나 하며 감탄하곤 한다. 내가 즐겨.. 더보기
객체지향의 탄생-클래스 클래스(Class) 객체지향이라는 어려운 IT기술을 익히기도 전에 고유명사니 일반명사니 하는 반대편 국어 개념이 등장했다. 고유명사는 이해하기 쉽다. 고유명사가 이해하기 쉬운 이유는 직설적이고 직관적이기 때문이며 바로 눈 앞에 보이기 때문이다. 눈에 보이는 모든 사물이 고유 명사이다. 지금 내 앞에 있는 노트북, 모니터, 옆에 핸드폰, 쓰레기통까지 고유 명사이다. 말 그대로 세상에 유일한 존재를 고유명사라고 부른다. 일단 세상에 나왔다 하면 사람이든 물건이든 유일한 존재이기 때문에 세상에 존재하는 모든 것들은 고유명사 일 수 밖에 없다. 고유명사는 세상에 존재하는 사물이다. 일반명사는 사람이 만들어낸 개념이다. 일반명사는 사람이 만들어낸 개념 안에서만 존재한다. 만약 일반명사가 없다면 등산을 할 때 눈에.. 더보기
객체지향의 탄생-객체 객체지향의 기본 요소 객체지향에도 여러 요소들이 있다. 객체지향의 요소들은 마치 생물처럼 전체를 구성하고 있는 각 부분이 서로 가깝고도 깊게 관련을 맺고있다. 그래서 떼어내서 생각하지 말고 연관지어 생각하는 것이 좋다. 나는 객체지향의 각 요소를 자연의 숲과 나무에 비교하기로 했다. 우리는 객체지향 휴양림을 보고 있다. 객체지향 휴양림의 가장 큰 요소는 숲이다. 숲은 어플리케이션과 같다. 어플리케이션 숲안에는 다양한 나무들이 있다. 나무들은 숲을 이루는 가장 기본적인 요소이기 때문에 마치 객체와 같다. 자연이 성장하는데 가장 중요한 요소중 두어가지는 그 지역이 낮은 해충과 높은 영양을 갖춰야 하는 것이다. 객체지향 휴양림이 있는 지역은 다른 휴양림보다 낮은 해충과 높은 영양으로 유명한 땅이었다. 소프트웨.. 더보기
객체지향의 탄생-진입장벽 객체지향의 진입장벽 2003년의 겨울은 추웠다. 날씨가 추웠고 돈이 없어 추웠고 미래가 불안해서 추웠다. 나는 옛날부터 프로그래밍을 좋아했다. 다만 바로 취직하기에는 실력이 부족했다. 5개월을 이곳 노동부지원 IT학원에 투자했다. 만약 여기를 수료해도 취직이 되지않는다면 답이 없다. 내가 그해 겨울에 추웠던 것은 미래가 불안했기 때문이다. 몇천원 붕어빵 간식과 중국집 사장님 양해를 구해 짬뽕국물만 시켜 소주 마셨던 그때는 돈도 유독 없었다. 다만 지금은 따르지 못한 것을 하나 가지고 있었었다. 열정이다. 그때의 열정은 지금은 따라잡기 힘든 절박함이 뒷받침된 강력한 힘을 가졌다. 우리는 프로그래밍의 기초인 처리, 판단, 반복에 대해 배우고 있다. 처리는 일반적인 변수 대입등의 처리문, 판단은 if문에 따른.. 더보기
객체지향의 탄생-객체지향, 삽질을 줄이는 지혜 객체지향은 '세상의 사물을 관찰하여 사물의 본질을 속성과 메소드를 포함한 객체와, 객체간의 관계로 추상화 한다.' '그래서 응집도를 높게하고 결합도는 낮게 개발한다.' '그 결과 유연하고 확장하기 쉽고 유지보수가 편리하는 소프트웨어를 개발하는 방법' 이 객체지향 개발이고 객체지향 개발에 따른 효과이다. 더 나아가, '객체와 객체간의 관계에서 반복적으로 발견되는 좋은 원칙을 이끌어 내어 패턴으로 만들어낸 것' 은 다자인 패턴이다. 삽질은 프로젝트 할때의 삽질이다. 프로젝트 삽질의 최후는, 동작은 하나 안은 만신창이 누더기인 결과물이 탄생한다. 살아는 있으나 신체와 정신이 만신창이가 된 개발자가 생긴다. 그래도 치명적인 문제는 일단 숨겨져 있고 결과물은 돌아간다. 개발자는 고된 일터 탈출을 꿈꾸더라도 밥벌이.. 더보기
객체지향의 탄생-객체지향의 탄생 객체지향의 탄생 사람은 관찰한다. 눈으로 세상을 보고, 귀로 소리를 듣고, 코로 냄새를 맡고, 혀로 맛을 느낀다. 덕분에 사람은 세상을 있는 그대로 받아들이는 능력을 가졌다. 사람은 세상을 있는 그대로 받아들이진 않는다. 나에게는 아름답게 눈 덮힌 거리가 누군가에게는 귀찮은 노동거리로 보인다. 나에게는 감미로운 음악 소리가 누군가에게는 수면을 방해하는 소음으로 들린다. 나에게는 맛있는 고기 냄새가 누군가에게는 불쾌감을 준다. 나에게는 맛있는 불 닭발이 누군가에게는 매운 음식으로 인식된다. 사람이 보는 세상의 모든 것들은, 사람의 관찰 도구 '이목구비'를 통해 객관적으로 인식되었다가, 사람의 '생각'을 통해 주관적으로 덧씌워져서, 각자의 이미지로 재 탄생한다. 객관적인 관찰도구 이목구비가 사람의 사고를 거.. 더보기
객체지향의 탄생-생각의 탄생 기본 객체지향의 탄생 생각의 탄생 프로그래밍은 머리를 굴리는 작업이다. 머리를 굴린다는 것은 생각을 한다는 것이다. 생각을 잘하려면 사고력이 필요하다. 생각의 종류는 어떤 것들이 있을까, 생각을 잘하는 방법은 어떤 것들이 있을까. 나는 어렴풋이 궁금증을 갖기도 했다. 굳이 자세하게 따져보지는 않았다. 나는 철학자처럼 깊이있는 고민을 하지는 못했다. 프로그램 개발자로 생각의 근육을 사용해 지식 노동을 하지만, 깊이 있는 고민을 많이 해보지 않은 게으른 나를 위해 생각의 탄생이란 책이 출판된적이 있다. 생각의 탄생은 문명이 발달하면서 인류의 사고가 어떻게 사용되고 발전되었는지 생각의 종류를 13개로 분류하여 각 생각의 영역마다 위인들의 사례를 들고 실예를 설명한다. 관찰, 형상화, 추상화, 패턴인식, 패턴형.. 더보기