__file__
148
2019-07-17 20:34:02
14
1279

디자인 패턴?


컴퓨터 공학과에 재학중인 학생입니다.

양질의 프로그램이 어떠한 과정을 거쳐 만들어지는지 굉장히 관심이 많은데, 그래서 소프트웨어 공학/알고리즘 등등의 이론들에 대해서도 궁금한게 많고 현업에서 쓰이는 도구나 방법론들에도 굉장히 관심이 많은 편입니다.

그 중 옛날부터 들어오던 디자인패턴이란게 되게 궁금하네요.

들어보긴 많이 들어봣는데, 그게 대체 어떤건지 잘 다가오지가 않더라구요.

그렇다고 학교에서 강의를 개설하는 것도 아니라서.. 뭔가 궁금하네요

디자인 패턴이란걸 어떤식으로 사용하는지 궁금합니다.

그리고 또 한번쯤 볼만한 소프트웨어 공학적인 요소들은 무엇이 있을까요?

감사합니다 :)

0
0
  • 댓글 14

  • 피신왕통키
    451
    2019-07-17 20:40:22

    저도 잘 모르지만...

    제가 생각하는 디자인 패턴은

    소스 코드를 작성할 때 확장성, 소스코드의 깔끔함까지 고려해서 작성하는게 디자인 패턴이지 않을까 싶네요..

    디자인 패턴 강의 검색해보시고 직접 타이핑 하면서 이해하면 아 이런 느낌이구나 감이 오지 않을까 싶어요

    1
  • gnas2
    70
    2019-07-17 21:19:19 작성 2019-07-17 21:19:40 수정됨

    코드를 100줄 200줄 300줄 짜다보면 이게 과연 내가 잘 하고 있는 것일까 싶을때가 있습니다.

    어떻게 설계해야 나중에 일어날 법한 상황이 발생했을 때 누가 보기에도 직관적으로, 최소한의 설계로 요구사항을 만족시킬 수 있는가를 생각하는 설계방법이 디자인패턴이라고 생각합니다.

    물론 단순히 짧게 짜는것과는 좀 거리가 있겠죠.?

    1
  • rvo
    102
    2019-07-17 21:52:51

    저는 디자인 패턴에서 시작해 공부하는 것보다 직접 코드쳐보며 구조를 만들어 나가다가 나중에 알고보니 이러이러한 구조가 이러이러한 패턴이었다더라 식으로 공부했습니다. 이런 경험이 쌓인 후 디자인 패턴을 보니 이 당연한거에 거창하게 이름까지 붙여놨네라는 생각이 들었습니다.

    시작을 이렇게 하다보니 개인적으로 디자인 패턴은 굳이 공부해야할 무언가라기 보다 프로그래밍을 프로그래밍하는 도구로서 인식되더군요. 

    1
  • 원숭이부대
    761
    2019-07-17 23:04:47 작성 2019-07-17 23:17:40 수정됨

    사실 학생때는 디자인패턴이란 개념이 와닿지 않습니다.


    왜냐하면, 당장 시험준비해야하고 과제돌아가게 만들어야하고, 놀고 싶기도 하고

    스펙도 쌓아야 하고 할게 많죠.

    그중에서 코딩수업과제는 우선 돌아가면 다됐다! 완성! 하고 내는 경우가 대부분입니다.


    뭐 소켓게임 하나만들면 클래스 하나에 1천라인넘어가는것도 나오더군요. (경험담)

    물론 클래스는 전체에 1개였습니다 ㅎ


    그리고 4학년쯤.. 머리에 좀 뭐가 들었다 싶은 상태에서 2~3학년때 짰던 소스를 돌아보면 뭔 개판소스가 있다고 생각이 들겁니다.

    바로 이 순간이 디자인패턴이란걸 공부해야 하는 때가 됩니다.

    (원랜 더 일찍 하면 좋겠지만 학교에서 잘 안알려줌)


    만약 이때쯤 돼서 소스를 좀 더 깔끔하게 짜도록 해야겠다라는 생각이 '전혀' 안든다면(실천하지는 않더라도), 개발자로서의 소양을 의심해야한다고 생각합니다.


    제가 다닌 학교에선 디자인패턴과 SW공학을 가르쳤는데, 대부분의 학생이 많이 어려워했습니다.

    지금생각하면 너무나도 당연한건데 그당시엔 잘 몰랐죠.

    (저는 복학하고 자바도 안배운 상태에서 디자인패턴 수업이 뭔지도 모르고 그냥 들었다가 개털렸죠)


    취업준비할때 돼서야 조금씩 디자인패턴에 관심이 생겼고, 지금은 완전 디패충입니다.

    시간이 지나면 저절로 관심이 생기게 될 것인데, 벌서부터 신경을 쓰신다니, 개발자로서 자격이 충분해보입니다 !


    저도 물론 잘 하는 것은 아니지만, 잘 모른다고 하더라도

    디자인을 신경쓰도록 노력하면서 작성하는 사람과

    디자인이고 나발이고 빨리 끝내고 롤하러가야지 하는 사람과 차이는 닿을 수 없을 만큼 벌어질겁니다.


    조금씩 공부하면 되니 너무 조급하게 생각 마시고, 쉬운 책부터 하나씩 익혀보고

    자신이 예전에 했던 소스코드를 보면 의지가 타오르게 될 수 있습니다.


    그나저나 요즘 대학에서는 4년 내내 가르쳐도 부족할 과목을 가르치지 않다니..

    돈따라 강의 개설한다는데 진짜인가보군요.

    라떼는 말이야..


    환경이 좀 열악할 수 있다고 생각하실 수도 있겠습니다만

    그럴수록 오히려 관심있는 학생들에겐 기업에서 눈이 가기 마련입니다.


    디자인패턴을 모르는 현업개발자는 널렸습니다. 짜증나죽겠어요.

    이런 불량한 개발자는 안되실 것 같네요. 화이팅입니다.


    디자인패턴과 관련깊은 테스트 주도 개발이라는 개념도 같이 보시면 좋을 것 같습니다.


    간혹 보면 디자인패턴 도대체 왜 필요한지 모르겠다거나..

    디자인패턴을 적용하면 복잡하다고 하시는 분들이 계시는데.. 헬로월드 찍는데 디자인패턴이 필요하지는 않죠.

    그러나 일반적인 엔터프라이즈 환경에서는 디자인패턴을 적용하지 않으면 훨씬 더 복잡한 코드가 만들어집니다.

    디자인패턴은 현재의 리소스를 어느 정도 내주고, 미래의 리소스를 아주 많이 챙기는 그런 개념이라고 봅니다.

    아는 만큼 보이는 법입니다.

    2
  • IvoryCirrus
    126
    2019-07-18 00:45:02

    디자인패턴이란 일종의 모범사례라 생각하시면 좋습니다.

    바둑을 예로 들면 포석과 정석과 비슷하고,
    야구나 골프등의 운동에 비유하자면 좋은 스윙폼, 투구폼에 비유할 수 있겟지요.

    모든상황에 대한 만능열쇄는 아니지만,
    일반적으로 많은 상황에서 효과적인 설계와 개발에 대한 틀을 제시 해 주지요.

    GoF의 24가지 디자인패턴에 대한 많은 해설서가 있으니
    가장 익숙한 개발언어에 대해 좋은 해설서 하나 구비해 두시는 것도 추천합니다.


    그리고...
    한번쯤 볼만한 소프트웨어 공학적인 요소들은 여러가지가 있겟지만서도...

    소프트웨어 생명주기 및 개발방법론에 대한 이론과
    소프트웨어 디자인패턴 중에 MVC, MVP, MVVM 등의 설계패턴에 대한 이해가 중요하다고 생각해요.

    개발방법론은 한빛아카데미에서 나온 "쉽게 배우는 소프트웨어 공학" 이라는 책도 참고가 될 듯 합니다.

    0
  • 타키투스
    881
    2019-07-18 01:19:15

    디자인 패턴 매우 중요합니다. 특히나 객체지향 프로그래밍 방법론에서는 거의 정석과 같은 거라고 보시면 됩니다. 

    객체지향 프로그래밍이 지향하는 바를 가장 훌륭한 사례로 엮은게 디자인 패턴 입니다. 

    객체지향 프로그래밍이 무엇인지를 설명할때에 가장 써먹기 좋은 것이기도 하거니와 잘짜여진 객체지향 프로그램의 기준이 되기도 합니다.

    1
  • mirheeoj
    10k
    2019-07-18 06:34:45

    책이나 온라인 강의 한 번 보시면 바로 이해되실 것 같아요 

    0
  • fender
    16k
    2019-07-18 06:38:51

    윗분 말씀대로 특히 객체지향 언어를 일정 수준 이상 다루기 위해서는 디자인 패턴에 대한 지식이 상당히 중요합니다.

    디자인 패턴의 유용성은 크게 두 가지 측면에서 생각할 수 있는데, 우선 복잡한 시스템을 설계하면서 마주칠 수 있는 다양한 문제에 대한 모범 답안과 같은 역할을 합니다.

    특히 처음 객체지향 언어를 접하는 분들의 경우 시야가 반복문, 조건문 등 구문 단위로 제한되는 현상을 자주 볼 수 있습니다. 그래서 상속이나 인터페이스 등에 대한 활용도가 떨어지고 코드 재사용이 안된다던지 하나의 메서드가 지나치게 길어진다던지 하는 문제들이 생기는데, 특히 이런 경우 디자인 패턴을 공부하면 객체지향적 개념을 어떤 식으로 적용해서 보다 큰 구조를 쌓아올리는지에 대한 좋은 길잡이가 될 수 있습니다.

    한 편 디자인 패턴은 다른 사람이 작성한 코드를 파악하는데도 상당히 유용합니다. 물론 해당 코드가 디자인 패턴을 적용해서 작성했다는 전제가 필요하겠지만, 스프링과 같은 객체지향 언어로 된 유명 오픈소스 대부분은 그런식으로 잘 설계된 구조를 보이는 경우가 많기 때문에 그런 코드를 분석하는데 유용하게 사용할 수 있습니다.

    앞서 언급한대로 디자인 패턴은 반복적으로 등장하는 문제에 대한 일종의 모범 답안이기 때문에, 그런 개념을 공유하는 개발자들 사이에서는 특정 패턴의 모양만 보면 코드를 일일이 파보지 않아도 바로 어떤 의도로 그런 구조를 만들었는지 짐작할 수 있습니다.

    예를들어 코드에서 '-Factory'라던지 '-Strategy', '-Adapter' 같은 이름의 클래스가 있다면 디자인 패턴을 아는 개발자라면 바로 연관 패턴을 떠올리고 코드의 의도를 이해할 수 있기 때문입니다.

    0
  • kkey21a
    3k
    2019-07-18 08:40:40

    모범사례인 것도 사례이지만, 그만큼 시행착오 줄이는데도 도움이 많이됩니다.

    0
  • 자라선
    1k
    2019-07-18 08:46:03

    개발자는 코드로 이해한다고

    그나마 가장 이해하기 쉬운 싱글톤을 함보시는게 어떤가요?

    0
  • Chaed
    2k
    2019-07-18 09:09:34

    c++로 쓰여진 GoF책 추천드려요.

    다만 어느정도 기본기와 감각은 있어야할거에요

    0
  • 뒷집할머니
    1k
    2019-07-18 09:52:01

    바둑으로 따지면 정석 같은 거죠.

    0
  • jeroschoi
    62
    2019-07-18 10:18:02 작성 2019-07-18 10:20:46 수정됨

    위분들이 좋은 말씀을 적어주셔서 공부에 대한 방법에 대해서는 충분한 정보가 제공되었다 생각합니다.

    디자인패턴이 중요합니다만 저또한 그러한적이 있어 드리는 얘기인데 특정한 시스템을 구현 및 설계할때 시스템이 동작하기 위한 수단으로 디자인패턴을 사용해야되지 설계의 목적이 디자인패턴이 되는 부분을 경계해야합니다.

    설계시 특정패턴을 미리 염두를 하고 설계를 진행하다보면 습관적으로 해당 패턴으로만 설계를 진행하게 됩니다. 

    그런부분은 디자인패턴을 공부를 진입하는 입장에서는 조금은 경계해야할 부분이라 생각됩니다.




    0
  • __file__
    148
    2019-07-25 15:39:30

    달아주신 답변들 하나하나 도움이 많이 되었습니다!

    감사합니다~!!

    0
  • 로그인을 하시면 댓글을 등록할 수 있습니다.