디자인패턴
디자인 패턴이란 무엇인가?
프로그래밍을 작성할 때 누구나 나름대로 많은 생각하는 바가 있을 것이다. 수 많은 프로그래머들이 있었고 그들은 유사한 문제점을 나름대로 고민하여 좋은 해결책을 제시하였다. 필자들의 경우에는 다른 프로그래머들의 좋은 소스 코드들을 참조하고 그들이 많은 시간을 들여 구현한 클래스의 구조를 필자들의 코드에 반영하고 싶었다.
...
소프트웨어의 제작
소프트웨어를 제작하는 일은 영화의 제작과 유사한 점들이 많이 있다. 영화를 만들기 위해서 어떠한 것들이 필요한가? 제작자, 시나리오, 감독, 조감독, 촬영 기사, 플롯, 배우 등의 모든 구성 요소들이 영화를 결정한다. 타이타닉과 같은 대작을 만들기 위해서는 더욱 정교하고 알찬 기술 요소들이 필요하다. 소프트웨어의 제작도 영화와 비슷한 면모들이 많이 있다. 아키텍터(전제 아키텍쳐를 구성하는 사람)의 역할이 감독의 역할과 비슷할까. 각각의 부분을 맞은 이들의 역할이 어우러져 영화를 구성하듯, 각각의 역할을 구성하는 이들의 역할이 어우러져 소프트웨어를 만든다. 여러분이 영화를 만든다고 생각해보라. 어떤 것을 배우고 어떻게 구성할 것인가? 촬영기법 / 영화의 시나리오 구성법, 이야기(플롯)의 구성법등의 여러 가지를 배우고 구성할 것이다.
소프트웨어를 제작한다고 하면 여러분은 어떻게 시작할 것인가? 이전에 하던 대로, 컴퓨터를 키고, Visual C++이나 Delphi 혹은 JAVA의 편집을 위해서 Edit Plus등의 프로그램을 작성하는 도구를 화면에 하나 띄운 다음, 바로 코딩을 시작할 것인가?
이 글을 읽는 독자라면 위와 같은 식으로는 제대로 된 소프트웨어를 만들어 낼 수 없다는 사실을 너무나 잘 알고 있을 것이다.
바로 그러하다. 그러한 방식으로는 아무것도 만들 수 없다.
...
필자들은 지난 호까지 2회에 걸쳐 패턴의 사용 경험을 기술하여 왔다. 그러나 지난 호까지 투고했던 내용들은 널리 알려진 시스템의 사례는 아닌, 필자들의 개인 경험에 의존한 사례들이었다. 패턴을 적용하면서 보고 느껴왔던 점들을 적은 글이기에 나름대로의 흥미 있는 주제가 되었으리라 기대한다.
그러나, 필자들이 만든 코드가 아닌 다른 유명한 시스템에서도 디자인 패턴이 정말 쓰이고 있는 것인가? 라고 의문을 가질 분들도 틀림 없이 있다. ( 한국 사람들은 원래 그런 것에 관심이 많아서 “어 여기서 쓰고 있네” 그래야지 좋다는 것을 깨닫는 습성이 있기도 하다. 필자들 또한 그렇다. – 개인 소견 ).
많은 디자인 패턴이 도입되어 있는 시스템에는 JAVA가 있다. JAVA에서 사용되는 여러 클래스들에는 분명히 디자인 패턴의 기법들이 도입되어 있다. 물론 JAVA VM을 만들고 JAVA를 설계한 사람들이 모두 디자인 패턴이라는 것을 의식하고 사용하였다는 것은 분명 아닐 것이다. JAVA 소스 코드나 VM소스 코드의 어느 구석을 찾아 보아도 디자인 패턴이라는 어휘는 한마디도 나오지 않는다. 이번 기사를 쓰기 위해서 VM의 일부분을 뒤지고 찾아 보았지만 디자인 패턴이라는 단어는 찾을 수 없었다.
그러나 자바의 부분들을 자세히 찾아보면 디자인 패턴의 덩어리라는 것을 알 수 있다. 특히나 자바의 환경은 JAVA에서 기본으로 제공하는 클래스들로 구성되어 있다는 사실과 이들 클래스들이 나름대로의 역할을 수행하고 상호 연동되는 과정에서 패턴이 사용된다. 알게 모르게 많은 부분들이 패턴으로 구현되어 있다는 사실은 이전에도 언뜻 생각이 들었지만, 이번 호의 원고를 준비하면서 정말 많은 부분들이 패턴으로 구현되어 있구나 라고 생각하게 되었다.
하나의 이론을 설명하는데 있어서 가장 좋은 방법은 분명 적절한 사례를 드는 것이다. 패턴의 원고를 기고하면서 이러한 실질적인 사례를 들고자 필자들은 많은 노력을 기울여 왔다. 그러나 그 노력이 필자들이 구현하였던 부분에 국한 되었다는 점 또한 사실이다. 이번 호에서는 JAVA에서 내부적으로 사용하고 있는 디자인 패턴의 사례를 들어 패턴이라는 것이 분명 널리 쓰이고 있다는 사실을 알리고자 한다.
'IT-개발,DB' 카테고리의 다른 글
[개발/ASP] Creating GridView Columns Dynamically (Part 1, 2) 소스코드 (0) | 2015.02.24 |
---|---|
[개발/ASP] Creating GridView Columns Dynamically (Part 2) (0) | 2015.02.24 |
[IT/개발] 유명한 ZTERM 1.41 텔넷 프로그램 (0) | 2015.02.04 |
[mysql] 제로카운터 - zerocounter 100일간만 데이터보관법 (0) | 2015.02.03 |
[개발] 에러메시지 : Unable to start debugging on the web server (0) | 2015.02.03 |
댓글