[iOS][DesignPatterns] 디자인 패턴를 공부하는 이유

Uno·2021년 6월 27일
1

iOS 디자인패턴

목록 보기
1/5


(이미지출처:https://unsplash.com/photos/P_qvsF7Yodw)

디자인패턴을 배워야하는 이유


  • 돈을 벌도록 도와줍니다.

    → 왜냐하면, 개발자의 시간을 아껴주고 일을 덜하도록 도와주기 때문입니다.

  • 코드를 작성하는 시작점이 되어줍니다.

    → 프로젝트를 시작할 때, 어떤식으로 구체화할지 그림을 그리는데 최초 시작점이 되어줍니다.

  • 디자인 패턴은 개발자들의 언어입니다.

    → 개발자들끼리 협업하고 소통할 때, 디자인 패턴을 기반으로 이야기 합니다. 의사소통을 위해 중요한 도구입니다.

  • 디자인패턴을 사용하다보면 얻는 이점으로, 코드 간의 반복성을 찾기 쉽습니다.

    → 반복성을 발견하기 쉽도록 구현되어 있다면, 코드를 줄일 수도 있고 효율성을 높히는 방안이 떠오르기 쉽겠죠?

하나 예시를 들어볼게요.

여러분은들 작은 회사지만 정말 다니고 싶은 회사에 다니고 있는 "정원사" 입니다. 회사는 점점 성장하고 있죠.
지금까지 여러분은 작은 프로젝트만 구현해왔습니다. - 하나의 나무에 몇 개의 꽃을 심는 정도?

그러나 이젠 상황이 변했습니다. 많은 고객들이 생겼고, 이제는 여러 그루의 나무를 심고 수많은 꽃을 심고
또 관리해야하는 상황이죠.

설상가상으로 여러 그루의 나무를 심어야하는데, 인력은 부족합니다. 또 인력을 보충한다고 하더라도 계약직정도로
한정되어 있습니다. 여러분은 정규직으로 계속 남아서 일해야하는 상황이고요.

그래서 여러분들은 다른 정원사에게 이 문제를 어떻게 해결할 수 있을지 물어보기로 했습니다. 그래서 여러분들이
찾은 방법으로 카트와 수레를 활용하는 방법을 찾았습니다. 그래서 여러분들은 동료들에게 카트와 수레를 사용하는 
방법을 이야기 했습니다. 그리고 여러분들은 이제 일을 안해도 될 정도로 효율성이 증가해서 관리만 하게 되었습니다.

지금까지 정원사에 대한 예시를 봤습니다. 비유에 대해서 설명해볼게요.

여기서 말하는 "수레와 카트" 는 디자인 패턴 입니다. 수레와 카트는 정원을 가꾸는데 아주 실용적인 도구입니다. 마찬가지입니다. 소프트웨어에서 디자인 패턴은 개발에 있어서 아주 실용적은 도구입니다. 여러분들은 수레와 카트를 이용하지 않고도 정원을 가꿀 수 있습니다. 하지만 소프트웨어는 좀 다릅니다. 만약 디자인패턴을 사용하지 않는다면, 프로젝트가 커지고 인력이 많아질수록 리스크 가 커집니다.

(정원예시와 조금 차이점이 있죠? 정원은 수레와 카트를 사용하지 않는다고 정원이 망가지지는 않습니다만, 소프트웨어는 디자인패턴을 사용하지 않으면 망가질 수도 있습니다.)

디자인 패턴이 고안되기 시작한 시점은 1970 ~ 1980 년대 부터입니다. 그리고 지금까지도 연구개발이 되고 있죠. 수년동안 이렇게 검등된 방법들이 있습니다. 그게 현재의 디자인 패턴이죠. 그렇다고 이게 완벽한 솔루션이라고 생각하시면 곤란합니다. (일반적인 해결책이 구체적인 상황에 모두 맞을 수 없으니까요!)

잠시 정원사 예시로 돌아가서 하나만 더 말하자면, 정원사가 수레와 카트를 잘 이용할 수 있다고 칩시다. 그렇게 되면 하고자하는 정원관리 작업은 분명히 생산성도 올라갈 것입니다.

디자인 패턴도 유사하게 계속 반복되는 소프트웨어적 문제들에 대해서 일반적인 해결책을 줍니다. 그렇기에 생산성 향상을 기대할 수 있겠죠. 마치 수레와 카트처럼요.

이제 디자인 패턴을 공부해야하는 이유를 넘어서 무엇이 디자인 패턴인지 개괄적으로 보겠습니다.

디자인 패턴의 종류


  1. 구조 디자인 패턴 (Structural Design Pattern)

    ex) MVC, MVVM

  2. 행위 디자인 패턴 (Behavioral Design Pattern)

    ex) Delegation, Observer

  3. 생성 디자인 패턴 (Creational Design Pattern)

    ex) Singleton, Prototype

이렇게 보통 3 가지로 나눌 수 있습니다. 이것들에 대해서 궁금하실 수 있겠지만, 이것들의 정의를 열심히 보는 것은 다른 개발자나 글쓰신 분들에게 힘을 빌리기로 하고, 우린느 좀 더 바로 사용할 수 있는 혹은 이해해 도움이되는 지식으로 넘어갈게요.

참고자료)

What are Design Patterns?

profile
iOS & Flutter

0개의 댓글