본문 바로가기

객체지향

수필 객체지향, OCP(open-closed principle, 개방-폐쇄의 원리) 사람 사는 세상은 복잡다단하다. 예를들어 마른하늘에 정말로 날벼락이 칠수도 있다. 어플리케이션은 사람 사는 세상을 고스란히 옮겨놓았다. 틀림없이 어플리케이션도 마른하늘에 날벼락이 치는 변화무쌍한 요구사항이 발생할것이다. 요구사항에는 기존 개발된 기능의 변경 건이 있거나 새로운 기능의 확장의 경우가 있다. 이런 요구사항이 생길때 객체지향 설계자는 어플리케이션을 어떻게 변경하거나 확장할지 고민한다. 기존의 소스를 변경하는 방법이 있다. 이 경우는 가장 직관적으로 해결하는 방법일 것이다. 하지만 위험하다. 기름바닥에 라이타불을 던져서 불폭탄을 만드는 광경을 영화에서 본적이 있는가. 기존의 소스를 변경하는 방법은 기름바닥이라는 높은 결합도에 라이타불을 던지는 것과 마찬가지이다. 기존의 소스는 이미 여러 클래스들.. 더보기
객체-관계 맵핑 사고의 고수를 꿈꾸다. 블로그를 대함에 있어 머리와 손이 따로 움직이는 느낌입니다. 갈수록 블로그의 활용 가치가 높아져서 열심히 써야겠다는 마음은 드는데 글쓰기는 안하고 초저녁에 잠만 자고 있습니다. 블로그의 활용 가치중에 요즘 느끼는 것은 블로그를 배움의 도구로 쓸수 있다는 것입니다. 예를 들어 ‘객체 지향’은 이런것이다~ 라고 뜬구름 잡듯 어렴풋이 인식하고 있는 지식을 명쾌하게~ 글로 써서 독자에게 설명할 수 있을 정도까지 쓰려면, 그야말로 머리를 꽝꽝~ 벽에 부딪쳐 가며 사고력 부족의 한계를 이겨내야만 쓸 수 있습니다. 그래서 글쓰기로 프로그래밍 역량이든 교양능력이든 많이 향상시킬수 있다는 것을 느끼고 있습니다. 최근에 산고의 고통 끝에 배움의 기쁨을 얻기 위해 쓴 글중에 객체지향 글쓰기 (글쓰기 프로그래밍이 가능할까?).. 더보기
팀원에게 객제지향 개발을 유도하기 (3/3) 팀원에게 객제지향 개발을 유도하기 (1/3), 팀원에게 객제지향 개발을 유도하기 (2/3)에 이어서 포스팅 합니다. + 2008년 초 레거시 코드를 스프링 프레임워크 IoC로 이식하며 > 잠깐, 왜 인터페이스와 인터페이스를 상속하는 구현 클래스를 만드는 방식으로 프로그래밍 해야 하는 거죠? 팀원에게 객제지향 개발을 유도하기 (1/3)에 객체지향스럽게 짠다는 의미를 대상 요소를 잘 추상화 하여 추상화의 장점을 잘 살리는 것이라고 했습니다. 인터페이스와 인터페이스를 상속하는 구현 클래스를 만드는 것이야 말로 바로 객체지향 추상화의 기본이 되는 프로그래밍 방식입니다. 그리고 스프링의 IoC(Inversion Of Control)기능이 바로 인터페이스와 인터페이스를 상속하는 구현 클래스 방식의 객체지향 개발을 .. 더보기
팀원에게 객제지향 개발을 유도하기 (2/3) 팀원에게 객제지향 개발을 유도하기 (1/3) 에 이어서 포스팅 합니다. > 왜 JUnit등의 테스팅 프레임워크를 이용하여 테스트 클래스를 만들어야 되는거죠? 보통 버그를 어떻게 잡으시나요. 1. 대충 테스트 하고 '이 정도면 되겠지 아마 에러 안날꺼야~' 라고 낙관하거나 2. 에러나면 그때 처리하자고.. 라고 낙관하거나 3. 그래도 이부분은 에러 없어야 되니 100가지 경우를 몽땅 '수작업'으로 테스트 하는거야.. 대개 이러지 않을까요. 그런데 이런 경우는 생각만 해도 아찔합니다. 보호망 없이 외줄타기 하는것과 같고, 망망대해에서 손으로 물고기 잡는것과 마찬가지이고, 로봇으로 자동 제작하던 공장 제품을 갑자기 수작업으로 제작하는 것과 마찬가지입니다. JUnit은 외줄타기 하는 개발자를 추락으로부터 보호해.. 더보기
팀원에게 객제지향 개발을 유도하기 (1/3) 우리회사 팀원들은 각 분야에 일가를 이룬 분들입니다. 특히 금융 전산 분야에서 우리의 능력은 탁월하죠. 다만 오래전부터 경력쌓던 분이라 그런지 절자지향적인 개발에 익숙하고 객체지향 개발은 다소 멀게 느끼시는 그런 모습이 있었습니다. 잠깐, 내가 생각하는 절차지향, 객체지향 프로그래밍 절차지향은, 모든 프로그래밍을 처리, 분기, 반복으로 처리할수 있다는 관점에서 절차적으로 처리하는 방식 객체지향은, 세상의 모든 요소를 객체와 객체간의 관계로 추상화하여, 추상화시 얻을 수 있는 확장성과 유지보수 편리함을 지향하는 개발 방법론 예전에 우리 회사 솔루션 개발에 객체지향 솔루션을 가져다 쓰면서 동료들이 몇가지 의문을 제기한 부분이 있었는데요. 그 의문들은 대부분 원론적인 질문들이라 제가 제대로 답변을 못한 부분이.. 더보기
객체지향 토론3 (이슈정리와 용두사미) 제가 주말 늘어지게 쉴 때는 포스팅 제대로 해보겠습니다만, 평일 날 늦게까지 일하고 나면, 또는 일찍 퇴근하더라도 졸립고 하여 포스팅 하기가 어려워집니다. 어렵더라도 쪼개서 조금씩이라도 자주 포스팅 하는 습관을 가져야겠습니다. 객체지향 토론 연재글을 시작하면서 시작하게된 동기가 스프링이라는 자바 프레임워크로 개발한 프로젝트(팍스)에 그냥 일반적인 방식으로 개발한 소스(탱고)를 붙이는 과정이 있었는데요. 이때 당사자간의 객체지향에 대한 토론 내용이 박진감이 넘쳐서 글로 쓰면 어떨까 싶어서 쓰기 시작했었습니다. 그런데 사실은..사실은.. 몇 주가 지난 지금에 오니 그때의 대화 내용을 거의 잊어버리게 되었습니다. 그리고 곰곰히 생각해보니 저야 뭐 객체지향스럽게 프로그램 짜는게 맞다고 생각하여 제 쪽에 유리하게.. 더보기
객체지향 토론-1 (팀원간 기술 습득의 가치 공유) 계획대로 안 되는 것이 인생인데 작게는 블로그에도 적용되는 구나~ 라고 느끼는 것이, 최근 글감이 많이 생겨서 한번 제대로 써볼려고 하니 귀찮음과 졸림의 방해 요소를 만나서 계속 쓰고 싶은 글을 못 쓰고 있습니다. 그 중 이번주에 재미있는 글감이 하나 생겼습니다. 바로 동료 직원과 나눈 ‘프로그래밍 기술 관련 얘기’ 였는데요. 나중에 곰곰히 생각해 보니 하나의 ‘객체지향 토론’을 한 것이 되었습니다. 그래서 이 토론 내용을 블로그에 올리면 다시 한번 내용 정리도 되고, 잘 정리될 경우 구독자 읽기에도 유익할 것 같아서 쓸라고 했더니만, 주제의 무게감과 글 길이의 부담 때문에 망설이다가 결국 잠만 자게 되었습니다. 그래서 생각한 복안이 처음에는 연재 형식으로 쪼개서 여러 번 포스팅 하고 연재 글이 잘 완료.. 더보기
객체지향 글쓰기 (글쓰기 프로그래밍이 가능할까?) 프로그램 개발자가 가장 싫어하는 일중 하나는 무엇일까? 문서 작성이다. 나도 문서 작성을 밤새 야근 하는 것처럼 싫어한다. 그런데 개발자들이 문서 작성을 싫어하는 결정적인 이유는 아마도 개발자 문서 작성이 노가다성이기 때문일 것이다. 화면 캡춰나 기능에 대한 가이드 라인 설명 문구는 지극히 단순 작업으로 개발자를 지치게 하는 요소 중의 하나이다. 그리고 개발자와 글쓰기라는 단어 자체가 북극과 남극처럼 멀리 떨어진 이미지로 느껴진다. 개발자 중 글쓰기를 좋아하는 사람은 많지 않다. 이유는 아마도 프로그램 개발은 이공계 영역이고 글쓰기는 인문계 영역이라는 극단의 차이가 이 둘은 별개의 사고영역이라 생각하면서 내가 잘하기 힘들고, 내가 싫어하는 영역이라고 처음부터 단정짓는 것이 아닐까 싶다. 그러나 개발자인 .. 더보기
한국스프링사용자모임2회(KSUG) 참가 후기 (스프링 달인의 한수 가르침) 객체는 세상의 사물을 표현했기 때문에 살아있는 세상과 비슷하다. 만약 어떤 사람이 자주적인 생활을 못하고 부모님이나 주변 사람들에게 의존하기만 한다면 도와주는 사람들이 갑자기 외면했을때 그 사람은 제대로 살수가 없을것이다. 객체역시 사람과 비슷하여 만약 다른 객체의 기능에 크게 기대기만 한다면 도와주는 객체가 변경, 손상, 심술을 부렸을때 기대는 객체 역시 제대로 살수가 없을것이다. 그러나 세상은 결코 혼자서만 살수가 없고 누군가의 지원이 필수적이라서 그 지원을 밑바닥 에서 도와주는 무엇인가 있으면 크게 도움이 될 것이다. 스프링은 객체들의 상호 의존을 보이지 않게 관리하여 객체 자신이 무엇에 의존하고 있는지 신경 쓸 필요 없게 만든다. 사람 사는 세계와 비유하면 국가가 주도하는 복지, 교통의 사회적 인.. 더보기