본문 바로가기

객체지향

객체지향의 탄생- Factory Method 생성 관련 패턴(Creational Patterns) 팩토리 메소드 패턴(Factory Method) 1. 다시 사람사는 세상을 살펴보자면, 사람사는 세상은 역시 복잡다단하다. 사람이던 동물이던 사람이 만든 물건이던 모두 혼자서만 작동하는 경우는 드물고 대부분 다른 사물에 의존한다. 의존은 최대한 줄여야 좋다. 의존이 많을수록 의존된 사물이 잘못되었을때 상처입을 확률이 크다. 우리는 전산화를 통해서도 의존성을 줄여왔다. 인터넷 뱅킹은 사람이 발품팔아 은행가서 번호표 뽑고 기다리는 시간과 거리에 대한 의존을 줄여 주었다. 인터넷 정부는 각종 민원처리를 최대한 간소화하여 민원인이 민원처리에 대한 지식과 시간에 대한 의존을 줄여 주었다. 기타 다양한 IT서비스는 사람이 원하는 기능만 알고 나머지 복잡한 기능은.. 더보기
객체지향의 탄생- Composite pattern 컴포지트 패턴(Composite) 1. 어느 TV프로그램을 보면 큰 선물박스를 선물받았는데 큰 선물박스를 열면 그안에 약간 작은 박스가 있고, 약간 작은 박스를 열면, 중간 사이즈의 선물박스가 있고, 중간 사이즈 박스를 열면, 조금 작은 박스가 있고 마지막 정말 작은 박스를 열었더니 그안에 뭐가 있었더라..라는 내용이 나오곤 한다. 재미있으면서도 받는 사람에게는 약오르는 상황이다. 이 상황을 어플리케이션으로 표현한다면 생각나는대로 구현했을때 일단 큰박스, 중간 박스, 작은 박스의 종류를 따져서 작은 박스가 중간박스에 담기게끔 소스를 구현할지도 모른다. [박스의 역할이 작은박스, 중간박스, 큰박스로 고정되어 있다.] public class BigBox { List middleBoxs = new ArrayL.. 더보기
객체지향의 탄생- Façade pattern 퍼사드 패턴(Façade) 1. 사람은 모든지 행복한 일을 추구한다. 사람이 느끼는 행복에는 편리함도 있다. 사람은 편리할때 행복을 느낀다. 사람을 상대로 하는 모든 사업은 사람의 편리함을 지속적으로 추구해왔다. 최근의 첨단 문명에서는 사람을 편리하게 해주는 한계를 넘어서 계속 발전하고 있다. 예를들어 컴퓨터와 비행기와 인터넷과 휴대폰의 발명과 진화는 사람간의 교류와 지식 관리의 편리함을 극한까지 지원한다. 그런데 무엇보다 고대에도 중요했고 현재에도 중요한 사람의 편리함은 사람의 기본적인 욕구를 편리하게 해주는 것이다. 그중에서도 으뜸이 바로 사람의 생존의 관문인 먹거리와 관련된 서비스업이다. 고대부터 사람이 혼자서 모든 자신의 밥거리를 혼자 해결할 수 없다. 우리 들의 식사 요구사항을 편리하게 해결해줄.. 더보기
객체지향의 탄생- Adapter pattern 어뎁터 패턴(Adapter) 1. 누구에게나 정이 가고 애착이 가고 꼭 필요한 물건이 있다. 여자라면 가방이나, 집의 소품, 남자라면 자동차와 카메라, 전자 제품이 있을 것이다. 나에게 가장 소중한 물건은 '아이폰' 이다. 나는 옛날부터 전화기, MP3, 게임기, 카메라, 동영상 플레이어의 휴대용 기기가 통합된 단 하나의 기기를 갖기를 손꼽아 기다렸다. 나에게 아이폰은 나의 희망사항에 가장 근접한 기술력과 모양을 갖춘 꿈의 기기 였다. 아이폰은 내가 심심하지 않도록 언제나 옆에서 함께하는 친구와 같았다. 그래서 나는 아이폰을 좋아한다. 심지어는 아이폰과 잡스를 동경해 아이폰 개발자로 전향했다. 2. 몇년 후 나는 아이폰 개발자이기도 해서 컴퓨터는 맥미니를 쓰고, 뉴 아이패드를 쓰고, 아이폰을 쓰고 있다... 더보기
객체지향의 탄생- Decorator pattern 구조 관련 패턴(Structural Patterns) 데코레이터 패턴(Decorator) 1. 사람 사는 세상의 사물들은 독립적인 사물 그 자체로 자신의 기능을 다하기도 한다. 목이 말라 지금 내가 마시는 물컵이나, 내가 참고하는 책들은 하나의 사물 그 자체로 자신의 의미와 기능을 다하는 것이다. 또는 사물이 하나의 사물로 존재할때 기능을 다하는 것이 아니라 부가적인 사물과 합쳐 온전하게 자신의 기능을 다 발휘하는 경우도 있다. 사람 자신도 부가적인 사물인 옷들을 입어야 다른 사람들과 어울리며 사회생활을 한다. 자동차는 오디오셋트, 네비게이션셋트, 에어벡시스템 등이 함께 있어야 제대로 작동된다. 먹거리로 피자는 불고기, 새우, 닭가슴살 토핑 중에 하나를 선택하여 피자의 맛이 완성된다. 이렇게 어떤 사물들.. 더보기
객체지향의 탄생- Chain of Responsibility 채인 오브 리스판시빌리티 패턴(Chain of Responsibility) 1. 세상의 모든 객체들의 상호작용은 뭔가 원하고 뭔가 주는 과정의 끊임없는 반복이다. 벌이 꽃에게 꿀을 원하면 꽃은 꿀을 주었다. 새가 나무에게 집을 원하면 나무는 집을 주었다. 세상에서 가장 아낌없이 주는 존재는 자연이다. 자연은 모든 생물이 원하는 모든 것을 주었다. 땅위의 동물은 공기가 필요하니 공기를 주고, 물고기들은 물이 필요하니 물을 주었다. 자연은 생물의 생존에 필요한 모든 것들을 주었다. 세상의 모든 생명중에서도 자연에 가장 빚을 지고 있는 생명은 사람이다. 식량을 기르는 땅을 주고, 문명의 작동에 필요한 에너지를 제공하고, 한 가족이 행복하게 쉴 수 있는 산과 바다를 제공해 준다. 자연은 인류의 어머니다. 그래서.. 더보기
객체지향의 탄생-State Pattern 스테이트 패턴(State) 1. 객체지향의 중요한 원칙중 하나는 캡슐화이다. 캡슐화는 속성을 숨겨 다른객체가 함부로 접근하지 못하게 하는것도 있다. 객체에 주어진 기능중에 일부를 나머지 부분으로 분리하여 다른 객체 그룹으로 감싸는 것도 있다. 둘다 캡슐화라고 한다. 우리는 변하는 많은 요소를 캡슐화 하는 방법을 배웠다. 알고리즘, 구독 프로세스, 장식 알고리즘, 의존성, 명령, 프로세스, 반복등의 요소를 캡슐화하는 방법을 배웠다는 것은, 바람직한 객체지향 개발을 지원하고, 바람직한 객체지향 개발이 궁극적으로 추구하는 유연하고 높은 확장성에 유지보수하기 쉬운 높은 품질을 어플리케이션을 개발하는데 기여하게 될것이다. 처음에 나는 알고리즘을 캡슐화하는 것에 대하여, 굳이 디자인패턴이 아니더라도 나도 모르게 프.. 더보기
객체지향의 탄생-Iterator Pattern 이터레이터 패턴(Iterator) 1. 나랑 친한 동네 형님도 프로그래머셨다. 그래서 늘상 피곤해하셨다. 형님은 대한민국의 팍팍한 업무여건에 고개를 절래절래 흔들고 최근에 아이 옷가게를 새로 차렸다. 그 모진 업무여건에서 벗어나 나만의 사업을 하시는 형님 얼굴을 최근에 봤더니 그렇게 행복해 보일수가 없었다. 형님의 사업이 대박나기를 바랐다. 그래도 나는 아직 프로그래머로 자부심을 가지는 이유는 우리가 하는 일이 사람을 행복하게 해주기 때문이다. 대표적인 예가 인터넷 쇼핑몰이다. 예전같으면 차타거나 발품팔고 직접 상점에가서 물건을 샀는데 지금은 클릭한번으로 물건 사면 집앞으로 배송된다. 이점은 이동하면서 생기는 사람과 지구의 에너지 소모를 절약하는데 기여한다. 특히 이것은 약자에게 힘이 되어주었을 것이다... 더보기
객체지향의 탄생-Template Method Pattern 템플릿 메소드 패턴(Template Method) 1. 나는 군대를 전산 장비 정비 하사로 오랫동안 보냈다. 나는 어느 초대형 전산 장비를 정비하는 특기를 수행했다. 만약 5분이상 장비가 멈추면 대한민국 안보가 구멍날 정도로 중요한 장비였다. 처음 내가맡은 역할은 조수였다. 팔뚝에 굵은 근육이 인상적인 젊은 중사/상사 또는 나이 지긋한 잔뼈가 굵으신 원사/준위들이 대형 장비를 어두운 구석에서 정비하면 나는 옆에서 트러블 라이트라는 전구를 들고 고참이 능숙하게 정비하는 모습을 보좌했다. 때로 고참들은 인상을 쓰고 입에 담배를 피면서 멋지게 장비를 정비하곤 했는데 그때 담배연기 참는 모습을 내색하지 않고 조용히 보좌해야 했던 시절은 지금에 와서 아늑한 추억이 되었다. 군대시절 정비사로 일하면서 많이 느끼고 .. 더보기
객체지향의 탄생-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층 계단을 힘들게 올라갈때면, 막강한 만능공구 하나만 챙겨서 쓰면 얼마나 좋을까 하며 투덜거리곤 했다. 맥가이버 칼은 공구를 좋아하는 남자들의 작은 로망이다. 맥가이버 칼 하나로 갖가지 공구를 쓴다. 오버로딩은 맥.. 더보기
객체지향의 탄생-인터페이스 인터페이스는 산의 맑은 공기와 같다. 등산할때는 맑은 공기를 마실 수 있지만, 맑은 공기의 고마움은 쉽게 인식하지 못한다. 등산을 마치고 도시속에 찌든 공기를 마실때 기침을 콜록일 때야 고마움을 깨닫곤 한다. 인터페이스는 산의 맑은 공기처럼 늘 객체지향 개발자와 함께 하는 존재이며, 무의식중에 쓰는 존재이지만, 인터페이스의 유익함과 고마움을 쉽게 인식하지 못한다. 꼬마때 삼국지를 열심히 읽었다. 삼국지는 꼬마가 꿈꾸는 갖가지 상상력을 소설로 모두 담았다. 넓은 대륙, 영웅 호걸 장수들의 무협 소설 같은 활약, 천재 모사들의 머리 싸움, 영웅들의 사랑까지~ 담을 수 있는 '판타지' 는 모두 담은 소설이니 영웅들을 동경하며 열심히 읽었다. 나는 천재 모사들의 머리 싸움을 좋아했다. 제갈량이나 조조가 전장을 .. 더보기
객체지향의 탄생-객체지향 보물지도의 해석 꼬마때 동화나 만화, 고전 소설들을 읽다보면 보물이 꼭꼭 숨겨져 있다. 보물을 찾기 위한 험난한 스토리가 이어진다. 진부하면서도 손을 놓을 수 없는 스토리 전개에 푹 빠졌다. 어린 나이에 나도 보물을 찾아 어려운 집안에 도움을 줘야겠다는 상상도 했다. 그러나 지금 생각해보니 보물찾기 소설은 어쩌면 한탕주의를 부추기는 스토리이기도 하다. 중학교때는 무협소설, 무협영화에 빠져지냈다. 유명한 황비홍, 동방불패 시리즈를 보며 인간의 한계를 저렇게 뛰어넘을수도 있겠구나 싶었다. 무협에 대해 좀더 알고 싶어 여러 무협소설을 읽었다. 무협소설도 읽어보니 공통점이 있다. 하나의 무공비급을 얻기위해 각 인물이나 문파들이 기를쓰고 싸운다는 것이다. 무공비급들도 하나의 책에 불과할 것인데, 무공비급만 얻으면 천하무적이 되는.. 더보기
객체지향의탄생-생성자 노을이 질 때 나는 편안한 주황색 색감에 취해 잠시 몽롱해지곤한다. 몽롱함은 마치 소주에 취한 것처럼 달고 약간은 쓸쓸하다. 1,2년에 한번씩 동해바다 아침 노을을 볼 때 나는 진하게 취한 느낌이 든다. 어쩌다 한번 마시는 고급 양주를 마시는 느낌이다. 아침 노을은 어쩌다 한번 비싼 값을 치루고 보는 광경이라 고급 양주와 같다. 작은 동그란 노른자 태양이 서서히 뜰때면 나는 새로운 생명의 에너지를 받는 착각에 빠진다. 저녁에는 저 에너지 넘치는 태양이 흐릿하게 사라질것이다. 삶과 죽음은 순환한다. 돌아가신 외할머니의 구순 생신때 찍은 사진을 보았다. 외할머니와 외할머니의 증손주 다섯살 내 조카가 생일케익을 앞에두고 똑같이 촛불을 끄고 있었다. 나는 그 사진을 보며 생각 많고 감수성 풍부한 시인처럼 뭉클해.. 더보기
객체지향의 탄생-메소드 문득 CSI 요원들의 섬세한 관찰력과 증거로부터 단서를 추출하는 능력을 생각했다. 그들은 객체지향 전문가가 되더라도 훌륭한 설계자, 개발자가 되었을 것이 분명하다. CSI 요원이 발품팔고 깊이있게 관찰하여 얻은 소중한 증거물들은 범죄를 해결하기 위한 중요한 '속성'들이다. 그러나 속성만 확보만 해서는 수사의 아무런 진전이 없다. 증거물(속성)로부터 범죄와 관련된 데이터를 추출해야한다. 데이터를 추출하는 '방법'을 알아야 한다. CSI 에서는 요원들이 채취한 증거물을 분석하기 위한 다양한 첨단장비들이 등장한다. 지문 분석기, DNA 분석기, 범죄 현장을 3차원으로 재구성하여 시뮬레이션 하는 소프트웨어도 있다. 이 첨단장비들은 모두 채취한 증거를 분석하기 위한 '방법' 들이다. 어느 객체든 어느 일이든 그 .. 더보기
객체지향의탄생-속성 유독 주변을 잘 관찰하고 기억하는 친구들이 있다. 친구들은 한번 갔던 길이나 거리의 간판을 보고 바로 기억하여, 필요할때 편리하게 써먹곤 한다. 나는 친구들이 부러웠다. 나는 10번을 가보기전에는 갔던 길이나 거리의 간판을 봐도 기억하지 못했다. 친구들은 타고난 관찰자 들이다. 타고난 관찰자들을 책에서도 드라마에서도 보곤한다. 자전거 여행이란 수필 책을 읽으면 보이는 자연과 음식과 사람에 대해 어떻게 이렇게 새밀하게 관찰하고 묘사했는지 탄성을 지를때가 있다. 보리밭, 대나무숲에 대해 몇페이지에 걸쳐 관찰하고 묘사하기도 한다. 쑥된장국의 냄새를 "먹이 피라미드 밑바닥의 아린 냄새"라고 묘사하는 부분을 읽을때면, 이 책의 저자가 세상을 보는 관찰력과 통찰력이 경지에 이르렀구나 하며 감탄하곤 한다. 내가 즐겨.. 더보기