ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [개발 생각] 개발하는데 꼭 디자인 패턴이 필요할까?
    개발일지/개발생각 2022. 7. 23. 12:20

    내 여러분 안녕하세요 개발하는남자 개남입니다. 
    오늘 다뤄볼 주제는 개발하는데 꼭 디자인 패턴이 필요할까? 에 대해서 포스팅하려고 합니다.

     


    디자인 패턴이란?

    디자인 (설계하다,디자인하다) + 패턴 (되풀이되는 사건이나 물체의 형태를 가리킨다.)
    되풀이되는 사건이나 형태를 설계하는 것을 디자인 패턴이라고 할 수 있겠습니다.
    개발 쪽으로 적용하여 정의를 내리자면?  반복되는 소스코드 혹은 반복되는 구조등을 설계하여 정의 내린 것을 디자인 패턴이라고 할 수 있겠습니다. 


    디자인 패턴 이름부터가 어려워...

    디자인 패턴 하면 뭔가 거창한 것 같고 듣기만 해도 어려운 것처럼 느껴질 수 있습니다. 하지만 어려울 것이 하나도 없습니다 왜냐면 디자인 패턴은 말그대로 누군가 정의 내린 개발 방식일 뿐입니다. 유명한 디자인 패턴 말고도 우리들도 어찌보면 자신만의 혹은 팀 간의 디자인 패턴을 지속적으로 사용하고 있을 수도 있습니다. 

     


    예를 들어 디자인 패턴을 하나도 모르는 A씨가 있습니다. A 씨는 회원 가입 기능을 담당하게 되었고 요구 사항에 맞게 기능을 만들었다고 가정하겠습니다.

    처음에는 문제가 너무 많아 문제를 해결하기위해 소스코드를 지속적으로 수정을 했을 것입니다. 문제를 점차 해결해 나아가면서 결국 기능 개발이 완료되었습니다. 해당 회원가입 기능을 라이브로 배포하여 사용자들이 이상 없이 회원가입을 하게 되었습니다. 그럼 A 씨에게는 회원가입 기능을 하는 소스코드를 만들었고 사용자들이 이상 없이 사용을 하기 때문에 자신의 소스가 검증된 소스라고 생각하게 됩니다. 


    시간이 지나 A씨는 다른 프로젝트에서 동일한 회원가입 기능을 만들어야 하는 상황이 되었습니다. 자신이 지난번 만들었던 회원가입 기능하는 소스코드를 가져와 적용해봅니다. 하지만 그 기능은 이전 프로젝트에 너무 많은 의존성으로 당장 바로 사용하지 못하게 되었습니다. 소스코드를 이번 프로젝트에서도 사용 가능하도록 수정을 하게 됩니다. 그러면서 확장성을 고려하여 다시 수정을 하게 됩니다. 

    이번에도 해당 소스코드가 정상동작을 하게 되었기에 검증이 된 것이라고 생각하게 됩니다.  


    또다시 시간이 지나 다른 프로젝트에서 동일한 회원가입을 또 만들어야 하는 상황이 생겼습니다. 지난번에 확장성을 고려해 설계를 했던 소스코드를 가져와 적용해보니 딱히 건들 부분이 많이 줄어들어 몇 가지만 손보고 바로 적용할 수 있었습니다. A 개발자는 1번째 프로젝트 때와 2번째 프로젝트 때와 달리 지금 프로젝트에서 회원가입 기능을 만드는데 시간을 많이 단축시킬 수 있게 되었습니다. 

    이러한 경험을 바탕으로 앞으로 만들어질 회원 가입에 사용할 소스코드를 자신의 소스 코드를 넣으면 개발시간을 단축할 수 있겠구나 하는 예상을 하게 되고 이것을 혼자만 알기보다 회원가입 기능을 만들어야 하는 많은 개발자들에게 알려주게 되어 많은 사람들이 해당 소스 코드 혹은 짜는 방식을 고대로 차용해 사용하게 됩니다. 

    그럼 많은 사람들의 입소문을 통해 회원가입기능을 만들 때는 A개발자가 만든 회원가입 코드를 사용하면 매우 좋더라 가 되게 됩니다.  이것이 바로 디자인 패턴이 만들어지고 전파되는 과정이 아닐까? 생각됩니다. 물론 이해를 돕기 위해 제가 만들어낸 예시의 경우는 디자인 패턴보다 기능 단위의 모듈을 전파하는 것에 더 가까울 수 있으나 디자인 패턴도 이와 같은 이유(개발 시간 단축, 유지보수 편의성)에서 만들어지고 입소문(도서 등..)을 통해 전파해 나가는 것이라 생각합니다.  

     

     




    그럼 왜 패턴을 학습하는데 어려움을 느낄까? 

    아마 이런 경험을 한적이 있을 것입니다. 내가 짠 소스코드는 읽기 쉬운데 남이 짜 놓은 소스는 눈에 들어오지 않고 해석하는데 오랜 시간이 걸려본 경험. 나는 분명 내 소스는 사용하기 편리해서 소개했는데 다른 개발자는 왜 그렇게 어렵게 하냐는 말을 들어본 경험.


    저마다 개발 실력이 다를 뿐 아니라 사람들은 저마다 자신의 스타일, 또는 철학이 존재하기 때문에 자신의 스타일이 아닌 소스코드를 보게 되면 자신의 스타일로 소스 코드를 해석하려고 하게 됩니다. 자신의 스타일대로 작성된 소스코드라면 손쉽게 읽힐 것이고 그게 아닌 소스코드라면 이해하는데 어려움을 느끼게 됩니다. 여러움을 해소하기 위해서는 새로운 스타일을 배워야 합니다. 


    이처럼 디자인 패턴의 경우 수십년에 걸쳐진 검증된 소스 코드라 할지라도 그 개발자의 개발 철학이나 스타일에 익숙하지 않기 때문에 학습에 어려움을 느끼게 되는 것입니다.

     


     

    그럼 왜 나와 다른 스타일의 디자인 패턴을 배워서 사용해야 할까요? 

    그것은 이미 수십년에 시간이 흐르면서 수행 착오를 거쳐 만들어져 온 검증된 패턴이기에 이 패턴을 익히면 익힌 사람들끼리의 커뮤니케이션이나 이 패턴을 익힌 사람의 소스코드를 이해하는 데에 쉬워지기 때문입니다. 물론 필수는 아닙니다. 위에 예를 들어 소개했던 개발자A씨처럼 하나부터 열까지 자신이 개발하고 만들 수 있습니다. 전혀 상관이 없죠. 왜냐면 기능만 동작되면 되기 때문입니다. 하지만 그렇게 되면 수행 착오를 많이 거칠 수밖에 없게 됩니다. 어디서 어떤 버그가 발생할지.. 혹은 보안상 괜찮을지 그리고 유지보수에 유리할지 등.. 많은 시간이 필요하게 되죠.

    하지만 이 역시 쉽지는 않습니다. 

    간단한 패턴도 있지만 정확하게 이해와 경험을 바탕으로 사용해야 하는 패턴도 있습니다. 디자인패턴에 목숨 걸고 이 패턴 저 패턴 적용하려고 하게 되면 오히려 독이 될 수 있습니다. 패턴이 필요한 부분에 적용하고 간단히 처리할 수 있는 부분은 그냥 개발하는 편이 오히려 좋을 수 있습니다. 

     


     

    자 그럼 간단히 정리 하고 결론을 내보도록 하겠습니다.

    패턴 사용의 장점 

    1. 개발 속도가 빨라진다.
    2. 새로 접하는 소스코드라 하더라도 내가 알고 있는 패턴대로 설계되어있다면 소스 구조를 쉽게 파악할 수 있다.
    3. 이미 검증된 방식이라 믿고 사용할 수 있다.
    4. 개발자들 간의 커뮤니케이션이 쉬워질 수 있다.

    패턴 사용의 단점

    1. 학습 시간이 필요하다.
    2. 잘못된 이해로 작성된 패턴은 오히려 좋지 못한 소스코드를 야기할  수 있다.

     

    자 이제 디자인 패턴이 꼭 개발에 필요한지에 대해 제가 생각하는 부분을 이야기하고 마무리하겠습니다.

      개발은 경험이 중요한 것 같습니다. 경험 없이 디자인 패턴만 배워 적용하려고 하면 분명 어려움을 느끼게 됩니다. 어느 때에 이 패턴을 사용해야 하는지 모르기 때문입니다. 

    만일 자신이 속한 회사 소스 코드에 디자인 패턴이 사용되었다면 그 디자인 패턴을 학습하고 익혀 사용하는 것은 좋다고 생각합니다. 하지만 자신이 속한 회사 소스코드에 디자인 패턴이 없거나 혹은 나 혼자 개발하는 상황이라면 디자인 패턴에 시간을 쓰기보다 개발을 먼저 해서 경험을 쌓는 것을 추천드립니다. 

    물론 무슨 소리냐! 디자인 패턴을 선행으로 학습하고 보다 좋은 소스코드를 짜는 것이 좋은 것이 아니냐 할 수 있는데 잠깐 말했듯 어떤 패턴을 어느 때에 사용해야 하는지 그리고 이 패턴을 써서 얻는 이점이 무엇인지 모른 채 그냥 패턴을 사용하는 것은 좋지 못하다고 생각합니다. 게다가 시간이 지나 내가 짠 소스코드를 이해하지 못하는 경험을 하게 될 수 있습니다. 그렇게 되면 유지 보수가 더 어려워지는 상황이 발생할 수 있다는 것입니다. 디자인 패턴에 대해 관심을 갖고 공부하는 것은 좋지만 소스코드 적용에는 신중하게 하자 필요함을 느낄 때에 적용하자가 제 생각입니다. 


    여러분들의 생각은 어떠신가요? 
    각자의 생각을 댓글로 공유해주신다면 개발 공부하는 분들이나 제게도 큰 도움이 될 것 같습니다 ^^


    감사합니다. 

    댓글

Designed by Tistory.