본문 바로가기

기타/객체지향의 탄생(2013)

객체지향의 탄생, 마무리 객체지향의 탄생, 마무리 내가 이 글들을 쓰게 된 계기는 소프트웨어 개발자가 나에게 천직이고 괜찮은 직업 같은데 우리나라에서는 워낙 고생하게 되니, 대안이 없을까 라고 생각하다가 쓰게 되었다. 어떠한 환경이라도 개발자 스스로 개발 환경 개선에 노력해야 하고 그 중심은 좋은 코드를 만들어 개발한 본인이나 다른 개발자가 유지보수하기 쉽도록 하는것이 쾌적하고 즐거운 개발의 출발이라고 생각했다. 객체지향은 코드를 유연하고 확장하기 쉽게 잘 만들 수 있는 모든 방법의 모음이라고 말해도 과언이 아니다. 그래서 나는 객체지향 개발에 파고들기로 했다. 1. 기본편은 객체지향이 무엇이고, 객체지향의 요소는 무엇이 있는지, 객체지향적으로 잘 개발하기 위해서는 어떻게 해야 하는지, 객체지향적으로 잘 개발하면 어떤 효과가 있.. 더보기
객체지향의 탄생-우리나라 현실에 맞는 코드 품질 향상 대안 우리나라 현실에 맞는 코드 품질 향상 대안 최근 4개의 글에서 나는 눈에 보이는 기능에만 신경쓰고 눈에 보이지 않는 코드 품질은 무시하는 우리나라 IT 현장을 얘기했다. 이런 모습이 과거 일본이 미국과 맞짱 뜰수 있었던 막강 함대항공력의 괴멸과 다르지 않다고 얘기했다. 그렇다고 나는 어쩔수 없이 비용을 적게 들이는 등의 우리나라 IT 현실을 무시하고 무조건 원칙적으로 돈많은 미국 선진국처럼 프로젝트를 수행해야 한다는 것은 아니다. 나도 막상 과장급의 중간 관리자가 되다 보니 이런 글을 쓴적도 있다. "윗 사람의 입장 일을 하면 일정은 정해져 있다. 일이 너무 많아 원하는 날까지 맞추기가 힘든때가 가끔 있다. 사실 가끔이 아니라 자주 있다. 대부분 주어진 일정대비 해야할 일이 많은 경우가 대부분이다. 나는.. 더보기
객체지향의 탄생-필리핀해 해전에서 배우는 연구 개발의 중요성 필리핀 해 해전에서 배우는 연구 개발의 중요성 1942년 6월의 미드웨이 해전은 전쟁의 균형추를 미국에 기울이게 한 의미있는 사건이었다. 마치 눈에 보이는 기능에만 신경쓰고 눈에 보이지 않는 품질은 신경쓰지 않는 우리나라 IT 환경처럼, 과거 미일간 벌어진 미드웨이 해전에서 일본의 공격일변도 기능 중시 사상 때문에 항모의 안전을 무시, 일본 항모 4척이 쉽게 침몰당하는 대패를 일본이 겪은 이후 전쟁의 방향은 미국쪽으로 흐르기 시작했다. 2년 후 1944년 6월에 벌어진 필리핀 해 해전은 일본의 항공력과 해군력이 회복 불능으로 피해를 입어 일본해군의 등뼈(back bone)를 부러트린 전투로 불린다. 일본은 미드웨이 해전 이후 지속적인 항공력 해군력이 소모되는 가운데서도 미국과 한판 결전을 벌이기 위해 항.. 더보기
객체지향의 탄생-미드웨이 해전에서 배우는 코드 품질의 중요성 미드웨이 해전에서 배우는 코드 품질의 중요성 원고중에 이 내용을 예전에 블로그에 먼저 올려서 좋은 반응을 얻은 적 있습니다.원고 순서가 이 즈음 배치가 되어 있어 링크 거는 것으로 대신 올립니다. 더보기
객체지향의 탄생-프로젝트의 우선 순위에서 코드 품질이 최하위인 이유 4,5년차 자바 개발자였을때 나는 어떤 수수께끼를 궁금해했다. SI 할때는 왜 객체지향적으로 유연하고 확장성 높고 재사용이 가능한 개발이 안될까. 밤늦게 야근 하고 집에가는 어느날, 그때 어느 그림이 그려졌다. [고민을 해결해 주는 컴포넌트 그림] 이 그림으로 모든 수수께끼가 해결했다. 왼쪽과 오른쪽의 컴포넌트는 같은 기능을 수행하는 컴포넌트이다. 예를 들어 우리가 자주쓰는 컴포넌트에는 네트워크 모듈이 있다. 저 컴포넌트 둘이 네트워크 모듈이라고 한다면 저 왼쪽과 오른쪽의 컴포넌트는 인풋과 아웃풋이 똑같은, 인터페이스가 똑같은 컴포넌트이다. 상단의 동그란 작은 원이 다른 코드에서 접속하는 인터페이스가 된다. 둘 컴포넌트의 차이는 왼쪽의 컴포넌트 안은 스파게티 면처럼 내부가 얽히고 섥혔고, 오른쪽의 컴포넌.. 더보기
객체지향의 탄생-프로젝트의 풍선효과 프로젝트의 풍선효과, 개발자가 고생하는 3가지 이유 공장의 작업장은 아이들이 수족관에서 고기들을 보는것처럼 보이는 그대로 수족관의 상황을 알 수 있는것과 같다. 작업장의 관리자가 윗층 자신의 사무실에서 작업장을 내려다보면 공장이 제대로 돌아가는 지 알 수 있다. 공장의 작업장은 관리자가 작업장이 돌아가는 내부 정보를 비교적 정확하게 파악한다. 노동자들도 자신들의 작업장 상태를 잘 알것이다. 관리자가 비용을 아끼며 강하게(빡씨게) 굴리기에는 공장의 상태가 오픈되어 있고 압박을 했을때 오히려 성과가 떨어지는 것을 고스란히 알것이다. 그래서 공장의 작업장은 투자 비용과 성과가 공평하게 계산되고 쓰인다. 우리의 프로젝트 룸은 식당의 주방과 같다. 관리자는 식당의 손님과 같다. 손님은 식당안이 어떻게 움직이는지 .. 더보기
객체지향의 탄생-장인 정신이 깃든 프로그램 현장의 고민거리 장인 정신이 깃든 프로그램 지구는 넓고 사람은 목적지를 향해 이동한다. 사람은 넓은 지구를 빠르고 편하게 이동하기 위해 도구를 만들었다. 현대의 이동 도구는 자전거, 자동차, 비행기등이 있다. 자전거 보다는 자동차가 편하고 빠르다. 자동차 보다는 비행기가 편하고 빠르다. 현대의 이동 도구, 교통 수단인 자전거, 자동차, 비행기중에 자동차가 자전거보다 빠른 이유는 좀더 높은 수준의 기술을 사용했기 때문이고, 자동차가 비행기보다 느린 이유는 좀더 낮은 수준의 기술을 사용했기 때문이다. 높은 수준의 기술을 사용했기 때문에 자전거보다 자동차가 배우기 어렵고, 자동차보다 비행기가 배우기 어렵다. 교통수단의 예를 통해, 높은 수준의 기술일수록 배우기는 어렵지만 잘 배우면 기술의 혜택을 마음껏 누린다.. 더보기
객체지향의 탄생-올드스쿨/뉴 스쿨 프로그래밍 나는 20대 후반 어느날 비보이 배틀 영상을 TV로 본적이 있다. 하늘을 날라다니는 비보이들의 몸짓에서, 나는 인간이 신체의 자유를 얻고 날라다니는 모습이 바로 저런 모습이구나 하며 팬이 된적이 있다. 비보이 세계도 무술 처럼 여러 분파가 존재하는데, 나누는 분야중에 크게 올드스쿨과 뉴스쿨이라는 두가지 구분으로 분류한다. 올드스쿨은 정확한 설명은 아니지만, 최초에 비보이들의 무브가 탄생할때의 그 모습과 정신을 간직하며 그때의 무브와 기본에 충실한다는 의미와 비슷하다. 한마디로 옛것의 모습과 정신을 지키며 기본에 충실한다는 것이다. 반면에 뉴스쿨은 비보이들이 새롭게 창의적으로 개발한 새롭고 발전된 무브를 개발하고 닦는다고 말하는것과 비슷하다. 올드스쿨 뉴스쿨 하며 생각하다보니 문득 프로그래밍도 올드스쿨과 .. 더보기
객체지향의 탄생-디자인패턴과 리팩토링 블로그처럼 네티즌을 위한 훌륭한 도구가 또 하나 있다. 트위터라는 도구이다. 블로그는 '자기 생각과 주장을, 자유롭게 글이나 사진으로 편집해서 올리고, 댓글, 트랙백, RSS, 태그등의 기법으로 쉽게 전파하는 도구' 이다. 트위터는 '블로그 처럼 자기 생각과 주장을, 짧은 글로 올리고, 친구(following, followers) 맺기, RT(친구의 글을 내가 전파함), 댓글등의 기법으로 쉽게 전파하는 도구'라고 정의한다. 블로그와 트위터의 정의로부터 이 둘의 공통점과 차이점을 찾아 보았다. 블로그는 편한대로 쓰기도 하지만 대부분은, 글을 쓰기전에 미리 이런식으로 글을 구성하겠다고 생각한다. 블로그는 글쓰기 전에 또는 글을 쓰면서 많은 노력을 요구한다. 트위터는 편한대로 쓴다. 편한대로 쓰면서 친구(fo.. 더보기
객체지향의 탄생-객체지향과 관계형 데이터베이스 객체지향과 관계형 데이터베이스의 조화 처음 봤는데도 왠지 끌리는 사람이 있고 물건이 있고 기술이 있다. 나는 처음 프로그래밍을 배울때부터 객체지향 관련 기술을 좋아했다. 아마도 철학같은 깊이가 느껴지는 기술이라 좋아했던 것 같다. 객체지향을 배우면 어떤 요구사항이라도 고스란히 내 프로그램으로 옮길수 있을 것 같았다. 그러나 공부와 실전은 달랐다. 나는 객체지향 기술 공부와 실전 개발을 병행하면서 종종 알기 힘든 괴리감을 느꼈다. 처음에는 단순한 웹코딩을 했기 때문에 객체지향을 써먹을 일이 없었다. 그때 프로그래머는 머리를 쓰는 지식 노동자가 아니고 단순 복사/붙여넣기 노동자 일수도 있구나라는 생각을 했다. 드디어 기회가 왔다. 회사 업무에 쓰일 프레임워크를 개발해 보라는 지시였다. 그때 그동안 배운 객체.. 더보기
객체지향의 탄생- 객체와 컴포넌트, 아키첵처와 아키텍트 객체와 컴포넌트 객체란 실체로 존재하는 대상/개념이며 고유명사이다. 객체는 세상에 유일하게 존재하는 모든 것들~이라고 정의했다. 나는 객체만 알면 되는 줄 알았다. 그런데 컴포넌트란 용어와 기술에 대해서도 알아야 했다. 'CBD(컴포넌트 기반 개발) 개발 방법론'을 공부할때 나는 컴포넌트와 객체의 차이에 대해 햇갈렸다. 객체와 컴포넌트에는 비슷한 개념이 들어있다. 오히려 객체와 컴포넌트에 비슷한 개념이 녹아서 햇갈려 했던 것 같다. 하지만 이 둘의 차이점도 명확하다. 컴포넌트의 정의는 독립적으로 배포되는 단위로 조립/교환이 가능한 응집도가 높은 소프트웨어 산출물이라고 한다. 컴포넌트는 좀 더 명확한 물리적인 결과물이다. 컴포넌트가 사람이 눈으로 확인할 수 있는 결과물이라면 객체는 사람이 눈으로 확인할 수.. 더보기
객체지향의 탄생- 디자인패턴과 프레임워크, 그리고 라이브러리 디자인패턴과 프레임워크, 그리고 라이브러리 디자인패턴(Design Pattern)이 무엇이고 프레임워크(Framework)가 무엇이고 라이브러리(Library)도 있는데, 이 둘의 차이가 무엇이냐는 질문은 객체지향 개발이 무엇이냐는 질문처럼 나를 바보로 만든다. 하지만 명색이 제대로 된 객체지향 개발자를 꿈꾼다면, 이 셋의 실체를 알아내는 것이 두렵다고 해서 이 들의 추적을 중단해서는 안될것이다. 먼저 디자인패턴부터 그 정의의 실체를 추적했다. 디자인패턴 같은 경우 대략의 뜻은 알고있고 써먹을줄도 알지만 명확한 정의에 대해서는 생각이 잘 떠오르지 않았다. 그럴수록 좀더 생각을 하면서 단어의 뜻을 따라가 보았다. 디자인이란 말은 설계란 뜻이다. 패턴은 일종의 정형화된 해결 방법이다. 이 두 단어를 연결하여.. 더보기
객체지향의 탄생- 객체지향과 추상화 객체지향과 추상화 생각의 탄생이라는 책을 재미있게 읽었다. 이 책은 인간의 사고를 관찰, 추상화, 패턴인식, 유추, 형상화 등의 여러 사고 능력으로 나눠 이런 사고력을 키우는 방법과 결국 이 모든 인간의 사고를 통합하여 잘 활용하는 방법의 중요성을 설명한 유익한 인문 책이었다. 객체지향 방법론과 구조적 프로그래밍 방법론의 차이는 생각의 접근 방법에 차이가 있지 않을까 라고 생각한 적이 있다. 구조적 프로그래밍은 각 기능의 모듈화를 잘해야 하므로 분석과 형상화를 잘해야 하지 않을까. 그리고 객체지향은 일단 세상의 요소를 객체로 추출해야 하므로 세상을 잘 관찰하고 관찰한 것들을 추상화 할 줄 아는 사고력이 필요하다고 생각한 적이 있다. 객체지향 개발이 어려운 개발자가 있으면 반대로 익숙한 개발자들도 있다. .. 더보기
객체지향의 탄생-객체지향과 절자지향 객체지향과 절차지향 세상의 모든 사물을 프로그래밍 한다면 속성과 행동 두가지 요소로 표현한다. 세상의 모든 사물을 오직 두가지 요소로만 표현하는 원리는 마치 0과 1만으로 모든 수를 다룰 수 있는 2진법처럼 명쾌하고 간결하게 느껴진다. 절차지향이던 객체지향이던 프로그래밍 대상의 구성 요소를 오직 속성과 행동으로 간결하게 구분지어 개발할 수 있다는 사실을 이해하면, 우리가 프로그래밍 기술을 너무 복잡하고 어렵게 생각하고 있는 것이 아닌지 되돌아 보게 된다. 프로그래밍에서는 세상의 모든 사물을 속성과 행동으로 분석한다. 프로그래밍 세계관(패러다임)에 따라서 속성과 행동을 절차지향에서는 데이터와 함수로, 객체지향에서는 속성과 메소드로 불린다. 절차지향은 농민들이 공동으로 농장을 경영하는 것과 같다. 농민은 문.. 더보기
객체지향의 탄생-응집도와 결합도 현실 이 책의 '기본'편을 통해 객체지향의 탄생 배경 지식, 객체지향의 기본 요소, 객체지향을 잘 활용하는 방법을 이해했다. '패턴'편 통해 객체지향 기법을 디자인 패턴을 통해 실용적으로 활용하는 법을 배웠다. '현실'편, 우리는 객체지향과 디자인 패턴 이론으로 지식을 무장하더라도 현장에서 일하다보면 일과 기술과 관련한 다양한 궁금증이 생긴다. 그래서 우리 개발자를 고민하게 만든다. 우리나라의 프로젝트 환경은 납기일 준수가 빠듯하게 잡혀 있어 업무강도가 강하다. 이상적인 개발 환경을 꿈꾸는 신입이라면 우리나라의 지나친 업무강도에 크게 당황한다. 납기일 압박이 워낙 심하다보니 시간이 없어 객체지향 기법을 쓰지 못하는 상황에 더 크게 당황한다. 이런 상황에 어떻게 대처해야 하는가에 대한 답은 나도 제시하지 .. 더보기
객체지향의 탄생- 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분이상 장비가 멈추면 대한민국 안보가 구멍날 정도로 중요한 장비였다. 처음 내가맡은 역할은 조수였다. 팔뚝에 굵은 근육이 인상적인 젊은 중사/상사 또는 나이 지긋한 잔뼈가 굵으신 원사/준위들이 대형 장비를 어두운 구석에서 정비하면 나는 옆에서 트러블 라이트라는 전구를 들고 고참이 능숙하게 정비하는 모습을 보좌했다. 때로 고참들은 인상을 쓰고 입에 담배를 피면서 멋지게 장비를 정비하곤 했는데 그때 담배연기 참는 모습을 내색하지 않고 조용히 보좌해야 했던 시절은 지금에 와서 아늑한 추억이 되었다. 군대시절 정비사로 일하면서 많이 느끼고 .. 더보기
객체지향의 탄생-Commander Pattern 커맨드 패턴(Command) 1. 어렸을때 나의 머리는 온통 삼국지의 광활한 무대였다. 제갈량의 전략을 음미하고 조자룡의 무예를 상상하며 유비가 말년의 고집으로 이릉에서 육손에게 대패하여 죽음을 맞게 된 안타까움과 헌제와 정적에게 지독하게 잔인했던 조조에 대한 분노 그리고 당대의 영웅호걸들을 녹인 초선 같은 미녀들에 대한 상상까지 집에 누우면 삼국지에 대한 온갖 상상의 무대를 천장에 그려보았고, 책을 읽으면 읽었던 삼국지를 또 읽었고, 컴퓨터를 키면 삼국지 게임에 매달리곤 했다. 지금에 와서 삼국지를 생각하면 미처 생각하지 않았던 존재이지만 나름 중요한 역할을 수행하는 사람들이 있었는데 바로 '사자'라고 부른 사람들이다. 사자는 주군의 전령을 받고 동맹군이나 적군에게 달려가 전령을 전달하는 역할을 했던 .. 더보기
객체지향의 탄생-Observer Pattern 옵저버 패턴(Observer) 1. 이제 좀더 다양한 객체 구조의 세계로 나아간다. 사람은 혼자 살수 없는 존재이다. 사람은 늘 주변의 소식에 관심을 갖고, 나라의 소식에 관심을 갖고, 세상 모든곳에서 벌어지는 소식에 관심을 갖는다. 그 소식에 따라 사람의 생각과 행동이 바뀌기도 한다. 사람은 언제나 무언가에 관심을 갖고 그 관심에 따라 자신의 생각과 행동을 결정한다. 그러므로 사람이 관심갖는 모든것에 어떻게 소식을 주고 받을지의 문제는 인류의 역사가 시작되면서 먹고 자는것만큼 중요한 화두가 되었다. 손짓발짓에서 언어가 탄생되고 문자가 탄생되어 소식을 주고 받기 시작했다. 동양에서는 봉화로 소식을 전하기도 했다. 말이나 낙타도 이용하여 소식을 전하기도 했다. 산업혁명이후 모르스 부호로 소식을 전하고 전화.. 더보기
객체지향의 탄생-Strategy Pattern 패턴 디자인 패턴은 '객체와 객체간의 관계에서 반복적으로 발견되는 좋은 원칙을 이끌어 내어 패턴으로 만들어낸 것' 이라고 정의했다. 객체지향의 기법이 가장 고도화 되고 추상화 되고 패턴화 된 결과물이 디자인 패턴이다. 디자인 패턴은 객체지향의 최고 고수, 저명한 학자들이 발견하고 패턴화 했다. 우리가 디자인 패턴을 안다는 것은 객체지향 최고의 추상화되고 패턴화된 지혜를 손 쉽게 아는 것과 같다. 디자인패턴은 '특정한 객체지향 개발 영역에서 자주 발생되는 설계 및 구현 문제에 대하여, 유연하고 확장성 높은 객체지향적 설계 패턴으로 해결하는 방법들의 모음' 이다. 디자인패턴 정의에 모음이란 단어를 포함했듯이 디자인패턴 안에 많은 패턴들이 존재한다. 많은 종류의 디자인패턴은 종류별로 비슷한 특성을 보이기도 한.. 더보기
객체지향의 탄생-객체지향 글쓰기 객체지향 글쓰기 프로그램 개발자가 가장 싫어하는 일중 하나는 문서 작성이다. 나도 문서 작성을 밤새 야근 하는 것처럼 싫어한다. 개발자들이 문서 작성을 싫어하는 결정적인 이유는 개발자 문서 작성이 '단순반복 노가다성'이기 때문일 것이다. 화면 캡춰나 기능에 대한 가이드 라인 설명 문구는 지극히 단순 작업으로 개발자를 지치게 하는 요소 중의 하나이다. 그리고 개발자와 글쓰기라는 단어 자체가 북극과 남극처럼 멀리 떨어진 이미지로 느껴진다. 개발자 중 글쓰기를 좋아하는 사람은 많지 않다. 이유는 아마도 프로그램 개발은 이공계 영역이고 글쓰기는 인문계 영역이라는 극단의 차이가 이 둘은 별개의 사고영역이라 생각하면서 내가 잘하기 힘들고, 내가 싫어하는 영역이라고 처음부터 단정짓는 것이 아닐까 싶다. 그러나 개발자.. 더보기
객체지향의 탄생-객체지향 설계를 위한 조언 지금까지 객체지향의 다양한 요소들을 살펴보면서 객체지향이 좋은 프로그램을 만드는데 어떻게 기여하는지 살펴보았다. 한마디로 좋은 프로그래밍 중에 하나는 객체지향 기술이 온전히 녹아든 프로그래밍이다. 그러나 객체지향 기술은 고도의 사색이 필요한 철학적인 요소가 있어 객체지향 기술을 제대로 쓰기 위해서는 많은 공부를 통해 그 깊은 뜻을 머리로 몸으로 이해해야 한다. 고급 와인을 만들기 위해 몇십년, 몇백년을 묵히듯 객체지향 공부도 많은 노력이 필요하다. 다행히 객체지향을 창시하고 발전시킨 선각자들은 객체지향 기술을 이용하여 바람직하게 설계하는 몇개의 디자인 원칙과 더 나아가 디자인패턴과 리팩토링이라는 훌륭한 지름길을 닦아놓았다. 우리는 지름길을 따라가면 빠르게 좋은 기법을 익힐 수 있다. 변하는 것을 캡슐화한.. 더보기
객체지향의 탄생-객체지향적인 개발 단계 기타 객체지향 이야기거리 객체지향적인 개발 단계 옛날 간단한 사다리 게임 짜면서 취미생활 삼아 프로그램을 짜곤 했다. 그때는 단순히 언어 문법에 대한 지식과 로직 구현 능력만 있으면 프로그램을 구현할 수 있다고 생각했다. 그래서 프로그래머를 하면, 내가 하고 재미있어 하는 일 편하게 하면서 일하겠구나 라고 생각하곤 했다. 하지만 막상 프로그래머가 되어 보니, 프로그램 짜는 일은, 하나의 프로젝트는, 인류 문명의 갖가지 요소를 적용하여 뭉친 복잡한 실타래와 같았다. 고도의 업무분석 능력, 커뮤니케이션 능력, 일정 관리 능력, 인력 관리 능력이 요구되었다. 어느 고참 개발자의 얘기를 들어보면 고급 관리자가 되면 정치싸움에도 능숙해야 한다고 했다. 나도 프로젝트를 경험해보니 실제 프로그램 구현 능력도 중요했지.. 더보기