분류 전체보기 (328)
.NET (111)
S/W tip (35)
etc (63)
DB (34)
HOT item~! (48)
Disign pettens (4)
UX (6)
나의 S/W (2)
개발관련 이슈 (16)
Diary (1)
웹플러스 (1)
calendar
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
tags
archive
link
ColorSwitch 00 01 02
출처 : http://www.bloter.net/archives/62883


세계 모든 미디어와 수많은 IT 업체들의 이목이 미국 샌프란시스코 모스콘 센터에 쏠렸다.

얼마 전 그곳에선 구글이 전세계 개발자를 대상으로 세미나를 개최했다. 뒤이어 애플이 6월 6일부터 10일까지(현지 기준) ‘개발자 컨퍼런스(WWDC) 2011′을 개최하고 있다.

많은 이들이 예상했던 대로 애플과 스티브잡스가 ‘아이클라우드(iCloud)’라는 개인용 클라우드 컴퓨팅(PCC) 서비스를 들고 나왔다. 언제 어디서나 인터넷에 접속하기만 하면 저 ‘구름 뒤편’의 데이터센터에 저장된 콘텐츠들을 실시간으로 활용할 수 있게 하겠다는 것이다. 물론 애플이 제공하는 운영체제를 탑재한 기기에 한 해서지만.

iOS5는 그동안 안드로이드 진영에서 선보였던 기능들을 대거 차용한 느낌도 든다. 서로가 닮아가고 있다. 앞서거니 뒤서거니 하면서 혁신의 경쟁을 하고 있다.

누구나 안다. 클라우드가 대세라는 걸. 하지만 경쟁업체들은 애플이 무슨 카드를 꺼내 들 지 알면서도 매번 당하기 일쑤다. 갑자기 궁금해졌다. 왜 그럴까?

한가지 생각이 떠올랐다. 애플이나 스티브잡스는 일반인들의 생활 자체에 무척 많은 관심을 기울이고 있다는 걸. 애플은 단순히 기기를 출시하는 것이 아니다. 그 기기를 통해서 그동안 복잡했거나 어려웠던 과정들을 깔끔하게 정리하고 편리함을 제공한다. 소비자들에게는 편리함을 주고 자신의 파트너와 개발자들에게는 새로운 수익을 얻을 수 있는 플랫폼을 제공한다.

애플의 행보는 이를 여실히 보여주고 있다. MP3 플레이어를 출시할 때도 애플은 후발주자였다. 하지만 불법복제에 시름하던 저작자들에게 아이튠즈를 통해 소비자들에게 다가설 수 있는 통로를 열어주고 동시에 수익을 보장해 줬다. MP3 플레이어를 가장 먼저 만든 우리나라 제조업체들은 이런 쪽에는 별다른 관심을 기울이지 않았다. 워크맨의 대체제로서만 제품을 출시했을 뿐이다. 기존의 선발업체를 꺾는데는 성공했지만 새롭게 선점한 시장을 지속적으로 이끌어가는덴 실패했다.

애플이 스마트폰을 들고 나왔을 때도 마찬가지였다. 수직 계열화된 통신시장의 구조를 제조사, 통신사, 개발자, 소비자들이 나란히 설 수 있도록 수평하게 만들어 버렸다.

아이패드는 또 다른 시장을 겨냥했다. 바로 출판분야다. 아이패드가 출시되기 전까지 PC나 노트북, 태블릿들은 생산성 향상이라는 분야에 초점이 맞춰져 있었다. 하지만 아이패드는 처음으로 ‘소비형 기기’라는 타이틀을 거머쥐면서 전혀 새로운 시장을 만들어 냈다. 출시 초기 IT 블로거들이 이런 저런 기능이 빠졌다며 손가락질하기도 했지만 아이패드는 보란듯이 성공했다. 연달아 내놓은 아이패드2는 없어서 못 팔 정도다. 가격까지 낮췄다.

애플은 초기 애플TV의 실패에서 경험한 탓인지 10만원짜리 셋톱박스를 통해 새롭게 방송 콘텐츠 시장에도 들어왔다. 많은 방송 사업자들은 음반 업체들이 애플에 목덜미를 잡혔다고 보고 처음엔 적극적으로 동참하지 않았다. 하지만 이들은 이미 아이패드에 여러 형태로 지원을 해왔었다. 애플은 에어플레이를 통해 무선랜으로 연결된 기기들간에 음악과 영상을 손쉽게 주고 받을 수 있도록 했다. 사용자들이 관련 기능을 쓸 때 번거롭게 이것 저것 설정하지 않아도 되도록 했다. 같은 기술을 만들어 내는데 누구는 아주 어렵게 다가가는 반면 애플은 손쉽게 활용할 수 있도록 한다.

애플TV에 콘텐츠를 제공하지 않았더라도 아이패드 앱 마켓에 들어와 있는 영상들은 소비자들이 손쉽게 애플TV와 연동시켜 대화면에서 즐길 수 있도록 했다. 과정도 무척 간편하다. 국내 가전 업체들이 홈네트워크표준인 ‘DLNA’를 통해 관련 기기들을 연동할 수 있도록 했지만 대중화에는 실패했다. 일반 사용자들이 이용하기에 어려웠기 때문이다. 혹자는 말한다. 그게 뭐가 어렵냐고. 그럼 이런 반문은 어떨까. 왜 먼저 만들어놓고 한참 뒤에 나온 애플의 에어플레이보다 더 많은 생태계를 만들어 내지 못했느냐고.

최근 만난 업계의 한 관계자는 이런 차이에 대해 “애플은 사용자들에게 어떤 서비스를 어떻게 전달해야 손쉽게 활용할 수 있는 지 미리 생각을 해 놓고 그 다음 기술을 적용하니 확산도 빠른 것 같다”면서 “이에 비해 우리나라 업체들은 이런 소비자 관점보다는 엔지니어들이 활용 가능한 기술을 조합해 제공하는 데 익숙하다. 그러다보니 사용성이 떨어진다. 서비스를 기획하는 단계부터 이런 차이가 발생하는 데 실제 사용에서는 너무나 큰 차이가 나타나는 것 같다”고 말했다.

얼마 전 우연히 또 다른 이야기를 들었다. “내 친구 중 가수가 있다. 500원짜리 음원이 하나 팔리면 그 친구에게는 3.8원 정도가 떨어진다. 이게 우리나라 생태계의 현실이다. 만약 우리나라 가수들이 대거 아이튠즈를 통해 음원을 유통하게 된다면 어떤 일이 벌어질까. 현재 시장을 장악한 통신사들이나 인터넷 음악 서비스 회사들을 외면하고 해외 플랫폼을 쳐다보고 있는 이런 현실에 과연 우리나라 제조사들은 제대로 관심을 가져봤을까”라고.

세계 최고의 가전 제품을 만들면서도 서로 다른 기기들을 엮기 위한 플랫폼을 얼마나 유연하게 만들어 외부 개발자와 다른 파트너들에게 공개했느냐고. 이 분야는 익숙하지 않은 분야다. 그냥 돈주고 협력사를 소싱해서 서비스를 만들어 내는 방식으로는 더 이상의 부가가치는 물론 기존 시장유지도 어렵다는 걸 우리나라 최고 경영진들은 아직까지 제대로 인식하지 못한 것 같다.

쉬어야 할 주말에도 총괄 임원이 출근해 “왜 저 부서에는 사람들이 없지?”라고 한마디 하고 돌아가는 것이 최고의 업무독려인 줄 안다.

가정을 포기하고 앞만 보고 달려온 우리네 최고 경영자들은 자신의 주위를 둘러보면서 살아올 여유가 없었다. 오직 경쟁사를 주시하며 앞만보고 뛰었다. 당연히 성적표가 중요했다. 자신이 만든 혹은 자기 회사가 만든 제품을 가지고 아내가 혹은 자식들이 어떻게 사용하고 무엇을 어려워하는 지 돌아볼 여유가 없었다. ‘먹고 살만큼 줬으면 됐지 뭘 또 바라냐. 지네들이 누구 때문에 그나마 먹고사는데’라며 협력사를 바라봤던 인식은 요지부동이다. 아무리 ‘상생’을 강조하는 시대가 도래해도 말이다.

