소프트웨어 공부를 하다보면 자료구조 만큼이나 자주 등장하는 디자인 패턴이다.
그렇다면 디자인 패턴은 과연 무엇을 의미하는걸까?
💬 : 소프트웨어 설계 과정에서 자주 발생하는 문제들에 대한 일반적인 해결책들을 의미한다.
여기서 헷갈릴 수 있는 점, 알고리즘과 디자인 패턴이 같은 의미가 아닌가?
왜냐하면 두 개 전부 문제에 대한 해결책을 설명하기 때문이다.
하지만 엄연히 다르다.
알고리즘
💡 : 어떤 목표를 달성하기 위해 따라야 할 명확한 일련의 절차를 정의한다.디자인 패턴
💡 : 알고리즘에서 의미하는 해결책에 대한 더 상위 수준의 설명이다.
✅ 알고리즘은 요리법에 비유할 수 있으나, 패턴은 요리법이 아닌 청사진(Blueprint)에 더 가깝다.
✅ 두 개 모두 해결을 위한 명확한 단계들이 제시되어 있다.
✅ 청사진은 결과와 기능은 제시하지만 구현 단계 및 순서는 설계자, 즉 사용자가 결정한다.
사실 프로그래머가 패턴에 대해 알지 못해도 상관이 없다.
프로그래머가 패턴에 대한 지식이 전무해도 업무를 수행하는데 지장이 없다고 한다.
또 자신이 모르는 사이에 패턴들을 이미 구현하고 사용하고 있을수도 있다.
그렇다면 왜 패턴을 사용해야할까?
✅ 디자인 패턴은 소프트웨어에서 발생하는 일반적인 문제들에 대하여 시도되고 검증된 해결책들을 모은 것이다.
✅ 문제들을 다루지 않더라도 패턴을 배우게 되면 객체 지향 디자인의 원칙들을 사용하여 많은 종류의 해결 방법을 배울 수 있다!
✅ 팀원끼리의 프로젝트 설계 또는 개발 시 효율적으로 의사소통하는 데 사용할 수 있는 공통 언어를 정의해준다.
하나의 대화를 예로 들어보겠다.
🗣️ 팀원 A : 이거 어떻게 하면 더 메모리 낭비가 안될까요 ...?
🤷♂️ 팀원 B : 그거 그냥 싱글톤(
Singleton
) 사용하시면 될 껍니다.
🗣️ 팀원 A : 😓? 그게 뭐에요?
🤷♂️ 팀원 B : 🤦♂️.. 먼저 생성자를
private
으로 만드시고..~!#@..
만약 팀원 A가 디자인 패턴 중 하나인 싱글톤 패턴을 숙지했었다면 팀원 B가 싱글톤에 대한 설명을 전부 다 할 필요가 없다는 뜻이다.
그렇다고 해서 패턴이 꼭 좋은것이냐? 라고하면 아니다. 패턴에 대한 비판도 많다.
망치만 있으면 모든 것이 못처럼 보이게 된다.
디자인 패턴은 의도와 목적에 따라 분류 된다.
크게 3가지로 분류되며 생성 패턴, 구조 패턴, 행동 패턴으로 분류된다.
💡: 생성 패턴들은 기존 코드의 재활용과 유연성을 증가시키는 객체(인스턴스) 생성 메커니즘을 제공해준다.
Abstract Factory
)Factory Method
)Builder
)Prototype
)SingleTon
)💡: 구조 패턴은 구조를 유연하고 효율적으로 유지하며 객체 & 클래스를 더 큰 구조로 조합하는 방법이다.
Bridge
)Facade
)Adapter
)Wrapper
)Composite
)Proxy
)💡: 행동 패턴은 객체(
인스턴스
)간의 효과적인 의사소통과 책임 할당을 처리해준다.
Chain of Responsibility
)Command
)Iterator
)Mediator
)Observer
)요즘 자격증 준비하며 디자인 패턴들도 약간 맛 봤는데 정말 좋은 공부요소이다.
디자인 패턴은 꾸준히 공부하고 다뤄봐야겠다.
💬 참고 자료