Recent Posts
Recent Comments
04-20 00:00
관리 메뉴

동글동글 라이프

GoF 디자인 패턴 이렇게 활용한다. (1) 본문

개발자 이야기/Programming

GoF 디자인 패턴 이렇게 활용한다. (1)

동글동글라이프 2010. 10. 23. 13:03


전에 리눅스 커널에 이어 두번째로 교육을 듣게 되었습니다.

이번에는 GoF 디자인 패턴!!

굉장히 흥미있는 분야였는데 이렇게 교육에 당첨이 되었네요 하하하~~~!!!

앞표지

<출처 : Google 도서 >

강사는 GOF 디자인 패턴 이렇게 활용한다 장세찬님입니다.

책을 쓴 저자분에게 직접 교육을 듣는다는게 쉽지 않은데

이렇게 좋은 기회를 가지게 되어서 기쁩니다 :)


새벽 4시에 기상을 하고 밥을 먹고 6시쯤에 부산역에서 KTX를 타고  

약 7시 30분쯤 대구에 도착하였습니다.

교육장에 도착하니 어느새 8시가 훌쩍 넘어 있었고

교육은 9시부터 시작이 되었습니다.

시간

교육내용

9:00

- 소프트웨어 개발 총론
- 객체지향 개발 방법론
- Design Pattern 개요

10:00

 - Abstract Factory
 - Factory Method

11:00

- Builder / Prototype
- Singleton

12:00

중식

13:00

- Adapter / Bridge
- Facade

14:00

- Composite
- Proxy

15:00

- Chain of Responsibility
- Command

16:00

- Iterator
- Mediator / Observer

17:00

- Template Method
- Visitor

18:00

교육 참석자 상호 의견 교환 및 토론


교육에서 들었던 좋은 부분들을 잊지 않기 위해 

미흡하지만 세세하게 정리해보겠습니다.


개인적으로 원론적인 이야기를 좋아하는데,

처음에는 소프트웨어에 대해서 이야기를 먼저 꺼내셨습니다.


소프트웨어란?

- 프로그램과 프로그램 개발이나 운영, 유지보수에 관련된 모든 문서 및 정보 집합

( 프로그램 : 컴퓨터가 특정 작업을 수행하도록 만든 명령어들의 집합)


소프트웨어 개발이란?

- 원하는 목적을 달성하기 위한 기준이 되는 개념이나 철학을 바탕으로

특정한 과정을 거쳐 소프트웨어적인 해결책을 만들어 내는 것.


이제껏 봤언던 진정한 연구원분들은,
기술에 관한 부분보다 , 원론적이고 기초적인 부분에 대하여 이야기를 더 많이하고
그런 부분에 대해 이해를 하게 하려고 노력하는 것 같습니다.

이것은 기술을 받아들이기 위해 마음을 여는 과정이라고 할까요??

저 또한 강의를 할 때, 원론적으로 이야기를 먼저 꺼내어
이 기술이 왜 필요한가?
왜 중요한가?
왜 배워야 하는가?
등등의 질문들을 강의를 듣는 사람들이
직접 자문 자답할 수 있도록 유도를 합니다
잘 되는지는 모르겠지만요 ㅎㅎ



소프트웨어 특성과 개발 희망사항의 장애물

- 눈에 보이지 않고 만질수도 없다.
- 소프트웨어 각 부분간 연관성을 이해하기 힘들다.
- 쉽게 바뀔 수 있어 Brttle Problem 발생
- 하나의 변경이 전체의 영향을 미칠 수 있다.
- Lifecycle상의 각 단계가 서로 강결합되어  하나로 고치려면 전체 과정을 모두 고쳐야 한다.
- 작은 에러 상황에도 민감하게 반응한다.
- 완벽하게 테스트하기 어렵다.

※ Developement Cost : Maintenance Cost = 20 : 80
    개발은 어려우나 생산은 쉽다.


소프트웨어를 개발하면서 느꼈던 부분을
정확하게 짚어서 정리 해 주셨습니다.
시원하게 등을 긁어 주셨네요~ㅋㅋ

하드웨어는 한번 만들면 고치기 힘듭니다.
유지 보수의 몫은 어디까지나 소프트웨어의 남겨진 과제랄까요...

이렇게 유지보수가 중요한 소프트웨어 산업을
극복할 수 있는 방안이 두가지가 있는데

첫번째로 경험많은 전문가에 의한 개발,
두번째로 소프트웨어 공학에 기반한 개발입니다.


전자는 전문가가 부족하고,
전문가도 실수를 하기 때문에 훌륭한 극복방안이 될 수 없으며,
후자는 일반개발자들도 전문가들과 비슷한 개발이 가능하도록
가이드를 제시해야 하는데 이것은 결국
많은 훈련을 필요로 합니다.

저는 이 두가지를 언어를 배우는 방법과 비슷하다고 생각이 들었습니다

영어를 빗대어 말하자면,
현지에서 사는 사람들은 영어로 대화하는데 문제가 없다라고 보면 되지만,
실제적으로 보면 문법이나 어휘력에 문제가 있는 경우가 많죠..

그런데 영어를 정확하게 배우고 간다면,
현지에 가서도 대화를 하는데 문제가 없다는 겁니다.
다만 많은 훈련이 필요로 한다는 뜻이죠 ^^;


소프트웨어 공학이란

- 소프트웨어의 생성부터 소멸까지 전체 Lifecycle 동안 체계적이고
효율적인 업무를 수행하기 위한 수많은 경험들을 공학적인 형태로 집대성한 학문


객체지향의 장점중에서 "설계를 강요한다." 라는 특징이 있습니다.

이것은 장점일까요? 단점일까요?
당연히 장점입니다.

설계를 해야하기 때문에 전체 틀을 만들어야 하고, 그것으로 인하여
프로그램을 만드는데에 대한 오차가 줄어들게 됩니다.



객체란?

- 실세계에 있는 개체(Entity) 중에서 소프트웨어 개발의 대상(Object)이 되는 것
- Instance of Class (Programmers's View)
- 특징 : 이름이 있고 , 내부 상태를 가지며 내부 상태를 조작 할 수 있는 연산이 있다.

클래스(Class)란?

- User Defined Data Type
- 객체를 생성해주는 틀

객체 및 클래스의 종류

- Controller of Manager 객체
- Data 모델링 객체
- Data Structure or Algorithm 지원 객체


객체와 클래스의 차이를
붕어빵과 붕어빵을 만드는 틀 에 대하여 설명해 주셨습니다.
비유를 잘 못들면 더 헷갈릴 수도 있다고 보는데...
적절했다고 생각이 듭니다 :)

오전수업은 이것으로 끝 >_<



Comments