도대체 뭘 어쩌라는 거냐는 말 밖에 달리 할말이 없다.

기업의 최고 수장들은 입만 열면 상생을 이야기하지만 연말이 되면 실적에 따라 평가한다. 당연히 협력사를 쪼아서 그들에게 비용을 전가시킨 곳들이 수익이 좋다. 수익이 좋은 곳이 오히려 협력사를 쪼으고 옥죄었다는 평가는 온데 간데 없다. 최고 경영진들의 상생 발언이 관련 시장에 전혀 먹혀 들어가지 않는 구조다.

언제 이 세상을 떠날 지 모를 잡스가 천착해 온 것들은 무엇일까. 전혀 다른 산업에 대한 관심과 사람에 대한 관심. 모든 걸 엮어 내는 핵심에 집중하고 나머지는 개방하면 더 큰 생태계를 만들어 낼 수 있다는 사실이다. 잡스도 초기에는 몰랐을 것이다. 잡스가 애플에서 쫓겨나지 않았다면 지금의 혁신들을 쏟아낼 수 있었을까. 그렇다면 우리나라 경영자들을 억지로라도 일정기간 회사 근처에 얼씬도 못하게 하고 집에서 시간을 보내도록 하는 것도 방법일 지 모르겠다.

대부분의 개발자 행사는 미국에서 개최된다. 소프트웨어 생태계를 만들어 내는 데 성공한 회사와 나라는 많지 않다. 최고의 벤처 생태계가 만들어 진 곳이 미국과 이스라엘외에 찾아보기 힘든 것처럼 소프트웨어 생태계를 만들어 내는 건 그리 호락호락한 일이 아니다. 익숙함으로부터의 탈출없이 혁신은 존재하지 않는다.

WWDC 2011 첫 날 선보인 아이클라우드는 아주 손쉽게 활용할 수 있는 편리함이다. 그 편리함을 이제 우리나라 제조사들로부터도 받고 싶다. 아마도 잡스가 제시한 이 길을 따라잡기 위해 우리나라 각 기업의 실무 담당자들과 엔지니어들은 또 한번 철야 작업에 내몰릴 지 모를 일이다. 아이클라우드를 보면서 멋지다라는 생각을 잠시 한 후 그들을 추격하기 위해 또한번 거센 업무 현장에 투입돼야 하는 이들의 얼굴이 떠오른다. 이들은 또 한번 가정을 포기하고 업무에 투입될 것이다. 워크 스마트를 강조하지만 그렇게 해본 적 없는 국내 제조사들의 경영진들이 변하지 않는 한 지속적인 혁신은 불가능해 보인다.

남의 잔치가 열릴 때마다 입맛이 쓰다. 몇년 간은 이런 씁맛을 계속 보게 될 것 같다.



프로그래밍 영웅과 독불장군

출처 : 'Professional 소프트웨어 개발' , 스티브 맥코넬

부족한 기술 인력과, 너무 낙관적으로 일정을 잡는 일반적 성향을 더하면 어떤 일이 일어날 것 같은가?
그렇다. 이제는 일당백의 능력을 가진 프로그래밍 영웅(programming hero)을 말할 차례다.

프로그래밍 영웅은 항상 자기 능력을 시험해 볼만한 일을 선택하고, 어마어마한 코드를 써 나간다.
그런 사람은 대부분 야근을 밥먹듯 하고, 곧 프로젝트에서 절대로 빼놓을 수 없는 사람이 된다.
성공은 그들의 어깨에 달려 있는 것 같이 보인다.

프로젝트 관리자는 이 영웅 프로그래머를 사랑하지만, 두려워하기도 한다. 그들은 똑똑하지만,
성미가 까다롭고 독선적인 성격인 경우가 많다. 그러나 그들이 없는 프로젝트 수행은 상상할 수 없다.
수급 불균형 노동 시장에서 그들을 대체하는 것은 절대로 선택 사항이 아닐 것이다. 그러나 안타깝게도
엄청난 양의 코드를 뽑아내는 능력이 있는 대부분의 프로그래밍 영웅들은 다른 사람들과 같이 일하는
방법을 모른다는 치명적인 요소가 있다.

이런 사람들은 대부분의 설계 정보와 소스코드를 자기만 볼 수 있도록 숨겨놓고,  테크니컬 리뷰
(technical reviews)에 참여하는 것을 거부한다. 또, 팀이 정해 놓은 표준을 따르지도 않는다.
이러한 행동들은 결국 다른 팀원들의 프로젝트에 가치있는 공헌을 할 수 있는 기회를 박탈하게 된다.
많은 프로그래밍 영웅들은 결국 전혀 영웅이 아니다. 그들은 단지 프로그래밍 독불장군일 뿐이다.

개개인의 탁월한 능력이 프로젝트 성공에 큰 영향을 미칠 수도 있지만, 일반적으로는 팀워크가 더
큰 영향을 미친다. IBM의 연구에 의하면 평균적인 프로그래머는 약 30%의 시간만 혼자 일하는
데 보내고,나머지 시간은 팀 동료나 고객 같은 다른 사람들과 같이 일하는데 쓴다.
31건의 소프트웨어 프로젝트들을 조사한 결과, 전체 생산성에 가장 큰 영향을 미치는 요소는
바로 팀의 융합이라는 것을 알 수 있었다. 물론 개개인의 능력도 생산성 증가에 공헌하지만, 팀 융합이
더욱 큰 힘을 발휘한다. 많은 사람들이 자신의 능력을 더 높일 수 있는 도전적인 프로젝트에 참여하고
싶어한다. 그러나 자신의 한계를 테스트하려는 의지가 있고 효과적인 소프트웨어 개발 지침들을따르며
지속적으로 동료와 협업하는 사람만이 진정한 프로그래밍 영웅이고, 프로젝트에 참여할 자격이 있다.

포스팅 출처 : http://kldp.org/node/43548

=======================================================

우연히 이 글을 보게 되었는데요. 느끼는 점이 많아 함께 공유하고 싶었습니다.
대학교때 진행했던 프로젝트나 현재 회사에서 하는 프로젝트들을 돌이켜볼때 혹시라도
나 자신이 독불장군은 아니었나 말입니다.

대학교때 실버라이트 프로젝트를 시작할때 팀원들의 프로그래밍 실력은 제각각이었긴 했지만
팀원모두 실버라이트에 대해 잘 모르고 있었기때문에 같은 선상에서 시작하겠구나 생각했습니다.
어찌보면 모험이었지만 한번 해보자는 분위기로 시작했지요.
저의 경우엔 팀장이란 역할을 맡고 있어서 밤새 MSDN과 씨름하고 들리지도 않는 영어로 된 동영상
강의를 보면서 스킬을 하나 둘 익혀나갔습니다.

하지만 시간이 지나면서 알게 모르게 프로젝트 전체에 대한 저의 비중이 커지기 시작했습니다.
그리고 팀원들은 실버라이트를 어렵게 느끼기 시작했으며, 점차 흥미를 잃어가는 것이 보였습니다.
다만 몇몇만이 지금까지 완성된 코드를 보며 힘겹게 따라오는 듯한 느낌이 들었지요.

테크니컬 리뷰를 더욱 자주 하고 싶었지만 어떻게 해야 효율적인지 잘 몰랐고, 후반부에는 바쁜 일정에
쫓기다보니 성과 없는 리뷰의 효율에 대해 의심이 들기 시작했습니다. 또한 많은 양의 코드를 뽑아내는데는
익숙했지만 다른사람들과 같이 팀웍을 한다는게 아직은 어렵게 느껴지기 시작했습니다.
돌이켜보면 비록 프로젝트 결과는 성공적으로 마쳤을지 모르지만 프로젝트 과정은 실패했다고 생각합니다.



