본문 바로가기

객체지향 디자인 패턴

디자인 패턴(Design Pattern)이란?

출처: https://ko.wikipedia.org/wiki/%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4_%EB%94%94%EC%9E%90%EC%9D%B8_%ED%8C%A8%ED%84%B4

앞으로도 쭈욱 도움이 될 출처: https://readystory.tistory.com/114

출처: https://m.hanbit.co.kr/channel/category/category_view.html?cms_code=CMS6705039023

 

디자인패턴이란? 특정 문맥에서 공통적이고 반복적으로 발생하는 문제에 대해 재사용 가능한 해결책이다(따라서 나는 어떤 문제상황에 어떤 해결책이 쓰이는지 짝지어서 학습해야 한다).

 

디자인 패턴이란? 객체지향 설계원리들(SOLID)이 잘 적용된 패턴.

 

소스나 기계 코드로 바로 전환될수 있는 완성된 디자인은 아니며, 다른 상황에 맞게 사용될 수 있는 문제들을 해결하는데에 쓰이는 서술이나 템플릿이다. 디자인 패턴은 프로그래머가 어플리케이션이나 시스템을 디자인할 때 공통된 문제들을 해결하는데에 쓰이는 형식화 된 가장 좋은 관행이다.

 

(매우중요)

또한 패턴을 쓰면 이미 만든 시스템의 유지보수나 문서화도 쉽게할 수 있고, 클래스의 명세도 정확하게 할 수 있으며, 객체 간의 상호작용 그리고 설계 의도까지 명확하게 정의할 수 있습니다(정형화된 템플릿에 맞추어졌으니 유지보수나 문서화도 개선이 가능한것이고 정형화된템플릿에 맞추어 졌으니 클래스의 명세도 정확하게 할수 있는 것이고 정형화된 템플릿에 맞추어졌으니 객체간의 상호작용 그리고 설계 의도까지 명확하게 정의할수 있는것이다!!!)

 

(클래스의 명세와 객체간의 상호작용을 명확하게 정의할수 있는것. 이것이 지금내가 지금 가장 크게 끌리는 디지인 패턴 공부목적임)

 

 

디자인 패턴을 공부하는 방법

개발자 세계에는 수십 개가 넘는 디자인 패턴이 있습니다. 사실 어떤 문제에 어떤 패턴을 사용해야 할지 판단하는 것은 참 어려운 일입니다. 특히 디자인 패턴에 대해 빠삭하게 알고 있지 않은 개발자라면 더욱 어려울 것입니다.

그렇기 때문에 어떤 패턴부터 어떻게 공부를 해야 할지 고민이 될 수밖에 없습니다.

 

정답이라고는 할 수 없지만, 제가 추천하는 디자인 패턴 공부 방법은 아래와 같습니다.

  • 생성(Creational), 구조(Structural), 행동(Behavioral) 패턴이 각각 어떤 문제들을 해결하는지 파악합니다.
  • 패턴들 간의 관련성을 파악합니다.
  • 비슷한 목적의 패턴들을 모아서 함께 공부합니다.
    예를 들어, 추상 팩토리 패턴을 공부했다면 이어서 팩토리 메소드 패턴을 학습해보고 각각 어떤 공통점과 차이점이 있는지 비교하여 헷갈리지 않게 정리해둡니다.
  • 디자인 패턴이 익숙치 않은 초보 분들은 패턴을 공부할 때에는 반드시 예제 코드를 직접 작성해봅니다.
    눈으로만 공부하는 것은 뒤돌아서면 까먹습니다. 다소 귀찮더라도 프로젝트에 적용한다는 생각으로 예제를 확실하게 이해하는 것이 중장기적으로 무조건 이롭습니다.


디자인 패턴을 사용하면 어떤 장점이 있나요?


패턴으로 소통하면 일상어로 설명할 때보다 훨씬 효율적인 의사소통을 할 수 있습니다.

1. 서로 같은 패턴을 알고 있을 때의 위력은 정말 막강합니다.
다른 개발자나 같은 팀에 있는 사람과 패턴으로 의사소통하면 패턴 이름과 그 패턴에 담겨있는 모든 내용, 특성, 제약 조건 등을 함께 바로 이야기 할 수 있습니다.


2. 패턴을 사용하면 간단한 언어로 많은 얘기를 할 수 있습니다.
뭔가를 설명할 때 패턴을 사용하면 내가 생각하고 있는 디자인을 다른 개발자가 빠르고 정확하게 파악할 수 있습니다.

1 ~ 2번 장점의 예를 들면, "오리들의 다양한 행동을 전략 패턴으로 구현하고 있습니다"라고 얘기한다면 이는 오리의 행동들을 쉽게 확장하거나 변경할 수 있는 클래스들의 집합으로 캡슐화되어 있다 라는 사실을 간단하게 한 문장으로 설명할 수 있는 것이죠.


3. 패턴 수준에서 이야기하면 '디자인'에 더 오랫동안 집중할 수 있습니다.
디자인 회의 중에 구현과 관련된 자질구레한 내용 때문에 논점이 빗나가 본 경험이 있으신가요? 소프트웨어 시스템을 이야기할 때 패턴을 사용하면 객체와 클래스를 구현하는 것과 자질구레한 내용에 시간을 버릴 필요가 없어서 디자인 수준에서 초점을 맞출 수 있습니다.


4. 전문용어를 사용하면 개발팀의 능력을 극대화할 수 있습니다.
디자인 패턴 용어를 모든 팀원이 잘 알고 있다면 오해의 소지가 줄어 작업을 빠르게 진행할 수 있습니다.


5. 전문 용어는 신입 개발자에게 훌륭한 자극제가 됩니다.
신입 개발자는 경험이 풍부한 개발자를 우러러봅니다. 선배 개발자가 디자인 패턴을 사용하면 신입 개발자들에게는 디자인 패턴을 배울 동기가 부여됩니다.

'객체지향 디자인 패턴' 카테고리의 다른 글

[UML] 클래스 다이어그램 (Class Diagram)  (0) 2023.11.04
생성패턴  (0) 2023.10.15
3. 장식(Decorator)패턴  (0) 2023.10.05
2. Strategy Pattern  (0) 2023.09.04
1. Singleton pattern  (0) 2023.09.04