ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 디자인 패턴이란
    소프트웨어공학/디자인 패턴 2022. 9. 24. 23:00

    이번 글에서는 디자인 패턴이란 무엇인지, 어떤 디자인 패턴이 있는지에 대해 공부한다.

    디자인 패턴이란

    소프트웨어를 설계할때, 주어진 상황에서 공통적으로 일어나는 문제에 대한 일반적이고 재사용 가능한 해결 방법

    정의만 봐서는 소프트웨어를 설계할때 여러 사람들이 공통적으로 마주하는 문제가 있고,

    여러 사람들이 해결 방법을 고안해내다가 '오 이렇게 해결해보니 좋은데?' 하는 것들을 모아서 일반화된 패턴으로 만든 것 같다.

    패턴화된 해결법을 쓰면 그 패턴을 아는 사람이 코드를 봤을때 이해하기가 더 쉬울 것이다.

     

    각 패턴들을 미리 공부해놓으면,

    어떤 문제를 만났을때 어떤 패턴을 적용하면 쉽게 해결할 수 있을지를 바로 떠올릴 수 있을 것이다.

    다만 특정 패턴을 적용해서 해결하는 것과 직접 해결 방법을 고안해서 해결하는 것의 장단점을 비교해서 선택할 줄도 알아야 한다.

    디자인 패턴에는 장단점이 존재하기 때문이다. 장점보다 단점이 더 부각되는 경우라면 당연히 사용하지 말아야 한다.

     

    그럼 어떤 디자인 패턴이 있는지를 알아보자.

    GoF 디자인 패턴

    디자인 패턴하면 흔히 가장 먼저 떠올리는 패턴이다.

    싱글톤 패턴, 빌더 패턴, 옵저버 패턴 등등 굵직한 패턴들을 3개의 종류로 분류하여 정의해놓았다.

    GoF는 Gang of Four의 줄임말로 이 분야의 권위자인 4명이 정리한 디자인 패턴이어서 그렇다고 한다.

    학습하기

    GoF 디자인 패턴은 다른 블로그에 워낙 잘 정리된 글이 많다.

    이 글에서 어떤 기준으로 분류했고 어떤 패턴들이 있는지를 빠르게 훑어본 다음,

    이 페이지에서 패턴별로 자세한 설명과 코드 예시를 함께 보면서 자세하게 익히자.

    중요도도 함께 구분되어있어서 시간이 충분하지 않을때 중요한 패턴 위주로 볼 수도 있어서 좋다.

    그 외 디자인 패턴

    구글링을 했을때, GoF 디자인 패턴 외의 패턴을 언급하는 경우가 많지 않았다. 특히 한글로 된 자료에선.

    아무래도 GoF 디자인 패턴이 가장 많이 쓰이기도 하고

    디자인 패턴이라는게 여러 사람이 많이 알고 있을수록 사용할때 더 의미가 있기 때문에 그런게 아닌가 싶다.

     

    GoF에 명시되지 않은 패턴은 대표적으로 지연된 초기화(lazy initialization) 패턴이 있다.

    예를 들면, 어떤 클래스의 인스턴스의 생성을 선언된 시점이 아니라 해당 인스턴스가 필요해지는 시점으로 지연시키는 것이다.

    참고로 Swift에서는 lazy라는 키워드를 제공하기 때문에 아주 쉽게 구현이 가능하다.

    이것도 굉장히 유명한 패턴인데 GoF 디자인 패턴에는 없는 패턴이라,

    GoF 외의 디자인 패턴들도 시간을 내서 학습해두면 유용한 순간이 있겠다는 생각이 든다.

    학습하기

    GoF 외의 디자인 패턴은 따로 정리된 글을 보지 못했다.

    위키백과 디자인 패턴 문서에서 디자인 패턴을 종류별로 나열한 섹션이 있는데,

    여기서 GoF에 없는 패턴도 적혀있으니 여기를 참고하면 어떤 패턴이 있는지 알 수 있다.

    패턴 이름을 다시 검색하며 찾는 방식으로 학습이 가능하다.

     

    기회가 된다면 직접 학습하고 정리해서 글을 써봐야겠다.

    아키텍처 패턴과의 차이?

    개인적으로 디자인 패턴과 아키텍처 패턴이 많이 헷갈렸다.

    아키텍처 패턴은 디자인 패턴과 유사하지만 좀 더 광범위한 개념이다.

    쉽게 말하면 아키텍처 패턴은 어떤 소프트웨어를 개발할건데 어떻게 설계해볼까? 를 패턴화한 느낌이라면,

    디자인 패턴은 소프트웨어를 개발하는 도중에 어떤 문제 상황에 부딪혔을때 어떻게 해결할까? 를 패턴화한 느낌이다.

     

    다음 글에선 아키텍처 패턴에 대해 공부해봐야겠다.

Designed by Tistory.