대학교 프로젝트라서 그렇겠지.. 했지만.. 문제는 그 다음 프로젝트에서도 반복되는 것 같다는 점입니다.
일단은 자바 개발 경험이 있는 사람이 적은 상태에서 자바로 프로젝트가 시작되었고, 도메인 역시 생소하긴
했지만 일정상에는 기간도 길고 문제가 없어보였습니다.

그러고보니 위의 글에서 첫 문장의 조건이 되는군요..
"부족한 기술 인력과, 너무 낙관적으로 일정을 잡는 일반적 성향을 더하면 어떤 일이 일어날 것 같은가?"

구현단계에 오니 문제점들이 드러나기 시작했습니다. 디자인할때 인식하지 못했던 구현상의 문제들을 해결하거나
좀더 효율적으로 처리하기 위해 많은 알고리즘들이 삽입되고 패턴들이 적용되었습니다. 그러다보니 디자인때보다
더 많은 클래스들이 생겨나고 복잡해 보이기 시작했습니다. 저는 그 당시 뛰어난 아키텍쳐의 부재를 아쉬워하며..
이렇게 해야 확장이 쉽고 유지보수에 좋습니다. 라는 말로 설득시켜 모든 짐을 지고서 팀을 끌고왔습니다.
그때그때 팀원들의 이해를 돕기위해 많은 PPT를 준비하고 코드리뷰에도 적극적으로 참여했습니다만
문제는 언제부터인가 제가 전체 프로젝트의 80%이상의 코드를 손대고 있고 팀원들이 제 코드중 핵심 코어부분을
블랙박스라고 부르는데 있습니다.

위 글 중 영웅이고 머를 떠나서  '자기 능력을 시험해 볼만한 일을 선택하고, 어마어마한 코드를 써 나간다' 라는
말에 동의는 합니다만 제가 성미가 까다롭거나 독선적이진 않습니다. 또한 공유는 저의 일상생활이구요.
그리고 기술적인 토론을 좋아하고 언제든지 피드백에 제 자신을 채찍질 할 준비가 되어있습니다.

다만, 팀워크와 관련된 결정에 있어서 딜레마에 빠질까봐 걱정이 됩니다. 그리고 혼자 너무 많은 일을 맡으려
하는 성격(다른사람에게 일을 막 못시키는)도 협업을 할때 풀어야할 과제가 아닐까 생각해봅니다.

그리고...
훌륭한 Co-worker로서.. 또는 Leader로서 필요한 자질은 무엇인지 의견을 부탁드립니다. ^^

출처 : http://hoons.kr/board.aspx?Name=Free&BoardIdx=28609&Page=1&Mode=2



출처 : http://blog.naver.com/seogi1004?Redirect=Log&logNo=110076487990

개발자라면 OOP라는 것을 최소한 한번은 들어봤을 것이다.

 

이 OOP라는 개념이 나온지가 거의 수십년이 되었고 하나의 트렌드로 잡혀서 실제 프로그래밍에 적용된지도 20년 가까이 되었다.

객체지향프로그래밍을 적극 반영한것이 Java, C++, Object pascal, PHP등등..

 

이젠 OOP를 언어차원에서 지원하지 않으면 안되는 세상이 됐다.

물론 OOP보다는 절차적 프로그래밍이 중요하게 사용되는 부분도 여전히 많기는 하지만 어쨌든 한참 예전부터 대세는 OOP였다.

 

그런데 이런때 일반 상식이 된 OOP를 들먹이는 이유가 있다.

 

OOP를 못하는 개발자자는 개발자의 적이다.

 

coding의 기본 틀은 빠른 속도? 짧은 코드? 아니다. 다른 개발자가 보기 쉽고 깔끔하게 정형화된 규칙으로 모듈화 된 것이다.

타인이 얼마나 빠른 속도로 이미 짜여진 코드에 빨리 적응할 수 있느냐가 그 코딩이 잘되어 있느냐 못되어 있느냐를 결정짓는다.

근데 OOP가 아닌 절차적 프로그래밍이나 OOP를 잘 지키지 못한 소스의 경우 개발한사람도 유지보수때 힘들겠지만

이후 유지보수에 들어가는 다른 개발자들은 정말 죽고싶은 충동이 날정도로 힘들게 만들어버린다.

기능 하나 추가 하려면 여기저기 다 뜯어 고쳐야 하고, 버그 하나 수정할때마다 사방에서 발생하는 side effect를 처리 해야 하고

아무리 잘된 문서가 있더라도 소스를 이해 하기 힘들다.

짜놓은 개발자 조차도 결국은 수정 못하고 다 뒤집어 엎기도 한다.

유지보수와 프로젝트 후반부에 가서는 OOP가 아닌 개발방법론은 개발자에게 독이되어 돌아오고 수많은 유지보수 이슈와 요구사항변경을 땜질하기 힘들어져서 개발자를 지치게 만든다.

 

 

 

 

아직도 많은 개발자들이 OOP에 대해서 많은 오해를 하고 있다.

몇가지 예를 들고 설명해보고자 한다.

 

1. 무조건 class만 사용하면 OOP이다.

   OOP란 하나의 프로그래밍 방법론이다. 문제를 얼마나 효율적인 단위로 객체(모듈)화해서 개발자로 하여금 좀더 개발하기 쉽게

   만들고 문제가 발생했을때 그 문제의 해결 범위를 축소시켜 기타 side effect를 최소화 하는 것이다.

   그렇게 본다면 자바나 C++등의 class라는 예약어를 사용한다고 해서 무조건 OOP일까?  절대 아니다.

   필요 없는 부분까지 class로 만들고 함수 한두개만 만들면 되는 상황인데 OOP랍시고 무조건 class로 만들고 객체를 생성시키게

   만든다면 전혀 의미가 없다. 또한 효율적인 객체단위로 나뉘지 않고 이문제 저문제가 한꺼번에 다 들어있는 객체, 혼합되어

   어떤 부분에 쓰일지 알수 없는 class등은 절대 객체지향이 아니다. 오히려 그런 class하나때문에 다른 많은 부분까지 수정을 해야 할

   수도 있다. 착각하지 마라. class썼다고 자신이 OOP를 잘하고 있다는 생각은 위험하다.


   "class란 OOP의 가장 기본적인 단위이며 Data와 Method(Function)의 집합체이다."  이걸 꼭 기억하자.

 

2. C언어 등에서는 OOP가 사용불가능하다.

    OOP의 의미를 모르는 사람들이 하는 소리다. OOP란 기능이나. 절차를 모듈화하는 것이다. 다시 말해서 구현 범위를 기능 단위로

    쪼개서 나눠 놓고 문제의 발생 범위를 축소 시키는 것이다.  쉽게 자동차 생산을 생각하면 될것이다. 조향장치, 전체 프레임, 엔진, 배기

     시스템, 연료 공급부분 등 자동차에 고장이 발생했을 경우 해당 부품만 교환하거나 고치면 차는 문제 없이 작동한다.

    소프트웨어 또한 마찬가지다. 그렇게 본다면 C언어를 통해서 개발할때도 이런 식으로 나눠놓는다면 OOP가 안되겠는가?


3. OOP를 하면 개발 속도가 늦춰진다.

    초기 가시적인 개발 속도는 OOP가 늦다고 할 수도 있다. 하지만 구조적 프로그래밍을 하면서 초기에 빨리빨리 개발 되는 것처럼 보이

     지만 OOP의 초기 모듈화 구축 단계를 넘어가게 되면 OOP가 훨씬 빠르다. "잘 개발된 프레임웍 한개, 열 코더 안부럽다" 라는 말을 하

     고 싶다. 구현하는 곳마다 똑같은 일을 반복해서 구현 해줘야 하는것과 초기에 한번 잘 구성해놓고 이후부터는 엔진단에서 자동으로

     작동한다면 어디가 더 빠르겠는가?  개발 후반부에 요구사항이 추가되거나 수정되면 그것을 적용할때 구조적 프로그래밍은 그걸 반영

     하기 너무 어렵거나 아예 불가능 할 수도 있다. 하지만 OOP는 간단하다. 심지어는 구조적 프로그래밍의 경우 3일 걸릴것 3분만에 끝낼

     수도 있다.   소프트웨어 개발의 대세는 유지보수의 편리성이다.


