본문 바로가기

객체지향

책 관련 유익한 사이트, 재미있는 비하인드 스토리 소개 (한번 읽으면 두번 깨닫는 객체지향 프로그래밍) 안녕하세요.~ 책을 쓰면서 체계적으로 하나의 주제를 가지고 예제 코드를 작성하려고 했습니다. 제가 작성한 코드는 2차 세계대전 비행기 게임이란 컨셉입니다. 이 코드는 github에 올렸습니다. 최근 일터에서 git을 처음 써봤는데 SVN하고는 많이 달라서 놀랬고 기능이 생각보다 훨씬 파워넘치고 유익해서 놀랐습니다. 일터에서 git을 안 덕분에 public 계정으로 책의 예제 코드를 올릴 수 있었습니다. 또한 책과 관련된 비하인드 스토리도 소개합니다. 저자와 출판사 기획자 부장님의 비하인드 스토리가 흥미진진 한것 같아 같이 공유합니다. 재밌게 읽어주세요.~ 책의 예제 코드와 책 관련 유익한 정보는 여기서, https://github.com/mckdh/OT_OOP_Book 이 책의 배경에는 형의권이라는 무술.. 더보기
'한번 읽으면 두번 깨닫는 객체지향' 책이 정식으로 출간 되었습니다.~ 제 책 '한번 읽으면 두번 깨닫는 객체지향' 책이 정식으로 출간 되었습니다.~작년 4월말 계약되서 2월 중하순에 출간되니 10개월이 걸린것 같습니다. 소감을 한단어로 표현하자면 '고통' 입니다. 어떤 종류의 고통이냐면 아마도 마라토너의 길고 긴 지루한 고통과 비슷하지 않을까 싶습니다.일단 제 책의 설명을 공식 책 소개와 추천사로 대신합니다. 추천사를 두분께 부탁드렸는데, 제 책을 읽고 괜찮으면 추천사 써주시라고 했는데 다행이 흔쾌히 써주셨습니다. * 책 소개 프로그래머라면 피해갈 수 없는 ‘객체지향’의 개념과 원리 기초부터 활용까지 객체지향을 넓고 깊게 바라보는 새로운 솔루션IT 분야에 종사한다면 누구나 들어보았을 객체지향 프로그래밍. C#과 JAVA로부터 KOTLIN과 마이크로서비스에 이르기까지 객체지.. 더보기
객체지향 생각의 도구6-한두깨 객체지향 프로그래밍 미리보기 한번 읽고 두번 깨닫는 객체지향 프로그래밍 미리보기 책이 2019년 1월말에 출간 예정인데 블로그 독자들에게 미리보기를 제공합니다. 보시고 댓글과 질문 많이 남겨주시면 감사합니다. +.+ 7) 패턴인식객체지향의 관계의 의존성은 낮추고, 기능의 집중도는 높이는 구체적인 방법은 수많은 개발 경험을 통해 지속적으로 개선되었다. 특히, 객체지향은 객체 하나하나를 잘 설계하는 것을 넘어 이 객체간의 관계를 잘 연결 짓는 기술이 필요 했다. 그래서 객체와 객체를 잘 연결 짓는 기법이 발달하게 되었다. 예를 들어 상속도 객체와 객체를 연결 짓는 기법이다. 그러나 모든 상황을 상속으로 해결하기에는 상속의 단점도 존재 한다. 그래서 객체간의 관계를 다양하게 연결하는 기법이 발달하게 되었다. 그리고 이 객체와 객체를 잘 .. 더보기
객체지향 생각의 도구5-한두깨 객체지향 프로그래밍 미리보기 한번 읽고 두번 깨닫는 객체지향 프로그래밍 미리보기 책이 2019년 1월말에 출간 예정인데 블로그 독자들에게 미리보기를 제공합니다. 보시고 댓글과 질문 많이 남겨주시면 감사합니다. +.+ 6) 추상화우리는 앞의 객체지향 사고의 과정 2단계에서 ‘우리는 우리가 인식한 많은 데이터 중에 의미 있는 데이터만 가져오고 나머지는 버리고, 우리는 의미 있는 데이터들을 모아 더 큰 단위의 의미 있는 정보로 만들 수 있다.’고 했다. 이 사고력이 ‘추상화’라고 했다. ※ 우리는 인식한 많은 데이터 중에 의미 있는 데이터만 가져오고 나머지는 버린다. 추상화는 문제 해결에 필요한 부분만 취하고 불필요한 부분은 제거하여 대상을 간결하고 이해하기 쉽게 만드는 사고 과정이다. ‘나는 내가 관찰하고 생각한 것 중에서 가장 중요한.. 더보기
객체지향 생각의 도구4-한두깨 객체지향 프로그래밍 미리보기 한번 읽고 두번 깨닫는 객체지향 프로그래밍 미리보기 책이 2019년 1월말에 출간 예정인데 블로그 독자들에게 미리보기를 제공합니다. 보시고 댓글과 질문 많이 남겨주시면 감사합니다. +.+ 5) 관찰 : 사물이나 현상을 주의하여 자세히 살펴보는 것. 모든 지식은 관찰에서부터 시작된다. 우리는 세계를 정밀하게 관찰할 수 있어야 한다. 그래야만 행동의 패턴들을 구분해내고, 패턴들로부터 원리들을 추출해내고, 사물들이 가진 특징에서 유사성을 이끌어내고, 행위모형을 창출해낼수 있으며, 효과적으로 혁신할 수 있다. 관찰은 보이는 것을 표현하는게 아니라 어떤 것을 보이게 하는 것이다. 발견은 모든 사람들이 보는 것을 보고 아무도 생각하지 않는 것을 생각하는 것으로 이루어져 있다. 진정한 창조자는 가장 평범하고 비루한 .. 더보기
객체지향 생각의 도구3-한두깨 객체지향 프로그래밍 미리보기 한번 읽고 두번 깨닫는 객체지향 프로그래밍 미리보기 책이 2019년 1월말에 출간 예정인데 블로그 독자들에게 미리보기를 제공합니다. 보시고 댓글과 질문 많이 남겨주시면 감사합니다. +.+ 4) 관찰 → 추상화 → 패턴인식이제 관계의 의존성은 낮추고 기능의 집중도는 높인다는 객체지향의 장점을 살리려면 우리는 어떻게 접근해야 할지 알아본다. 예를 들어 2차 세계 대전 비행기 시뮬레이터를 객체지향 프로그래밍으로 구현하기로 했으면, 비행기를 어떻게 객체지향 프로그래밍으로 풀어 가는지 같이 살펴본다. ① 비행기란 사물을 살펴보자. 우리는 사물을 보면 먼저 어떻게 생겼는지 관찰부터 한다. 비행기를 객체지향 프로그래밍으로 구현 하기 위해서, 우리는 비행기를 먼저 관찰한다. 비행기를 앞에 두고 관찰하면서 우리는 객체지.. 더보기
객체지향 생각의 도구2-한두깨 객체지향 프로그래밍 미리보기 한번 읽고 두번 깨닫는 객체지향 프로그래밍 미리보기 책이 2019년 1월말에 출간 예정인데 블로그 독자들에게 미리보기를 제공합니다. 보시고 댓글과 질문 많이 남겨주시면 감사합니다. +.+ 3) 객체지향 언어의 사상과 장점이렇게 절차지향 언어의 단점을 개선하고 더 나은 장점을 추구하는 객체지향 언어가 탄생했다. 1장에서 우리는 객체지향이 낮은 관계의 의존성과 높은 기능의 집중도를 통해 유연한 소프트웨어를 지향한다고 했다. 이것이 객체지향의 사상이고 장점이다. 여기서 좀더 객체지향이 어떻게 이런 사상과 장점을 지원하는지 배경을 좀 더 살펴보자.객체지향은 프로그램을 처리-판단-반복(변수선언, if, for문)-함수호출의 명령어들의 연결이라고 보는 과거 시각에서 벗어나 여러 개의 독립된 단위, 객체(사물)들의 .. 더보기
객체지향 생각의 도구1-한두깨 객체지향 프로그래밍 미리보기 한번 읽고 두번 깨닫는 객체지향 프로그래밍 미리보기 책이 2019년 1월말에 출간 예정인데 블로그 독자들에게 미리보기를 제공합니다. 보시고 댓글과 질문 많이 남겨주시면 감사합니다. +.+ 2) 절차지향 언어의 사상과 단점객체지향 이전의 언어는 주로 절차지향 언어였다. 그렇다면 객체지향 언어는 절자치향 언어의 단점을 개선하여, 더 나은 장점을 보여주기 위해 치열하게 고민한 사상이 언어 속에 담겨 있을 것이다. 그래서 객체지향의 사상과 장점을 설명하기 전에 배경 지식으로 절차지향 언어의 사상과 단점을 소개한다.절차지향 언어는 처리-판단-반복(변수선언, if, for문)의 기초 문법, 함수등의 명령어를 활용하여 위에서 아래로 절차적으로 수행하는 언어이다. 또한 함수를 이용하여 로직의 모듈화를 할수 있다. 함수.. 더보기
객체지향 생각의 도구-한두깨 객체지향 프로그래밍 미리보기 한번 읽고 두번 깨닫는 객체지향 프로그래밍 미리보기 책이 2019년 1월말에 출간 예정인데 블로그 독자들에게 미리보기를 제공합니다. 보시고 댓글과 질문 많이 남겨주시면 감사합니다. +.+ 1.1 정의와 목표의 전환5) 객체지향의 정의와 목표.. 생략 .. 1.2 고정관념의 전환.. 생략 .. 2. 객체지향을 돕는 도구이 장은 기술적인 내용보다는 인간 사고의 종류인 관찰, 추상화, 패턴 인식 등을 다룬다. 이 사고들은 객체지향 등의 개발 방법론에서 쓰인다. 개발 방법론은 자신의 장점을 극대화하기 위해 지향하는 고유 특징(=사상)이 있다. 이런 사상에는 관찰, 추상화, 패턴 인식 같은 사고력이 쓰인다. 2장에서는 이 사고력들이 객체지향 설계, 개발에서 어떻게 쓰이는지 이야기한다.기계어, 어셈블리어, 절차지향.. 더보기
정의와 목표의 전환3-한두깨 객체지향 프로그래밍 미리보기 한번 읽고 두번 깨닫는 객체지향 프로그래밍 미리보기 책이 2019년 1월말에 출간 예정인데 블로그 독자들에게 미리보기를 제공합니다. 보시고 댓글과 질문 많이 남겨주시면 감사합니다. +.+ 4) 관계의 의존성은 낮게 기능의 집중도는 높게여기까지 읽었다면 이렇게 생각할 수 있겠다. 기능 구현에만 집착하면 유연성이 훼손 될 수도 있고, 유연성이 어떤 건지도 대략 알겠다. 그렇다면 유연한 소프트웨어를 개발하려면 구체적으로 어떻게 해야 할까? 다행히 좋은 소프트웨어를 만드는 기준이 되는 원칙을 간결하게 한 문장, 두 가지 권고사항으로 정리할 수 있다. ‘관계의 의존성은 낮게, 기능의 집중도는 높게’ 이것은 ‘응집도는 높게, 결합도는 낮게’와 같은 뜻이다.’ 정보처리 기사 이론을 공부할 때, 유독 객체지향이란 단어.. 더보기
정의와 목표의 전환2-한두깨 객체지향 프로그래밍 미리보기 한번 읽고 두번 깨닫는 객체지향 프로그래밍 미리보기 책이 2019년 1월말에 출간 예정인데 블로그 독자들에게 미리보기를 제공합니다. 보시고 댓글과 질문 많이 남겨주시면 감사합니다. +.+ 3) 유연한 소프트웨어란 코드 품질 향상이다. (1) 유연한 소프트웨어는 코드 품질이 좋다는 의미소프트웨어를 개발할 때, 우리는 먼저 고객이 원하는 기능을 정확히 구현해야 한다. 그리고 여기에 하나 더 추가해야 한다. 바로 ‘유연한 소프트웨어 개발’이다. 우리는 고객이 원하는 기능을 정확하고 유연하게 구현해야 한다. ※ 고객이 원하는 좋은 소프트웨어 = 고객이 원하는 기능의 정확한 구현 + 유연한 구성 당장 기능 구현도 어려운데, 이런 유연한 가치까지 신경 써서 개발하라니, 더 어렵게 느껴질 것이다. 그러나 유연한 소프.. 더보기
정의와 목표의 전환-한두깨 객체지향 프로그래밍 미리보기 한번 읽고 두번 깨닫는 객체지향 프로그래밍 미리보기 책이 2019년 1월말에 출간 예정인데 블로그 독자들에게 미리보기를 제공합니다.보시고 댓글과 질문 많이 남겨주시면 감사합니다. +.+ 1. 1장 발상의 전환 시작은 ‘발상의 전환’이다. 현장에서 우리는 주로 객체지향 언어를 사용한다. 서버는 역시 객체지향 언어인 JAVA를 주로 사용한다. 안드로이드도 JAVA를 쓰거나, 안드로이드 최신 언어 Kotlin은 함수형 프로그래밍과 객체지향을 함께 쓴다. 아이폰 개발은 Objective-C를 사용한다. 아이폰 최신 언어인 Swift도 함수형 프로그래밍과 함께 객체지향이 바탕이다. 한 마디로 여전히 객체지향이 주류다. 그런데 주변 개발자를 보면, 객체지향의 정의가 무엇인지, 어떤 목표를 지향하는지 잘 모르는 경우.. 더보기
책이 곧 나옵니다. (한번 읽으면 두번 깨닫는 객체지향 프로그래밍) * 올해 4월에 객체지향 주제로 출판 계약이 되고 시간이 흘렀습니다. 출판사는 많은 돈을 투자하고, 독자들은 많은 돈을 들여 구입해야하는 책이니 만큼, 출판사의 요구사항이 높았습니다. 그래서 지금 원고와 옛날 원고와 비교하면 99%가 바꼈습니다. ㅎㅎ (바로 전에 올린 내용도 교정되고 다시 쓰면서 개선되었습니다.) 바꼈다는 표현보다는 개선했다는 표현이 맞을것 같습니다. 책은 1월말에 출고 될것 같습니다. 그 전후에 블로그에 객체지향 관련 유용한 정보를 올리겠습니다. 아래는 최근 페이스북을 통해 책 소개와 표지 투표내용을 공유 하니 그냥 재미로 봐주세요. 책 표지는 거의 1번으로 되었습니다. * 출판사 소개글이 책도 사연이 많다. 함께 운동하는 형님 중에 14년차 경력의 현직 프로그래머로 활동하는 분이 계.. 더보기
기능 구현 중심 개발의 심각한 문제 기능 구현 중심 개발의 문제-2에 이어서.. 기능 구현에 집착하다보면 다른 소프트웨어의 중요한 가치를 놓치게 된다. 는 일부 틀린 말이다. 중요한 가치를 놓치는 것이 아니고 더 나아가 해를 입힌다. 우리는 고객의 기능을 성실히 구현하여 소프트웨어의 완성에 노력했는데 이 노력이 소프트웨어의 다른 뭔가를 훼손한다고요? 소프트웨어를 만들 때 지향해야할 큰 가치는 유연한 소프트웨어다. 소프트웨어가 유연하다는 것은 소프트웨어가 재사용하기 쉽고, 수정하기 쉽고, 확장하기 쉽고, 버그잡기 쉽고 가독성이 좋아 유지보수와 추가 개발하기 편하다는 의미이다. 우리는 고객이 원하는 기능을 개발 하면서 이런 가치를 함께 추구해야 한다. 우리는 당장의 기능 구현도 어려운데, 이런 가치까지 같이 신경써서 개발하라니 더 어렵게 느껴.. 더보기
기능 구현 중심 개발의 문제-2 기능 구현 중심 개발의 문제-1에 이어서.. ‘다른 요소의 무시’, 여러 가지를 같이 관리해야 하는데 한가지만 치우치면 다른 요소가 무시당하는 부작용이 발생한다. 예를 들면 우리나라는 70~90년대 경제 발전 중심으로 치우쳐 발전했다. 덕분에 경제는 발전했으나, 민주주의, 복지, 빈부격차, 문화, 인권은 더 안좋게 퇴보하기도 하는 등 부작용이 발생했다. ‘낙수효과’란 용어가 있다. ‘고소득층의 소득 증대가 소비 및 투자 확대로 이어져 궁극적으로 저소득층의 소득도 증가하게 되는 효과’를 가르킨다. 그래서 고소득층, 대기업을 육성하듯이 경제, 복지, 정치, 문화, 인권 중에 경제를 우선으로 역량을 쏟아부으면 다른 분야도 낙수효과로 저절로 좋아질까. 좋아지는 분야도 있지만, 처음부터 같이 관심을 가져야 하는 .. 더보기
기능 구현 중심 개발의 문제-1 개발자 대부분 기능 구현 중심인 이유에 이어서.. 우리중 일부는 여기까지 읽고 의문이 들 것 같다. 고객이 요구한 기능 구현에 집중하는 것이 뭐가 문제지, 당연히 가장 우선적으로 신경써야 할 것 아닌가? 고객이 원하는 기능을 누락 왜곡 없이, 빠른시간내 구현하는 것은 당연하다. 객체지향적으로 개발해도 이것은 기본적으로 지켜야할 의무/임무 이다. 문제는 좋은 소프트웨어를 만들기 위해 관심을 갖고 의식해서 신경써야 할 덕목이 있다. 우리는 보통 이런 부분을 무시하면서 기능 구현만 집착한다. ‘매몰’, 개발자가 기능 구현만 집착할 경우 발생되는 부작용은 매몰현상이다. 한가지만 뚫어지게 신경쓰다 보니, 다른 중요한 것들을 보지 못하는 상황이다. 예를 들어 공군의 비행기, 전투기나 정찰기중에 두명의 조종사가 타도.. 더보기
관계형 데이터베이스 모델링/튜닝과 객체지향 이 글은 뭔가 해답을 구하고 설명하기 보다는 제 스스로 의문을 갖고 답을 찾아보기 위해 메모장에 끄적이듯 적습니다.객체지향은 프로그래밍을 잘 짜게 해주는 방법론, 기법 입니다. 코드를 유연하게 만들어 주기 때문이지요. 유연하다는 말은 수정하기 쉽고 확장하기 쉽고 재 사용하기 쉽다는 뜻을 가지고 있습니다.관계형 데이터베이스 모델링/튜닝(줄여서 RDB)는 관계형 데이터베이스 모델링을 잘 설계하고 SQL을 효율적으로 튜닝하는 방법론, 기법이라고 정리하겠습니다. 이 뜻 역시 모델을 유연하게, 수정하기 쉽고 확장하기 쉽고 이해하기 쉽게 해줄 것입니다. SQL 튜닝은 여기에다가 속도가 더 중요한 요소 입니다.관계형 모델보다 객체지향이 나중에 나왔습니다. 지금 객체지향은 자바, C#등의 프로그래밍 언어로 소프트웨어를.. 더보기
객체지향의 탄생-우리나라 현실에 맞는 코드 품질 향상 대안 우리나라 현실에 맞는 코드 품질 향상 대안 최근 4개의 글에서 나는 눈에 보이는 기능에만 신경쓰고 눈에 보이지 않는 코드 품질은 무시하는 우리나라 IT 현장을 얘기했다. 이런 모습이 과거 일본이 미국과 맞짱 뜰수 있었던 막강 함대항공력의 괴멸과 다르지 않다고 얘기했다. 그렇다고 나는 어쩔수 없이 비용을 적게 들이는 등의 우리나라 IT 현실을 무시하고 무조건 원칙적으로 돈많은 미국 선진국처럼 프로젝트를 수행해야 한다는 것은 아니다. 나도 막상 과장급의 중간 관리자가 되다 보니 이런 글을 쓴적도 있다. "윗 사람의 입장 일을 하면 일정은 정해져 있다. 일이 너무 많아 원하는 날까지 맞추기가 힘든때가 가끔 있다. 사실 가끔이 아니라 자주 있다. 대부분 주어진 일정대비 해야할 일이 많은 경우가 대부분이다. 나는.. 더보기
객체지향의 탄생-필리핀해 해전에서 배우는 연구 개발의 중요성 필리핀 해 해전에서 배우는 연구 개발의 중요성 1942년 6월의 미드웨이 해전은 전쟁의 균형추를 미국에 기울이게 한 의미있는 사건이었다. 마치 눈에 보이는 기능에만 신경쓰고 눈에 보이지 않는 품질은 신경쓰지 않는 우리나라 IT 환경처럼, 과거 미일간 벌어진 미드웨이 해전에서 일본의 공격일변도 기능 중시 사상 때문에 항모의 안전을 무시, 일본 항모 4척이 쉽게 침몰당하는 대패를 일본이 겪은 이후 전쟁의 방향은 미국쪽으로 흐르기 시작했다. 2년 후 1944년 6월에 벌어진 필리핀 해 해전은 일본의 항공력과 해군력이 회복 불능으로 피해를 입어 일본해군의 등뼈(back bone)를 부러트린 전투로 불린다. 일본은 미드웨이 해전 이후 지속적인 항공력 해군력이 소모되는 가운데서도 미국과 한판 결전을 벌이기 위해 항.. 더보기
객체지향의 탄생-미드웨이 해전에서 배우는 코드 품질의 중요성 미드웨이 해전에서 배우는 코드 품질의 중요성 원고중에 이 내용을 예전에 블로그에 먼저 올려서 좋은 반응을 얻은 적 있습니다.원고 순서가 이 즈음 배치가 되어 있어 링크 거는 것으로 대신 올립니다. 더보기
객체지향의 탄생-프로젝트의 우선 순위에서 코드 품질이 최하위인 이유 4,5년차 자바 개발자였을때 나는 어떤 수수께끼를 궁금해했다. SI 할때는 왜 객체지향적으로 유연하고 확장성 높고 재사용이 가능한 개발이 안될까. 밤늦게 야근 하고 집에가는 어느날, 그때 어느 그림이 그려졌다. [고민을 해결해 주는 컴포넌트 그림] 이 그림으로 모든 수수께끼가 해결했다. 왼쪽과 오른쪽의 컴포넌트는 같은 기능을 수행하는 컴포넌트이다. 예를 들어 우리가 자주쓰는 컴포넌트에는 네트워크 모듈이 있다. 저 컴포넌트 둘이 네트워크 모듈이라고 한다면 저 왼쪽과 오른쪽의 컴포넌트는 인풋과 아웃풋이 똑같은, 인터페이스가 똑같은 컴포넌트이다. 상단의 동그란 작은 원이 다른 코드에서 접속하는 인터페이스가 된다. 둘 컴포넌트의 차이는 왼쪽의 컴포넌트 안은 스파게티 면처럼 내부가 얽히고 섥혔고, 오른쪽의 컴포넌.. 더보기
객체지향의 탄생-프로젝트의 풍선효과 프로젝트의 풍선효과, 개발자가 고생하는 3가지 이유 공장의 작업장은 아이들이 수족관에서 고기들을 보는것처럼 보이는 그대로 수족관의 상황을 알 수 있는것과 같다. 작업장의 관리자가 윗층 자신의 사무실에서 작업장을 내려다보면 공장이 제대로 돌아가는 지 알 수 있다. 공장의 작업장은 관리자가 작업장이 돌아가는 내부 정보를 비교적 정확하게 파악한다. 노동자들도 자신들의 작업장 상태를 잘 알것이다. 관리자가 비용을 아끼며 강하게(빡씨게) 굴리기에는 공장의 상태가 오픈되어 있고 압박을 했을때 오히려 성과가 떨어지는 것을 고스란히 알것이다. 그래서 공장의 작업장은 투자 비용과 성과가 공평하게 계산되고 쓰인다. 우리의 프로젝트 룸은 식당의 주방과 같다. 관리자는 식당의 손님과 같다. 손님은 식당안이 어떻게 움직이는지 .. 더보기
객체지향의 탄생-장인 정신이 깃든 프로그램 현장의 고민거리 장인 정신이 깃든 프로그램 지구는 넓고 사람은 목적지를 향해 이동한다. 사람은 넓은 지구를 빠르고 편하게 이동하기 위해 도구를 만들었다. 현대의 이동 도구는 자전거, 자동차, 비행기등이 있다. 자전거 보다는 자동차가 편하고 빠르다. 자동차 보다는 비행기가 편하고 빠르다. 현대의 이동 도구, 교통 수단인 자전거, 자동차, 비행기중에 자동차가 자전거보다 빠른 이유는 좀더 높은 수준의 기술을 사용했기 때문이고, 자동차가 비행기보다 느린 이유는 좀더 낮은 수준의 기술을 사용했기 때문이다. 높은 수준의 기술을 사용했기 때문에 자전거보다 자동차가 배우기 어렵고, 자동차보다 비행기가 배우기 어렵다. 교통수단의 예를 통해, 높은 수준의 기술일수록 배우기는 어렵지만 잘 배우면 기술의 혜택을 마음껏 누린다.. 더보기
객체지향의 탄생-올드스쿨/뉴 스쿨 프로그래밍 나는 20대 후반 어느날 비보이 배틀 영상을 TV로 본적이 있다. 하늘을 날라다니는 비보이들의 몸짓에서, 나는 인간이 신체의 자유를 얻고 날라다니는 모습이 바로 저런 모습이구나 하며 팬이 된적이 있다. 비보이 세계도 무술 처럼 여러 분파가 존재하는데, 나누는 분야중에 크게 올드스쿨과 뉴스쿨이라는 두가지 구분으로 분류한다. 올드스쿨은 정확한 설명은 아니지만, 최초에 비보이들의 무브가 탄생할때의 그 모습과 정신을 간직하며 그때의 무브와 기본에 충실한다는 의미와 비슷하다. 한마디로 옛것의 모습과 정신을 지키며 기본에 충실한다는 것이다. 반면에 뉴스쿨은 비보이들이 새롭게 창의적으로 개발한 새롭고 발전된 무브를 개발하고 닦는다고 말하는것과 비슷하다. 올드스쿨 뉴스쿨 하며 생각하다보니 문득 프로그래밍도 올드스쿨과 .. 더보기
객체지향의 탄생-디자인패턴과 리팩토링 블로그처럼 네티즌을 위한 훌륭한 도구가 또 하나 있다. 트위터라는 도구이다. 블로그는 '자기 생각과 주장을, 자유롭게 글이나 사진으로 편집해서 올리고, 댓글, 트랙백, RSS, 태그등의 기법으로 쉽게 전파하는 도구' 이다. 트위터는 '블로그 처럼 자기 생각과 주장을, 짧은 글로 올리고, 친구(following, followers) 맺기, RT(친구의 글을 내가 전파함), 댓글등의 기법으로 쉽게 전파하는 도구'라고 정의한다. 블로그와 트위터의 정의로부터 이 둘의 공통점과 차이점을 찾아 보았다. 블로그는 편한대로 쓰기도 하지만 대부분은, 글을 쓰기전에 미리 이런식으로 글을 구성하겠다고 생각한다. 블로그는 글쓰기 전에 또는 글을 쓰면서 많은 노력을 요구한다. 트위터는 편한대로 쓴다. 편한대로 쓰면서 친구(fo.. 더보기
객체지향의 탄생-객체지향과 관계형 데이터베이스 객체지향과 관계형 데이터베이스의 조화 처음 봤는데도 왠지 끌리는 사람이 있고 물건이 있고 기술이 있다. 나는 처음 프로그래밍을 배울때부터 객체지향 관련 기술을 좋아했다. 아마도 철학같은 깊이가 느껴지는 기술이라 좋아했던 것 같다. 객체지향을 배우면 어떤 요구사항이라도 고스란히 내 프로그램으로 옮길수 있을 것 같았다. 그러나 공부와 실전은 달랐다. 나는 객체지향 기술 공부와 실전 개발을 병행하면서 종종 알기 힘든 괴리감을 느꼈다. 처음에는 단순한 웹코딩을 했기 때문에 객체지향을 써먹을 일이 없었다. 그때 프로그래머는 머리를 쓰는 지식 노동자가 아니고 단순 복사/붙여넣기 노동자 일수도 있구나라는 생각을 했다. 드디어 기회가 왔다. 회사 업무에 쓰일 프레임워크를 개발해 보라는 지시였다. 그때 그동안 배운 객체.. 더보기
객체지향의 탄생- 디자인패턴과 프레임워크, 그리고 라이브러리 디자인패턴과 프레임워크, 그리고 라이브러리 디자인패턴(Design Pattern)이 무엇이고 프레임워크(Framework)가 무엇이고 라이브러리(Library)도 있는데, 이 둘의 차이가 무엇이냐는 질문은 객체지향 개발이 무엇이냐는 질문처럼 나를 바보로 만든다. 하지만 명색이 제대로 된 객체지향 개발자를 꿈꾼다면, 이 셋의 실체를 알아내는 것이 두렵다고 해서 이 들의 추적을 중단해서는 안될것이다. 먼저 디자인패턴부터 그 정의의 실체를 추적했다. 디자인패턴 같은 경우 대략의 뜻은 알고있고 써먹을줄도 알지만 명확한 정의에 대해서는 생각이 잘 떠오르지 않았다. 그럴수록 좀더 생각을 하면서 단어의 뜻을 따라가 보았다. 디자인이란 말은 설계란 뜻이다. 패턴은 일종의 정형화된 해결 방법이다. 이 두 단어를 연결하여.. 더보기
객체지향의 탄생- 객체지향과 추상화 객체지향과 추상화 생각의 탄생이라는 책을 재미있게 읽었다. 이 책은 인간의 사고를 관찰, 추상화, 패턴인식, 유추, 형상화 등의 여러 사고 능력으로 나눠 이런 사고력을 키우는 방법과 결국 이 모든 인간의 사고를 통합하여 잘 활용하는 방법의 중요성을 설명한 유익한 인문 책이었다. 객체지향 방법론과 구조적 프로그래밍 방법론의 차이는 생각의 접근 방법에 차이가 있지 않을까 라고 생각한 적이 있다. 구조적 프로그래밍은 각 기능의 모듈화를 잘해야 하므로 분석과 형상화를 잘해야 하지 않을까. 그리고 객체지향은 일단 세상의 요소를 객체로 추출해야 하므로 세상을 잘 관찰하고 관찰한 것들을 추상화 할 줄 아는 사고력이 필요하다고 생각한 적이 있다. 객체지향 개발이 어려운 개발자가 있으면 반대로 익숙한 개발자들도 있다. .. 더보기
객체지향의 탄생-객체지향과 절자지향 객체지향과 절차지향 세상의 모든 사물을 프로그래밍 한다면 속성과 행동 두가지 요소로 표현한다. 세상의 모든 사물을 오직 두가지 요소로만 표현하는 원리는 마치 0과 1만으로 모든 수를 다룰 수 있는 2진법처럼 명쾌하고 간결하게 느껴진다. 절차지향이던 객체지향이던 프로그래밍 대상의 구성 요소를 오직 속성과 행동으로 간결하게 구분지어 개발할 수 있다는 사실을 이해하면, 우리가 프로그래밍 기술을 너무 복잡하고 어렵게 생각하고 있는 것이 아닌지 되돌아 보게 된다. 프로그래밍에서는 세상의 모든 사물을 속성과 행동으로 분석한다. 프로그래밍 세계관(패러다임)에 따라서 속성과 행동을 절차지향에서는 데이터와 함수로, 객체지향에서는 속성과 메소드로 불린다. 절차지향은 농민들이 공동으로 농장을 경영하는 것과 같다. 농민은 문.. 더보기
객체지향의 탄생-응집도와 결합도 현실 이 책의 '기본'편을 통해 객체지향의 탄생 배경 지식, 객체지향의 기본 요소, 객체지향을 잘 활용하는 방법을 이해했다. '패턴'편 통해 객체지향 기법을 디자인 패턴을 통해 실용적으로 활용하는 법을 배웠다. '현실'편, 우리는 객체지향과 디자인 패턴 이론으로 지식을 무장하더라도 현장에서 일하다보면 일과 기술과 관련한 다양한 궁금증이 생긴다. 그래서 우리 개발자를 고민하게 만든다. 우리나라의 프로젝트 환경은 납기일 준수가 빠듯하게 잡혀 있어 업무강도가 강하다. 이상적인 개발 환경을 꿈꾸는 신입이라면 우리나라의 지나친 업무강도에 크게 당황한다. 납기일 압박이 워낙 심하다보니 시간이 없어 객체지향 기법을 쓰지 못하는 상황에 더 크게 당황한다. 이런 상황에 어떻게 대처해야 하는가에 대한 답은 나도 제시하지 .. 더보기