패턴은 일정한 형태나 양식 또는 유형이 반복되는 것을 말합니다.
소프트웨어 공학에서의 패턴은 일반적으로 발생하는 문제를 해결하기 위해 표준화된 솔루션을 제공하는 소프트웨어 디자인 기법으로 개발자가 시간을 절약하고 효율성을 높일 수 있도록 도와줍니다.
반대로 디자인 패턴을 사용하지 않고 소프트웨어를 개발하게된다면 다음과 같은 문제가 발생합니다.
디자인 패턴을 사용하지 않았을 때 발생할 수 있는 문제들
코드의 재사용성이 낮아진다.
디자인 패턴은 일반적인 문제를 해결하는 데 사용할 수 있는 일반적인 해결책을 제공하므로, 코드의 재사용성을 높일 수 있습니다.
반면 디자인 패턴을 사용하지 않고 개발을 진행하면, 비슷한 문제에 대해 매번 새로운 코드를 작성해야 하므로 코드의 재사용성이 낮아집니다.코드의 가독성이 낮아진다.
디자인 패턴은 특정한 목적을 가지고 일반적인 해결책을 제공하므로 코드의 가독성을 높일 수 있습니다.
반면 디자인 패턴을 사용하지 않고 코드를 작성하면, 코드가 복잡하고 이해하기 어려울 수 있습니다.코드의 유지보수성이 낮아진다.
디자인 패턴은 소프트웨어 개발에서의 표준화를 이끌어내므로 코드의 유지보수성을 높일 수 있습니다.
디자인 패턴을 사용하지 않고 코드를 작성하면, 코드가 일관성 없이 작성될 가능성이 높아져 유지보수성이 떨어질 수 있습니다.코드의 확장성이 낮아진다.
디자인 패턴은 소프트웨어 개발에서의 표준화를 이끌어내므로, 코드의 확장성을 높일 수 있습니다.
디자인 패턴을 사용하지 않고 코드를 작성하면, 코드가 간단한 문제를 해결하기 위한 것으로 제한될 가능성이 높아져, 코드의 확장성이 낮아질 수 있습니다.코드의 품질이 낮아진다.
디자인 패턴은 일반적인 문제를 해결하기 위한 일반적인 해결책을 제공하므로, 코드의 품질을 높일 수 있습니다.
반면 디자인 패턴을 사용하지 않고 코드를 작성하면, 코드의 품질이 낮아질 가능성이 높아집니다.
따라서 디자인 패턴을 사용하면 코드의 재사용성과 가독성을 높일 수 있으며 소프트웨어 개발에서의 생산성을 향상 시킬 수 있습니다. 또한 디자인 패턴은 소프트웨어 개발에서의 표준화를 이끌어냄으로써 코드의 유지보수성과 확장성을 높이는 데도 도움을 줍니다.
협업에서 디자인 패턴은 다른 개발자와 소통하거나 코드를 통합할 떄 통일화된 코드를 작성해주는 좋은 코딩스타일로 작용하게 됩니다.
하지만 무분별한 패턴의 사용은 프로그램의 성능 저하를 유발합니다.
프로그램 성능을 최소화하기 위해서는 메서드의 호출과 객체간의 호출을 줄여야 하지만 디자인 패턴을 적용한 코드에서는 코드의 가독성과 유지보수성을 높이기 위해 객체의 메서드를 분리하기 때문에 메서드 호출이 더 잦아지기 때문입니다.
따라서 우리는 문제를 해결할 때 성능을 우선으로 해야될지, 가독성과 유지보수성을 우선으로 해야될지 잘 판단해서 디자인 패턴을 적용하는 것이 중요합니다.
GOF란
GOF는 Gang Of Four의 약자로 디자인 패턴 분야의 사인방(Gang of Four, 줄여 GoF)으로 불리는 에리히 감마(Erich Gamma), 리처드 헬름(Richard Helm), 랄프 존슨(Ralph Johnson), 존 블리시데스(John Vlissides)를 말한다.
이들은 소프트웨어를 설계할 때 발생하는 공통된 문제들에 대한 표준적인 해법과 작명법을 제안한 책인 "GOF의 디자인 패턴"이라는 책의 저자이다.
디자인 패턴의 종류
디자인 패턴은 24가지의 패턴이 있고 이 패턴들은 해결하려는 문제의 관심사에 따라 세가지로 분류됩니다.
- 생성 패턴 (Creational Pattern) : 객체를 생성하고 초기화하는 방법에 대한 패턴입니다.
팩토리
,싱글턴
,팩토리 메서드
,추상 팩토리
,빌더
,프로토타입
- 구조 패턴 (Structural Pattern) : 객체들의 구성과 상호작용을 다루는 패턴입니다.
복합체
,브리지
,어댑터
,장식자
,파사드
,프록시
,플라이웨이트
- 행동 패턴 (Behavioral Pattern) : 객체 간의 상호작용과 책임 분배를 다루는 패턴입니다.
감시자
,메멘토
,명령
,반복자
,방문자
,상태
,인터프리터
,전략
,중재자
,체인
,템플릿 메서드