4. OOP를 하면 프로그램 크기가 커진다.

    아니라고 할수도 없고 꼭 그렇다고 할 수도 없다.

    만약 정말 작은 기능을 하는 프로그램이 있다면 굳이 OOP의 구현 프레임웍을 얻는 것보다 차라리 구고적 프로그래밍으로 하는 것이

    프로그램 크기는 작아 질것이다. 하지만 프로그램이 일정 범위이상 넘어가게 된다면 애기는 완전히 틀려진다. 100개의 Page를 개발하

    는 프로젝트에서 OOP로 하지 않는다면 100개 모두에 같은 동작을 코드로 넣는다면 OOP의 프로그램크기가 훨씬 작다. 


6. OOP를 하면 프로그램 속도가 늦다.

    처리 단위를 함수 하나로 하고 switch case문으로 처리 하는 것에는 당연히 함수 포인터가 이리저리 불리고 하는 OOP보다는 빠를 것

    이다.  하지만 이미 시스템이 고속화 되고 폰에서도 3D게임이 돌아가는 현실에서 사용자가 체감하지 못하는 그 작은 속도의 차리때문에

    인력과 시간을 낭비할 필요는 없다고 본다.   결론은 그런식의 처리보다야 약간 늦기는 하다.


7. OOP를 사용하려면 엄청난 설계 기술이 있어야 한다.

    사고를 어떻게 하느냐다. 문제를 보고 문제의 세부 구현 단위를 작게 쪼게서 볼수 있느냐와

    뭉퉁그려서 한번에 그 모든것을 한곳에서 다 처리 해야 한다는 것의 차이이다.

    개념만 살짝 바꾸면 전혀 어렵지 않다.


8. 상속깊이가 깊으면 멋진 OOP이다.

   OOP를 처음 배우는 개발자들의 일반적인 오류인데 절대 그렇지 않다. 한때 프레임웍들의 상속구조가 깊고

   복잡한것이 유행했었다. 하지만 그렇게 될경우 개발자들이 그 프레임웍을 이해하는데 오래 걸리고 쉽고 유

    연하게 사용하기 힘들다. 상속이 너무 두꺼울 경우 수정 이슈가 있을때 수정하기 어렵고, 작은 기능을 하나

   수정하기 위해서 많은 이해를 필요로 한다.   필요한 부분들만 간결하게 Class화하고 상속또한 가볍게 한것

    이 멋진 OOP라고 할 수 있다.


▣  TED 토크 - 개발관련 이슈 - 2010. 12. 27. 16:37

안녕하세요

강용천입니다.

과장 밑으로 저와 같이 일했던.. 같은 부서원이었던 직원이 현재 12명이나 되군요.

정말 하나같이 모두 착하고 좋은 사람들인 거 같습니다. 저만 항상 모니터에 인상 쓰고 있으며 재미없는 못난 사람이지만..^^

제가 이씨오에서 얻은 게 있다면 당연 이분들일 겁니다….물론 회사에서 받는 금전적인건 빼고

지금까지 뻘소리였구요..  그냥 보면 좋을 거 같은 영상이 있어 링크 걸어 드립니다.

내용이 리더의 리더십 이런 내용이라고 현재 저의 PM님들에게 이랬으면 좋겠다 뭐 그런 소리는 아닙니다..

PM님들을 사랑하고 특히 박책임님은 저의 리더라는걸 자랑스럽게 생각합니다. 아부인가요? 아부라고 생각하면 뭐 어쩔 수 없죠..ㅎㅎ

오래 전부터 알고 있던 사이트인데요. 정말 멋진 강연이 많습니다. 시간 나면 한번 보세요.  

 

멋진 강연이 즐비한 TED에서 자막서비스와 함께 각국 언어 번역 프로젝트가 시작된 지 꽤 되었습니다.

이제 한글자막이 나오는 토크가 125개나 되니, 영어울렁증이 있는 분들도 이 멋진 강연들을 즐길 수 있겠네요.

TED 토크 중 'Itay Talgam: Lead like the great conductors | Video on TED.com ' 이라는 토크를 보고

감명을 받아서...... 생략 

http://www.ted.com/talks/lang/kor/itay_talgam_lead_like_the_great_conductors.html 여기로

[출처] 처음해보는 TED 번역 리뷰|작성자 박형근

유명한 오케스트라 지휘자들의 지휘스타일을 비교하면서,

리더의 리더십에 대해 생각해 보게 해주는 명 강연입니다.


▣  형변환 - 개발관련 이슈 - 2010. 12. 23. 11:11

오랜만에 단순한 팁 하나.. 아는분이 많을려나..

프로그램 짜다 보면 형변환을 해야 할 일이 많이 생기는데.. 주절주절~~

다른회사?에 가서 개발하다 보면 프레임워크를 많이 만들어야 하는 그런 경우가 있는데 프레임워크에 유용하게 쓰일 암시적 형변환 방법입니다.

참고하면 좋을 듯 해요~~

 

 

소스 간단 설명)

String[] 형식을 List<string>형식으로 변환하는 방법

ToGenericList 추가 기능

                

private void button1_Click(object sender, EventArgs e)

        {

            List<string> result = ((ToGenericList)BuildArray("일씨오", "이씨오", "삼씨오", "사씨오", "오씨오", "육씨오"));

        }

 

        private string[] BuildArray(params string[] arrStr)

        {

            return arrStr;

        }

 

        public sealed class ToGenericList

        {

            private ToGenericList(string[] p) { this.m_oArray = p; }

            private string[] m_oArray;

            public static implicit operator List<string>(ToGenericList p)

            {

                List<string> oTemp = new List<string>();

 

                for (int i = 0; i < p.m_oArray.Length; i++)

                    oTemp.Add(p.m_oArray[i]);

 

                return oTemp;

            }

 

            public static implicit operator ToGenericList(string[] p)

            { return new ToGenericList(p); }

        }

top
:

▣  역시 애플!! - 개발관련 이슈 - 2010. 5. 27. 11:16

http://www.ohmynews.com/NWS_Web/View/at_pg.aspx?CNTN_CD=A0001383610&PAGE_CD=N0000&BLCK_NO=3&CMPT_CD=M0001


컴퓨터 프로그래밍 용어에 '무한루프'라는 것이 있다. 원형 띠처럼 특정 명령이 무한히 되풀이되는 상태를 말한다. 이 용어는 미국 캘리포니아 쿠퍼티노에 자리한  애플사 주소이기도 하다.

 

'무한루프 일번지(One Infinite Loop).'

 

재기발랄한 컴퓨터 회사에 더 없이 잘 어울리는 주소명이다. 이 독특한 이름을 둘러싼 재미있는 일화도 많다. <와이어드> 2008년 4월호에 실린 이야기를 보자.

 

"'무한루프'는 애플 본사의 주차난을 설명하기에도 좋은 용어다. 실리콘 밸리에 있는 모든 게 그렇듯, 애플사 주차장도 평등주의 원칙을 따른다. 고위 경영자나 '윗분'을 위해 별도로 마련된 주차장 따위는 존재하지 않는다. 최고 경영자가 포르셰를 몰고 나타난다고 해도 달라지는 것은 없다. 누구든 아침 10시 이후에 도착하면 빈 자리를 찾을 때까지 주차장을 계속 도는 '무한루프'를 경험해야 한다."

 

'실리콘 밸리'로 대표되는 미국 첨단기술 업계가 위계와 권위주의를 혐오한다는 사실은 잘 알려져 있다. 최고경영자가 손수 차를 몰면서 빈 주차장을 찾기 위해 진땀을 흘리는 모습은 전혀 낯설지 않다. 그러나 애플 주차장에서는 다른 곳에서 보기 어려운 풍경이 펼쳐지기도 한다. 계속 읽어보자.

 

