본문 바로가기

수필 객체지향

조금 더 객체지향적인 개발단계 - 수필 객체지향 옛날 간단한 사다리 게임 짜면서 취미생활 삼아 프로그램을 짜곤 했다. 그때는 단순히 언어 문법에 대한 지식과 로직 구현 능력만 있으면 프로그램을 구현할 수 있다고 생각했다. 그래서 프로그래머를 하면, 내가 하고 재미있어 하는 일 편하게 하면서 일하겠구나 라고 생각하곤 했다. 하지만 막상 프로그래머가 되어 보니, 프로그램 짜는 일은, 정확하게 말해 하나의 프로젝트는, 인간의 사회 생활 갖가지 요소가 동원되어 뭉친 복잡한 실타래와 같았다. 고도의 업무분석 능력, 커뮤니케이션 능력, 일정 관리 능력, 인력 관리 능력이 요구되었다. 어느 고참 개발자의 얘기를 들어보면 고급 관리자가 되면 정치싸움에도 능숙해야 한다고 했다. 나도 실제로 프로젝트를 경험해보니 실제 프로그램 구현 능력도 중요했지만, 업무담당자와의 커.. 더보기
아키텍처와 아키텍트 - 수필 객체지향 아키텍처란 단어는 산처럼 웅장하게 느껴지지만, 산속의 구름처럼 애매모호하다. 다른 객체지향 관련 용어처럼 어려운 용어로 우리를 불편하게 한다. 아키텍처의 시야는 ‘신’과 같다는 단서로부터 출발한다. 신은 위에서 아래를 내려다 보며 사람과 사물을 관찰한다. 그럴듯한 용어로 top-down view 라고 부른다. 아키텍처는 신이 사람사는 세상을 정밀하게 관찰한 결과물과 비슷하다. 아키텍처는 top-down view 관점에서 시스템의 구성 요소와 구성 요소들 사이의 연결관계를 분석한 기술적인 명세서이며 공학적인 청사진이다. 나는 나중에 내가 만들 아키텍처를 훌륭하게 만들기 위해 신의 눈을 갖기를 바랐다. 아키텍트란 단어는 고도의 전문가라는 이미지를 풍기지만, 이름만 화려하지 않을까라는 느낌도 준적이 있다. 이.. 더보기
객체와 컴포넌트 - 수필 객체지향 객체란 실체로 존재하는 대상/개념이며 고유명사이다. 객체는 세상에 유일하게 존재하는 모든 것들~이라고 정의했다. 나는 객체만 알면 되는 줄 알았다. 그런데 컴포넌트란 용어와 기술에 대해서도 알아야 했다. ‘CBD(컴포넌트 기반 개발) 개발 방법론’을 공부할때 나는 컴포넌트와 객체의 차이에 대해 햇갈려 했다. 객체와 컴포넌트에는 비슷한 개념이 들어있다. 오히려 객체와 컴포넌트에 비슷한 개념이 녹아서 햇갈려 했던 것 같다. 하지만 이 둘의 차이점도 명확하다. 컴포넌트의 정의는 독립적으로 배포되는 단위로 조립/교환이 가능한 응집도가 높은 소프트웨어 산출물이라고 한다. 컴포넌트는 좀 더 명확한 물리적인 결과물이다. 컴포넌트가 사람이 눈으로 확인할 수 있는 결과물이라면 객체는 사람이 눈으로 확인할 수 없는 작은 .. 더보기
UML로 객체지향 세계를 그리다. - 수필 객체지향 사람은 소통한다. 살기위해 소통하고 얻기위해 소통한다. 사람들이 얼굴보고 소통할때는 말뿐만 아니라 손짓, 발짓, 표정 그리고 알수 없는 미묘한 감성까지 힙을 합쳐 소통 한다. 그래서 사람들이 얼굴보고 소통할때는 자신이 전하고자 하는 뜻을 대부분 누수없이 전달한다. 그러나 과학 기술 영역에서는 소통의 어긋남이 조금이라도 발생하면 전체가 어긋날 수 있다. 섬세한 기록이 요구되는 과학 기술 영역에서 사람의 언어는 불완전한 소통 수단으로 전락한다. 그래서 과학 기술 영역에서는 사람의 불완전한 언어를 보완할 간결하고 명확한 언어를 쓴다. 수학은 간결함과 명확함으로 상징되는 과학의 언어이다. 수학은 인류의 발전을 우주로 이끌어 올린 로켓 엔진과 같은 힘을 주었다. 사실 수학은 나에게 어려움의 상징이긴 하지만 결국 .. 더보기
상속과 구성 - 수필 객체지향 시골의 아이들은 어렸을때 물가에서 놀면서 형들이 약간만 알려주면, 저절로 헤엄치기를 배운다. 누가 정석으로 가르쳐 준것도 아닌데 잘도 헤엄친다. 상속은 시골 아이들의 야생 헤엄치기와 같다. 객체지향에 대해 약간의 지식만 익히고 사용할 줄 알면 상속을 습관처럼 저절로 쓰기 때문이다. 아이들의 야생 헤엄치기는 물가에서 놀기는 좋다. 그러나 수영 전문가가 볼때는 비효율적인 동작의 조합으로 조잡해 보인다. 만약 아이들이 물가에서 놀기위해 헤엄치기를 한다면 모르지만 좀더 전문적으로 수영을 하고 수영 대회도 나가고 짝사랑하는 영희에게 멋진 폼을 보여줄라면 지금의 헤엄치기는 문제가 있다. 상속은 복잡하지 않은 프로그램에서 대충 사용하기는 좋다. 그러나 객체지향 전문가가 볼때 상속을 무작정 사용하면 비효율적인 코딩이 .. 더보기
캡슐화와 정보은닉 - 수필 객체지향 캡슐화란 용어는 용어의 뜻을 이해하는것도 두루뭉실하지만 그 쓰임새도 애매모호하다. 나는 몇년 경력이 되어서도 캡슐화란, 객체의 속성을 private로 만들어 이것을 get/set 메소드로 호출하는 방법으로만 이해했다. 그런데 저 객체지향 캡슐화 이론과는 다르게 실제 프로그래밍에서는 객체의 속성을 public으로 만들어 직접 호출하는것과의 차이점을 느끼지 못했다. 오히려 private로 선언하면 클라이언트에서 저 속성을 가져올때 get/set을 쓰느라 코드 보기가 더 지저분해서 좋게 생각하지 않았다. [삽화] 캡슐화는 객체지향 개발의 중요한 장점중에 하나이지만, 나는 상속과 구성 폴리모피즘의 장점은 이해하면서 유독 캡슐화의 장점을 이해하지 못했다. 캡슐화의 정의와 캡슐화가 왜 좋은지 따로 공부해야 했다. .. 더보기
오버로딩과 오버라이딩 - 수필 객체지향 오버로딩은 마치 맥가이버칼의 부속품과 같다. 같은 몸통(메소드 이름)에서 꺼내는 위치만 바꾸면(인자값) 다양한 기능이 발견된다. 오버로딩은 같은 이름의 메소드의 인자값(=시그네처)를 다르게 주어 개별적으로 개발자 입맛에 맞게 호출할 수 있는 방법이다. 내 경험으로 오버로딩은 생성자 호출에서 특히 많이 쓰인다. 처음 객체를 생성할때 오버로딩된 다양한 생성자들의 용도를 파악하여, 써야 되는 상황에 알맞게 해당 객체를 사용할 수 있다. - 생성자 오버로딩 예제-병아리 부화 클래스 public static void main( String[] args ) throws Exception { ….. Chick chick1 = new Chick(); // 1 Chick chick2 = new Chick(“먹이”); /.. 더보기
인터페이스 - 수필 객체지향 인터페이스(Interface)는 산의 맑은 공기와 같다. 등산할때는 항상 맑은 공기를 마실 수 있지만, 맑은 공기의 고마움은 쉽게 인식하지 못한다. 등산을 마치고 도시속에 찌든 공기를 마시고 기침을 콜록일 때서야 그 고마움을 깨닫곤 한다. 인터페이스는 바다의 해삼과 같다. 해삼은 인간에게 가장 이로운 영양을 주는 해산물로, 해녀가 깊은 바닷속에 잠수해야 겨우 몇마리 건져올리는 해산물이다. 인터페이스는 산의 맑은 공기처럼 늘 객체지향 개발자와 함께 하는 존재이며, 무의식중에 쓰이는 존재이지만, 인터페이스의 고마움을 쉽게 인식하지 못한다. 개발을 마치고 어지럽기만한 코드를 디버깅 하다가 인터페이스 형식으로 리팩토링 해서야 그 고마움을 깨닫곤 한다. 인터페이스는 바다의 해삼처럼 객체지향 요소 중에서 개발자에게.. 더보기
객체지향을 이롭게 하는 5가지 특징, 수필 객체지향 + 객체지향 생태계 우리는 객체지향 자연 속에 있다. 객체는 나무이며 애플리케이션은 숲이다. 낮은 해충(결합도)과 높은 영양(응집도)으로 유명한 객체지향 지역에 나무를 심고 울창한 숲을 기대한다. 땅은 객체지향 그 자체이다. 클래스 씨앗을 땅에 심는다. 씨앗이 생성자 통해 발아되어 객체가 되었다. 나무의 형태가 갖춰졌다. 속성은 줄기와 같다. 속성은 나무를 지탱하고 그 존재를 지키고 세상에 알리는 나무의 중심이다. 메소드는 가지와 잎과 꽃과 열매와 같다. 울창한 가지와 잎으로서 나무 자신과 산과 지구와 생물을 지켜주면서 자신의 존재를 뽐낸다. 이 나무들이 모이고 커져서 모든 생물을 이롭게 하는 거대하고 우람한 숲이 될 것이었다. 객체는 나무와 같아야하고 어플리케이션은 숲과 같아야 한다. + 객체지향을 이.. 더보기
속성, 메소드, 생성자 - 수필객체지향 + 속성 속성을 찾는 일은, 보이지는 않지만 생물이 생존하는데 꼭 필요한 적혈구등의 요소를 현미경으로 관찰하는 생물학자와 같아야 한다. 속성은 객체 고유의 특징을 정의 할 수 있는 단어로 드러낸 것이다. 예를 들어 자동차에는 ‘움직일때의 빠르기’라는 속성을 속에 품고 있다. 만약 자동차를 객체로 모델링 한다면 기본적으로 ‘움직일때의 빠르기’라는 속성이 스며들어 있기 때문에 이 속성을 정의 할 수 있는 단어로 밖으로 드러내야 할 것이다. ‘움직일때의 빠르기’는 ‘속도’ 라는 단어로 정의 된다. 그래서 자동차 객체 모델링을 통해 ‘속도’라는 속성이 문서나 프로그램을 통해 드러나게 될 것이다. 객체의 속성을 찾는 일은 객체 안에 숨겨진 고유 특징을 찾아내는 일이기 때문에, 그 객체에 대해 잘 알고 있어야 한다.. 더보기
프로그래머, 장인 또는 고된 현실에 찌든 노동자, 수필 객체지향 우리가 프로그래머로 일하는 이유는 두가지이다. 프로그래밍이 좋아서 프로그래머가 되었다. 어떻게든 먹고 살려다보니 밥벌이 삼아 프로그래머가 되었다. 전자는 순수한 열정이 느껴지고, 후자는 치열한 생존 전쟁의 이미지가 풍긴다. 어렸을 때 빌게이츠와 애플의 스티브잡스등의 IT영웅들을 잡지에서 보던 나는, 세상의 프로그래머는 단지 프로그래밍이 좋아서 프로그래머가 되었을 것이라고, 프로그래머는 뭔가 순수하고 특별한 세계를 가진 사람들일 것이라고 기대했다. 나는 존재하지 않는 이상계에 대한 꿈을 꾸었다. 우리나라는 프로그래밍이 좋아서 프로그래머가 되는 순수한 열정을 지켜주진 않는다. 우리나라 프로그래머는 밤12시 넘어서 일하고, 새벽에도 일하고, 주말에도 일하며, 명절에도 일하고, 결혼기념일에도 일하며, 심지어는 .. 더보기
블로그와 트위터, 디자인패턴과 리팩토링, 수필 객체지향 블로그처럼 네티즌을 위한 훌륭한 도구가 또 하나 있다. 트위터라는 도구이다. 예전에 블로그는 '자기 생각과 주장을, 자유롭게 글이나 사진으로 편집해서 올리고, 댓글, 트랙백, RSS, 태그등의 기법으로 쉽게 전파하는 도구' 라고 정의한 적이 있다. 트위터는 '블로그 처럼 자기 생각과 주장을, 짧은 글로 올리고, 친구(following, followers) 맺기, RT(친구의 글을 내가 전파함), 댓글등의 기법으로 쉽게 전파하는 도구'라고 정의해 본다. 블로그와 트위터의 정의로부터 이 둘의 공통점과 차이점을 찾아 보았다. 블로그는 편한대로 쓰기도 하지만 대부분은, 글을 쓰기전에 미리 이런식으로 글을 구성하겠다고 생각한다. 블로그는 글쓰기 전에 또는 글을 쓰면서 많은 노력을 요구한다. 트위터는 편한대로 쓴다.. 더보기
객체지향과 관계형 데이터베이스의 조화, 수필 객체지향 처음 봤는데도 왠지 끌리는 사람이 있고 물건이 있고 기술이 있다. 나는 처음 프로그래밍을 배울때부터 객체지향 관련 기술을 좋아했다. 아마도 철학같은 깊이가 느껴지는 기술이라 좋아했던 것 같다. 객체지향을 배우면 어떤 요구사항이라도 고스란히 내 프로그램으로 옮길수 있을 것 같았다. 그러나 공부와 실전은 달랐다. 나는 객체지향 기술 공부와 실전 개발을 병행하면서 종종 알기 힘든 괴리감을 느꼈다. 처음에는 단순한 웹코딩을 했기 때문에 객체지향을 써먹을 일이 없었다. 그때 프로그래머는 머리를 쓰는 지식 노동자가 아니고 단순 복사/붙여넣기 노동자 일수도 있구나라는 생각을 했다. 드디어 기회가 왔다. 회사 업무에 쓰일 프레임워크를 개발해 보라는 지시였다. 그때 그동안 배운 객체지향, 디자인패턴, 리팩토링 기술을 총.. 더보기