"그러나 애플 주차장에서도 오래 돌지 않는 차가 한 대 있다. 스티브 잡스가 모는 벤츠다. 급한 업무가 있는데 주차장을 찾기 어려운 경우, 잡스는 출입문 근처의 장애인 주차장에 차를 댄다고 한다. (가끔 두 자리를 차지하는 경우도 있다.) 이럴 때면 직원들의 장난기가 발동한다. 누군가 잡스의 유리창에 "다르게 주차하라(Park Different)"라고 쓴 종이를 끼워 놓는 것이다. 어떤 직원은 주차장 바닥의 장애인 표시를 벤츠 마크로 바꿔 놓기도 했다." 린더 카니, "사악/기발" <와이어드> 4월호 138쪽.

 

  
분방함과 장난스러움은 실리콘 밸리 특유의 정체성을 구성한다. 사진은 지난 4월 '개칭'한 구글의 첫 검색화면. 구글의 최고 경영자는 회사 이름을 (캔자스의 작은 도시 이름을 따) '토피카'로 바꾼다고 공식 발표했다. 만우절 장난이었다.
ⓒ Google
구글

 

애플, 무엇이 같고 무엇이 다른가

 

위의 일화는 애플에 대해 많은 이야기를 해준다. 첫째, 스티브 잡스의 대책 없는 고집불통이다. 잡스는 좀처럼 주장을 꺾지 않을 뿐 아니라, 마음에 안 드는 사람에게 험한 입을 놀리기로 유명하다. 

 

80년 초반, 그는 초기 애플 컴퓨터를 개발하면서 동료로부터 '현실 왜곡장(reality distortion field)'이라는 별명을 얻었다. 명백히 불가능한 일조차 끈질긴 설득과 협박을 통해 가능한 일처럼 보이게 만들기 때문이다. 최초의 매킨토시부터 최근 아이패드까지 모두 이 '현실 왜곡'의 과정을 거쳐 태어났다.

 

이 험난한 여정에서 잡스로부터 욕을 먹은 사람들은 한두 명이 아니다. 잡스는 아이폰을 개발하는 과정에서 많은 통신업계 책임자들과 만났다. 그러나 그들에게 아이폰은 도무지 이해하기 어려운 물건이었다. 그도 그럴 것이, 아이폰 이전까지 휴대전화기는 제조업체가 통신사의 필요와 요구에 맞추어 '납품'하는 물건이었기 때문이다.

 

그러나 잡스는 통신사 간부들에게 휴대폰 개발 과정에서 아무 간섭도 하지 말라고 요구했다. 통신사가 제조업체를 고용하는 것이 상식인 현실에서, 감히 제조업체가 통신사를 고용하겠다고 나선 것이다. 독점계약을 미끼로 에이티앤티(AT&T)를 그의 '현실 왜곡장' 속으로 끌어들어기 전까지, 잡스는 무수히 많은 충돌과 갈등을 겪어야 했다. 그는 간섭 않고는 못 배기는 통신사 경영진을 '터진 주둥이들'이라고 불렀다. 

 

1983년, 펩시콜라 최고 경영자 존 스컬리를 영입하면서 잡스가 던진 질문은 이랬다. "평생 설탕물이나 팔며 살래, 아니면 나와 함께 세상을 바꿀래?" 결국 스컬리는 애플로 옮겨왔고, 얼마 후 잡스는 자신이 데리고 온 사장에 의해 쫓겨나는 신세가 된다. '함께 세상을 바꾸자'고 설득한 상대가 세상보다 잡스의 삶을 먼저 바꿔 놓은 것이다.  

 

두번째로 알 수 있는 것은 무엇일까? 이처럼 '막 가는' 스티브 잡스조차 실리콘 밸리의 반위계적 평등주의는 어쩔 수 없다는 점이다. 뒤에서 자세히 살피겠지만, 오히려 애플은 미국 재계에 반권위, 반위계주의를 주도적으로 확산시킨 기업이었다. 그 흔한 '회장 전용 주차장' 하나 없다는 것도 그렇지만, 그의 불법 주차를 '응징'하는 직원들의 태도를 보라.

 

한국 기업이었다면 어땠을까? 회장이 운전대를 잡고 주차장을 돌 리가 없지만, 만일 직원들이 비슷한 장난을 하면 어떤 일이 일어날까? 예컨대 삼성 직원이 이건희 회장 벤츠 와이퍼 밑에 "삼성이 주차하면 다릅니다"라는 글을 꽂아두고 바닥에 요란한 낙서를 해놓는다면 말이다.

 

  
마이크로소프트의 운영체제 도스(DOS). 1983년.
ⓒ 공개자료
마이크로소프트

  
매킨토시가 1984년에 선보인 그래픽 기반 운영체제.
ⓒ Apple
매킨토시

 

대중 혁명, 유희 혁명

 

우리는 이전 기사 "우리는 '이런 거' 왜 못 만드냐고?"에서 조직의 위계가 어떻게 창의성을 파괴하는지 살펴보았다. 권위주의에 지배되는 조직일수록 반대가 어렵고, 이런 환경에서는 '생각을 뒤집는' 혁신과 창의력이 발휘될 수 없다는 이야기였다. 인문학과 기초과학을 무시한 채 단기 성과용 '응용'에만 집착하는 근시안적 교육정책이 갖는 문제점도 아울러 지적했다.

 

나는 여기에 한 가지를 더 보태려고 한다. 위계 조직 특유의 '엄숙함'이 창의와 혁신의 또 다른 원동력인 '재미' 와 '장난기(playfulness)'마저 불가능하게 한다는 것이다. 애플이 만드는 제품들은 한 가지 공통점이 있다. 바로 '재미'다.

 

애플은 무엇이든 갖고 놀고 싶게 만든다. 이 원칙은 26년 전 탄생한 최초의 매킨토시에서 올해 공개된 아이패드까지 모두 동일하게 적용된다. 1984년, 애플이 가져 온 첫 혁명은 '따분함의 파괴'였다.

 

그 전까지 '컴퓨터'는 검은 화면에 녹색 문자가 깜박이는 기계였다. 키보드로 문자를 '입력'하고 '엔터 키'를 치면 또 다시 뜻 모를 문자들이 죽 늘어서곤 했다. 애플은 이 따분하고 복잡한 과정을 없애 버리고, 모든 것을 그림으로 바꿔 놓았다. 복잡한 '명령어' 따위는 필요 없었다. '마우스'를 누르기만 하면 '폴더'가 열렸고, 필요 없는 것은 '끌어 당겨' '휴지통' 속에 던져 넣기만 하면 됐다.

 

애플이 '그래픽 기반 인터페이스(GUI),' 즉 그림을 통한 컴퓨터 조작법을 최초로 도입한 것도 아니고, 마우스를 처음 발명한 것도 아니었다. 그러나 애플은 주목 받지 못하던 소수 전문가용 기술을 누구나 쓸 수 있는 대중적인 기술로 탈바꿈시켰다. 혁명이었다. 대중을 위한 혁명이었고, 유희를 위한 혁명이었다. 

 

  
아이패드를 공개하고 있는 스티브 잡스. 애플의 상징인 '무지개 사과'와 '다르게 생각하라(Think Different)'는 회사 모토는 실리콘 밸리의 분방함과 다양성을 보여준다.
ⓒ 공개자료
잡스

 

애플의 반엘리트적 대중주의

 

쉽고 단순한 인터페이스를 '맥'의 상징으로 만들었던 애플은 25년 뒤 아이패드에 와서는 아예 매개체로서의 인터페이스를 없애 버린다. 이제 포인터도, 마우스도 필요 없다. 손가락으로 직접 만지고 문지르고 꼬집고 비틀고 흔들면 된다. 이런 면에서 "아이패드는 애플이 만들어 낸 가장 놀랍고 혁명적인 도구"라는 스티브 잡스의 말은 과장이 아니다.

 

아이패드가 공개됐을 때, 일부 평론가는 '애들 장난감'이라며 비웃었다. 하지만 이 조롱은 애플과 잡스에 보낼 수 있는 최대의 찬사다. 잡스는 아이패드를 소개하면서 "이제 사용자들이 응용소프트웨어와 내용물을 훨씬 친근하고, 직관적이고, 재미있게 만날 수 있게 됐다"며 신나 했으니 말이다.

 

애플은 '엘리트'를 위해 물건을 만들지 않는다. 철저히 대중적인 물건을 만든다. 이것이 단순히 시장 전략만은 아니다. 반엘리트적 민중주의는 6-70년대 미국을 휩쓸었던 저항문화(counterculture)의 핵심 축으로, 애플은 이 대중 운동의 모태 속에서 탄생했다.  '윗분,' '엘리트,' '소수의 인재' 좋아하는 기업이 애플을 따라갈 수 없는 또 다른 이유다.

 

문화사학자 시어도 로잭(Theodore Roszak)은 실리콘 밸리의 분방한 정신을 1960년대 저항운동의 산물로 파악한다. 60년대는 위계적 권력에 대한 대중들의 불만이 표출되기 시작한 시기였다. 정치는 타락하고, 기업은 부패했으며, 삶의 터전은 개발이라는 이름으로 파괴되었다. 젊은 목숨들이 '국익'이라는 미명 하에 전쟁터로 보내졌고, 사람들은 성과 인종이 다르다는 이유로 차별받았다.

 

과학기술은 하루가 다르게 발전했지만, 기술 진보는 대중들에게 아무런 희망을 주지 못했다. 대중들의 손에 미치지 않는 '저 높은 곳의' 기술은 권력의 도구로서 더 많은 통제, 착취, 파괴를 가져올 뿐이었다. 조지 오웰이 <1984>에서 묘사했듯 말이다. 로잭의 분석에 따르면, 애플의 '누구나 쓸 수 있는 컴퓨터'는 '통제로서의 기술'을 거부하고 대중들에게 권력을 되돌려 주기 위한  노력이었다.

 

이렇게 형성된 미국 서부 해안의 진보성, 반권위주의, 반도시/친자연주의는 실리콘 밸리의 정체성이 되었다. '다양성'의 상징인 무지개가 애플의 상징이 되고, 구글이 '사악해지지 말자'는 모토로 회사를 시작 것은 결코 우연이 아니다.

 

  
애플이 매킨토시 첫 모델을 내놓으며 선보인 1984년 텔레비전 광고. 대중적 기술이 선사하는 해방의 기쁨을 묘사한다. '1984년은 더 이상 조지 오웰이 묘사한 암울한 통제 기술의 시대가 아닐 것'이라는 문구가 보인다.
ⓒ Apple
애플

 

☞ '애플 1984년 TV광고' 바로가기

 

상상력에게 권력을, 대중에게 꿈을

 

잿빛 옷을 입은 남자들이 줄을 지어 걸어간다. 똑같은 제복을 입은 사내들의 얼굴은 무표정하다. 이들은 발을 맞추어 복도를 지나 '교육장' 안으로 들어간다. 대형 스크린에서는 심각한 표정의 지도자가 '훈사'에 여념이 없다. 이때 흰 셔츠와 붉은 반바지를 입은 여자가 망치를 들고 뛰어온다. 경찰이 뒤를 쫓는다.

 

여자는 원반선수처럼 몸을 돌려 공중으로 망치를 던진다. 망치에서 손을 놓은 여자의 몸짓이 마치 춤을 추는 듯하다.  여자의 얼굴에 웃음이 가득하다. 망치는 지도자의 얼굴을 향해 날아가고 곧이어 대폭발이 일어난다. 이제 사람들은 최면에서 깨어난다.

 

애플의 반권위적 진보성은 이 1984년 텔레비전 광고에도 그대로 드러난다. 첫 매킨토시 모델을 소개하는 이 광고는 친대중적 기술이 선사하는 해방, 자유, 기쁨을 묘사하고 있다. 미국의 저항운동이 이랬다. 권력에 대한 심각한 도전이었지만 사람들은 경직되지 않았다. 음악이 있었고, 춤이 있었고, 놀이가 있었고, 웃음이 있었다.

 

존 레논은 "상상하라(Imagine)"고 노래했다. 무엇에 대한 상상이었는가? 사람에 대한 상상이었다. 평화롭게 공존하는 사람들에 대한 상상. 꿈을 가질 수 없는 사회는 상상력을 가질 수 없다. 더불어 사는 기쁨이 없는 사회는 창의력을 가질 수 없다.

 

  
'사랑의 여름(Summer of Love).' 60-70년대의 미국 저항운동은 억압적이고 위계적이 권력에 대한 저항이자 즐겁고 유쾌한 문화 운동이었다.
ⓒ 공개자료
미국 저항운동

 

위계적 기업의 혁신법

 

무척 궁금하다. 쉬는 시간까지 줄어들어 밖에서 뛰어 놀지도 못하고, 소변까지 참아가며 공부하는 학생들이 '높으신 분들' 눈에는 어떻게 보일지 말이다. 놀이와 웃음 (그리고 배변)에 낭비할 에너지를 '국가 경쟁력'에 투여하는 '조국의 역군'들이 자랑스러워 보일까? 우리 어린이들은 어떤 상상을 하며 자랄까?

 

꿈꾸기 어렵기는 어른이 되어서도 마찬가지다. 한국 기업들은 왜 직원들의 몸을 혹사해야 혁신이 온다고 생각하는 것일까? 얼마 전 한국의 주요 공기업에 '민간 CEO'가 부임했다는 말을 들었다. 그가 단행한 '혁신'은 직원들을 불러다가 군대식 구보를 시키고, '혁신'을 목놓아 외치게 하는 것이었다.

 

'해병대 캠프'나 '특전사 지옥훈련'에서 혁신과 창의성을 찾는 기업과 정당도 있다. 혁신이 똑같은 제복과 집단적 훈련에서 나온다면, 가장 뛰어난 창의적 성과는 해병대나 특전사에서 나와야 하지 않을까? 그렇다면 직원들을 괴롭힐 게 아니라, '군기 센' 부대의 용사들을 연구개발팀에 영입하면 될 일이다.

 

그럴 시간과 돈이 있다면, 직원들에게 두둑이 보너스를 주어 휴가를 보내는 게 창의력 향상에 훨씬 도움이 된다는 게 내 생각이다. '지옥훈련'이 필요하다고 믿는 사람도 있을 것이다. 그런 분들은 휴가를 이용해 자원 입대 훈련을 받으면 된다. 열심히 뛰고, 기고, '혁신'을 외치다 보면 불현듯 떠오르는 생각이 있을 것이다.

 

"내가 여기서 뭐하고 있지?"

 

하지만 걱정하지 않으셔도 된다. 그 순간에 조직에 큰 기여를 하고 있으니 말이다. 조직에서 멀리 떨어진 그 순간만큼은 말이다.

top
:

▣  오슬로 - 개발관련 이슈 - 2010. 3. 31. 16:18


오슬로

 

미래에는 개발 미팅을 하면서 프로그래밍이 완료될 지도 모르겠습니다.

PDC2008 에서 발표한 오슬로(OSLO)는 바로 이런 미래의 개발 환경을 잘 보여주고 있습니다.

오슬로는 모델링 중심 개발을 실현하는 툴인데요

회의 따로 다이어그램 따로 코딩 따로 하면서 발생할 수 있는 문제들을 완전히 해결하기 위해 서페이스 같은 장치를 사용해서 프로젝트 미팅 단계에서 데이터베이스부터 UI 단 까지의 모델링을 여러 팀원들이 동시에 참여하면서 완성하고 이렇게 모델링이 완성되고 나면 자동으로 코드까지 만들어지는 뭐 그런 툴입니다.

그럼 모델링과 코드를 연결하는 언어가 필요할 텐데요 M(코드명:D)이라는 언어가 그 역할을 대신하구요 오슬로와 M은 다시 각종 언어 코드와 호환되어 전체 프로그램을 하나로 통합하도록 되는 시나리오입니다.

 

http://tvpot.daum.net/clip/ClipViewByVid.do?vid=551w0JZueDY$

http://flvs.daum.net/flvPlayer.swf?vid=551w0JZueDY$

 

미래에는 프로그래머란 직업은 없고, 아키텍트와 기획자만 있을 수도…..

 

[출처] 호랭이 블로그

http://flytgr.tistory.com/653


top
:

▣  객체지향적으로 자바 프로그래밍 하기 - 개발관련 이슈 - 2010. 3. 31. 15:11
마소....

http://www.imaso.co.kr/?doc=bbs/gnuboard_pdf.php&bo_table=article&page=1&wr_id=1154&publishdate=20021201



왜 객체지향 프로그래밍을 하는지는 코딩을 밤새도록 많이 해본 개발자라면 충분히 느낄 수 있을 것입니다. 특히 초보자일수록 자바 API의 메쏘드 사용법과 로직 구현에만 급급해 하나의 클래스 안에 다량의 코드를 넣어 프로그래밍하기 일쑤입니다. 또한 매일 하는 일이 코드를 , 키를 누르면서 복사하고 붙이기의 반복이고, 코드도 계속 여기저기 뜯어 고쳐서 누더기 같은 코드가 돼버립니다. 이 때문에 사용한 코드를 조금만 고치면 다른 곳에 재사용할 수 있도록 하기 위해서 객체지향 프로그래밍의 기법을 도입하게 됩니다. 이를 위해서는 클래스간의 관계를 잘 설정해야 하는데, 이번 연재에서는 객체지향 프로그램의 꽃인 클래스를 디자인하는 방법 즉, 디자인 패턴과 디자인 패턴을 표현하는 UML 기호에 대해서 설명하겠습니다.

UML의 개념
UML(Unified Modeling Langua ge)은 객체 관련 표준화기구인 OMG에서 1997년 11월에 만든 통합 모델링 언어로 객체지향적 분석 설계 방법론의 표준이라고 할 수 있습니다. 모델링 언어는 쉽게 얘기하자면 음악 연주시 악보에 각종 기호를 표기하는 방법에 비유할 수 있습니다. 악보에 기호를 표기하여 각종 악기 연주자가 악보에 쓰인 기호대로 연주함으로써 음악이 나오듯 UML은 소프트웨어 개발에 있어 클래스의 관계를 표시하기 위한 기호를 비롯해 객체지향 분석 설계를 하기 위한 다양한 방법(유즈케이스 다이어그램, 클래스 다이어그램 등 여러 가지 다이어그램 및 소프트웨어 분석 및 설계 장치)을 제공합니다. 또한 소프트웨어 개발 과정의 산출물을 비주얼하게 제공하고 개발자들과 고객 또는 개발자들 간의 의사소통을 원활하게 할 수 있도록 하고 있습니다.
UML을 처음 접하는 사람이 오해하기 쉬운 것은 UML은 소프트웨어 설계를 위한 도구일 뿐이지 방법은 아니라는 점입니다. 즉 UML을 이용해서 소프트웨어를 개발하는 다양한 방법이 나와 있다는 얘기입니다. 그중 UML을 가장 잘 적용할 수 있는 소프트웨어 개발 프로세스는 1998년 11월 미국 래쇼날에서 개발한 통합 프로세스(Unified Process) 5.0입니다.
이번 호에서는 UML 중에서 디자인 패턴을 이해하기 위해 UML로 표현한 클래스 및 클래스 관계 기호와 프로그램이 시간에 따라 어떻게 작동하는지를 보여주는 시퀀스 다이어그램을 설명하도록 하겠습니다.

클래스의 표현
<그림 1>을 보면 UML에서 클래스는 사각형으로 표시됩니다. 즉, 하나의 사각형은 클래스 하나를 나타냅니다. 클래스는 알다시피 멤버변수와 메쏘드로 구성됩니다. 이것은 <그림 1>처럼 클래스를 표현하는 사각형을 3등분해서 제일 위에는 클래스명, 그 아래에는 멤버변수, 그 다음에는 메쏘드가 옵니다. 여기서 용어를 하나 짚고 넘어가자면 클래스의 멤버변수와 메쏘드는 UML에서는 애트리뷰트와 오퍼레이션으로 칭한다는 것을 알아두길 바랍니다.
또한 클래스명이나 메쏘드명이 이탤릭체로 되어 있으면 각기 추상 클래스나 추상 메쏘드입니다. 그리고 멤버변수와 메쏘드에 밑줄이 그어져 있으면 각기 static 변수, static 메쏘드입니다.
<그림 2>를 보면 접근제한자에 대해 파악할 수 있습니다. ‘+’는 public을 뜻하며, ‘-’는 private, ‘#’은 protected입니다.
클래스의 관계
UML에서 클래스간의 관계는 상속, 인터페이스 구현, 집약, 클래스 사용 등이 있으며 이는 클래스간을 화살표로 연결하여 나타냅니다.

상속
<그림 1>에서 안이 비어 있는 삼각형 머리에 실선으로 된 화살표는 클래스간 상속관계를 나타냅니다. 화살을 맞는 클래스(ParentClass)가 부모 클래스이며 화살을 쏘는 클래스(ChildClass)가 자식 클래스입니다. 자식이 쏜 화살에 부모가 맞았다고 생각하면서 클래스의 상속관계를 이해하기 바랍니다.

인터페이스 구현
<그림 3>을 보면 안이 비어 있는 삼각형이 있는데, 점선으로 된 화살표는 인터페이스 구현관계를 나타냅니다. 화살을 맞는 클래스(MyInterface)가 인터페이스이며 화살을 쏘는 클래스(MyClass)가 인터페이스를 구현하는 클래스입니다.

집약
집약관계(Aggregation)는 용어가 약간 생소할지 모르겠습니다만 코딩하다 보면 자주 나오는 형태입니다. <그림 4>에서 보듯이 간단하게 얘기하면, Cart라는 클래스에서 FoodItem이라는 클래스를 멤버변수로 해서 사용하는 관계입니다. 이것은 다이어몬드와 ‘>’ 모양의 화살촉으로 구성돼 있으며 포함하고 있는 클래스쪽(Cart)이 다이아몬드이며 포함되는 클래스(Food Item)가 화살을 맞습니다.

클래스의 사용관계
클래스 사용관계는 그림처럼 사용하는 클래스로부터 이용당하는 클래스가 ‘->’모양을 화살을 맞는 관계입니다. 이때 화살표 위에 “Uses ▶”처럼 어떻게 사용하는지를 기술해 줍니다. <그림 5>에서 위의 것은 ‘Customer가 Money를 인출한다’라는 의미를 가지고 아래 것은 ‘Factory가 Product를 생성한다’라는 관계입니다.

디자인 패턴의 개념
디자인 패턴(Design Pattern)은 한두 번 들어본 이도 있겠지만 자바를 처음 배우는 독자에겐 생소하리라 생각합니다. 디자인 패턴은 중국무술에 나오는 소림권법에 비유할 수 있습니다. 즉 무술의 고수들이 가장 효율적으로 공격하고 방어하는 각종 손발동작을 묶어서 쓰는 방법이 권법이라면, 자바의 고수들이 클래스들을 가장 효율적이고 짜임새 있게 구성하여 쓰는 방법이 바로 디자인 패턴입니다. 소림권법에도 당랑권, 용권, 호권, 영춘권 등이 있듯이 디자인 패턴에도 싱글톤 패턴, 퍼사드 패턴, 커맨드 패턴 등 여러 가지 정형화된 패턴이 있습니다. 또한 고수들의 권법을 다양한 그림으로 표현하여 책으로 엮은 무공비급이 있습니다. 무공비급에 권법동작을 설명한 그림처럼 디자인 패턴도 클래스간의 관계를 표현하기 위해 UML의 그림과 기호를 사용합니다.

디자인 패턴의 이해
디자인 패턴은 ‘관계’를 이해하는 것이 중요합니다. 쉽게 얘기해 남자와 여자라는 클래스가 있는데 그 남자와 여자가 누구인지를 파악하는 것이 아니라 그 남자와 여자가 연인인지 부부 혹은 선후배인지를 파악하는 것이 바로 패턴입니다.
또한 클래스 설계시 단 한 가지만의 패턴이 적용되지 않습니다. 좀전에 예를 든 경우를 보면 그 사람들이 대학선후배였는데 결혼했다면 부부관계이면서 대학 선후배관계라 볼 수 있습니다. 마찬가지로 그 클래스 사이에서도 다양한 패턴을 발견할 수가 있습니다. 그러면 지금부터 이처럼 다양한 디자인 패턴을 하나씩 살펴볼까요.

싱글톤 패턴
싱글톤(Singleton) 패턴은 해당 패턴이 적용된 클래스의 인스턴스를 하나만 만들어 쓰겠다는 것입니다. 일반적으로 객체는 생성자가 호출될 때 새로운 인스턴스를 만들게 되는데, 일련번호 생성 클래스의 경우 여러 개의 인스턴스가 있으면 일련번호가 꼬이게 됩니다. 이 때문에 인스턴스를 단 하나만 만들어서 서비스하도록 하는 데 적용하는 것이 싱글톤 패턴입니다.
<리스트 6>을 보면 Singleton이라는 클래스에서 getInstance라는 메쏘드를 통해서만 Singleton의 인스턴스를 리턴합니다. 이 때 리턴되는 값은 초기에 static으로 생성된 자신의 인스턴스입니다. static이기 때문에 1개의 값밖에 못가지므로 싱글톤 패턴이 되는 것입니다. 그래서 Singleton 클래스에서 Singleton의 getInstance 메쏘드를 호출해서 얻은 인스턴스는 언제나 똑같게 되는 것입니다.

템플릿 메쏘드 패턴
템플릿 메쏘드(Template Method) 패턴은 상위 클래스에서 어떻게 처리할지만 기술하고 하위 클래스에서 구체적으로 실행하는 코드를 넣는 것입니다. 이는 윗사람이 아랫사람에게 청소를 하라는 행위를 지시하면 아랫사람은 구체적으로 비로 쓸거나 걸레로 닦는 등 구체적인 청소를 하게 되는 것입니다.
<리스트 7>의 추상 클래스인 Connect 클래스에서는 DB와 연결하는 클래스라 보고 connect라는 메쏘드가 추상 메쏘드로 돼 있습니다. 그리고 하위 클래스에 실제 DB는 제품별로 connect라는 메쏘드를 구현했습니다. 이때 주의할 점은 TemplateMethodTest 클래스에서 AConnect, BConnect의 인스턴스를 생성할 때 Connect형으로 생성하여 Connect 클래스에 기술된 메쏘드를 호출한다는 것입니다.

어댑터 패턴
어댑터(Adapter) 패턴은 쓰고 싶은 클래스를 자기에 맞게 변형해서 적용한다는 개념입니다. 어댑터는 가전제품에서 따온 개념인데, 보통 워크맨 제품의 경우 3V 직류제품은 220V 교류전원을 바로 쓸 수 없기 때문에 3V 교류로 바꿔주는 어댑터를 꽂아서 씁니다.
<리스트 8>의 예를 보면 Format이라는 클래스를 구현해야 하는데, MyCalendarFormat이 Format을 상속받아서 MyCalendar에 맞게 구현하고 있습니다. 그리하여 AdapterTest에서는 MyCalendar 및 Format이 합쳐진 기능을 사용할 수 있습니다. 즉 특정 클래스의 메쏘드를 사용할 때 바로 쓰기는 뭐하고 적절히 바꿔서 가져와야 할 경우 어댑터 패턴을 적용하면 되겠습니다.

퍼사드 패턴
퍼사드(Facade) 패턴은 영화예매 창구로 보면 됩니다. 우리가 예매할 때 영화제목과 시간을 말해주면 창구에서는 해당 시간의 영화가 잔여좌석이 있는지를 확인하고 금액을 알려 줍니다. 영화표를 예매하는 사람은 창구에서 일어나는 일은 알 수 없고 다만 창구를 통해서 표를 예매할 수 있다는 것만 압니다.
<리스트 9>의 예를 보면 데이터파일에서 데이터를 불러와서 간단한 XML 태그를 만들려고 하는데, FacadeTest에서는 데이터를 파싱하고 XML 태그를 생성하는 메쏘드를 만들지 않고 바로 InfoBox의 makeTag를 호출합니다. InfoBox가 영화예매 창구 역할을 한다고 보면 되겠습니다. InfoBox에서는 Data Parser와 TagMaker의 적절한 메쏘드를 호출하고 있습니다.

브리지 패턴
<그림 10>에서 브리지(Bridge) 패턴은 다리 교각처럼 생겼는데, 한쪽 다리의 클래스 상속 계층은 기능 측면이고 다른 한쪽은 그 기능을 층층이 구현한 클래스 상속 계층이라 보면 됩니다. 즉 기능을 추가하려고 할 때는 좌측에 클래스를 상속해서 새로운 메쏘드 정의를 넣어 줍니다. 그리고 구현의 추가는 우측의 클래스를 상속해서 새로운 기능 구현을 넣어줍니다. 이렇게 기능과 구현이 분리되어 있기 때문에 코드가 복잡해지지 않고 원하는 기능과 구현을 계속 추가해 나갈 수 있습니다.

그밖의 디자인 패턴
지금까지 소개한 패턴 외에 많은 패턴들이 있습니다. 그러나 본 연재에서는 앞의 5가지만 다루고 기타 패턴은 각종 디자인 패턴 관련 책을 참조하세요. 기타 패턴에는 Abstract Factory, Builder, Chain of Responsibility, Command, Composite, Decorator, Factory Method, Flyweight, Interpreter, Iterator, Mediator, Memento, Observer, Prototype, Proxy, State, Strategy, Visitor 등이 있습니다.

나머지는 스스로 찾아낼 수 있겠죠?
여러분 그동안 감사했고 수고 많았습니다. 처음 원고를 쓸 때는 6개월이 아득하고 길게만 느껴졌는데 벌써 마지막이라니 시간은 정말 짧은 것 같습니다. 항상 원고를 쓰고 나면 이 부분을 더 설명했으면 하는 아쉬움이 늘 남습니다. 무엇보다도 여러분께 제일 강조하고 싶은 것은 ‘이것은 이것이고 저것은 저것이다’하는 지식의 전달이 아니라 ‘이것은 이렇게 찾아내고 저것은 저렇게 찾아내어야 한다’라는 것입니다. 제가 설명하지 못한 부분은 여러분 스스로 다양한 방법으로 찾아내고 자기의 지식으로 소화해내는 것이 중요합니다. 아무쪼록 여러분의 앞날에 행운이 가득하길 바랍니다.

정리 : 이종림 nowhere@korea.cnet.com




1회 2002.7 | 어떻게 자바를 나의 무공으로 만들 것인가
2회 2002.8 | 자바의 기본 문법과 클래스 살펴보기
3회 2002.9 | 에러를 잡아라
4회 2002.10 | 자바 제대로 프로그래밍하기
5회 2002.11 | 자바를 더 빠르게 만들자
6회 2002.12 | 객체지향적으로 자바 프로그래밍하기

개념을 확실히 이해했나요?

다음과 같이 지금까지 배운 것을 개념을 확인하는 프로그램을 만들어 보세요.

? 실제 프로젝트시 데이터베이스에 연결하는 데 시간이 많이 걸려서 미리 연결해둔 커넥션 객체를 모아서(커넥션풀) 관리합니다. 이때 이 커녁션풀을 관리하는 클래스는 기본적으로 무슨 패턴을 써서 만들어야 할까요?
? 앞의 퍼사드 패턴의 예제는 완벽한 XML 파일을 만들지 못합니다. 클래스나 메쏘드를 추가해서 완벽한 XML 파일을 만들어 보세요(이때 어느 클래스를 수정해야 하는지 파악한다면 퍼사드 패턴을 제대로 이해하고 있는 것입니다).
top
:

▣  코더!?~! - 개발관련 이슈 - 2010. 2. 19. 16:43
top
:


articles
recent replies
recent trackbacks
notice
Admin : New post