디자인 패턴 (Design Pattern)

아몬드봉봉·2024년 1월 17일
0

Design Pattern

목록 보기
1/1

디자인 패턴이란?

소프트웨어 디자인 과정에서 자주 발생하는 문제들에 대한 전형적인 해결책이다. 이는 코드에서 반복되는 디자인 문제들을 해결하기 위해 맞춤화할 수 있는 미리 만들어진 청사진과 비슷하다. 여기서 패턴은 재사용할 수 있는 코드 조각이 아니라 특정 문제를 해결하는 방식을 알려주는 일반적인 개념이다.

쉽게 설명하자면 같은 실수를 반복하지 않기 위해 시행착오를 바탕으로 특정 상황에서 발생하는 문제 패턴을 발견하고 해결방안을 기록한 것을 디자인 패턴이라 부릅니다.

장점

  • 개발자간의 원활한 소통이 가능하다.
  • 소프트웨어 구조 파악이 쉽고, 재사용을 통한 개발 시간을 단축할 수 있다.
  • 설계 변경 요청에 대한 유연한 대처가 가능하다.
  • 엔터프라이즈 시스템이 확장될 때 용이하고, 개발 소요 시간 및 유지보수 시간 단축이 가능하다.
  • 개발의 효율성과 유지보수성, 운용성이 높아져서 프로그램의 최적화에 도움된다.

단점

  • 프로젝트의 복잡도를 증가시키고 코드의 가독성을 저해할 수 있다.
  • 추상화를 통해 일반적인 문제 해결책을 제공하지만, 과도한 추상화는 코드의 유지보수를 어렵게 만든다.
  • 잘못된 패턴 선택으로 인해 코드가 복잡해지고 가독성이 저하될 수 있다.
  • 과도하게 사용하면 패턴을 적용하는 데 필요한 비용과 시간이 증가하게 된다.
  • 적용을 위한 일정 수준의 기술과 경험이 필요하다.

디자인 패턴의 종류

객체 지향적 디자인 패턴에는 생성패턴, 구조패턴, 행동패턴 3가지 카테고리로 분류하고 있다. 세부적으로는 23개의 패턴이 있습니다.

생성패턴(Creational)구조패턴(Structural)행위패턴(Behavioral)
싱글톤(Singleton)어댑터(Adapter)커맨드 패턴(Command Pattern)
빌터(Builder)프록시(Proxy)인터프리터(Interpreter)
팩토리 메소드(Factory Method)브릿지(Bridge)상태(state)
추상 팩토리(Abstract Factory)컴포짓(Composite)전략(Strategy)
프로토타입(Prototype)퍼사드(Facade)메멘토(Memento)
데코레이터(Decorator)옵저버(Observer)
플라이웨이트(Flyweight)비지터(Visitor)
중재자(Mediator)
이터레이터(Iterator)
탬플릿 메소드(Template Method)
책임 연쇄
(Chain-of-Responsibility)

생성패턴

객체의 생성과 변경이 시스템에 미치는 영향을 최고화 하고, 코드의 유연성을 높여준다.

구조패턴

프로그램 내의 자료구조나 인터페이스 구조 등 프로그램의 구조를 설계하는 데에 활용될 수 있는 패턴을 의미한다. 큰 규모의 시스템에서는 많은 클래스 들이 서로 의존성을 갖는데, 이런 복잡한 구조를 개발하기 용이하게 만들고 유지보수를 더욱 간편하게 만들어 주는 것이 구조패턴에 해당된다.

행위패턴

클래스나 객체들이 상호작용하는 방법과 책임을 분산하는 방법으로 행위 관련 패턴을 사용하여 독립적으로 일을 처리하고자 할 때 사용한다.


정리

디자인 패턴이란, 같은 실수를 반복하지 않기 위해 시행착오를 바탕으로 특정 상황에서 발생하는 문제 패턴을 발견하고 해결방안을 기록한 것이다. 장점은 개발자간의 원활한 소통, 소프트웨어의 구조 파악이 쉬우며 재사용을 통한 개발 시간을 단축, 설계 변경 요청에 대한 유연한 대처 가능, 엔터프라이즈 시스템의 확장 용이, 개발 소요 시간 및 유지보수 시간 단축, 개발의 효율성, 유지보수성, 운용성 증가로 인한 프로그램 최적화에 도움됨. 단점으로는 복잡도를 증가시고 가동성을 저해, 과도한 추상화로 어려운 유지보수, 잘못된 패턴 선택으로 코드가 복잡, 과도한 패턴 적용으로 인한 비용과 시간이 증가,일정 수준의 기술과 경험이 필요. 종류는 생성패턴, 구조패턴, 행동패턴 이렇게 3가지 카테고리로 분류하고 있고 세부적으로는 23가지 패턴이 있다.


출처

https://refactoring.guru/ko/design-patterns/what-is-pattern
https://m.hanbit.co.kr/channel/category/category_view.html?cms_code=CMS6705039023
https://velog.io/@poiuyy0420/%EB%94%94%EC%9E%90%EC%9D%B8-%ED%8C%A8%ED%84%B4-%EA%B0%9C%EB%85%90%EA%B3%BC-%EC%A2%85%EB%A5%98
https://hoons-dev.tistory.com/113
https://www.dak.so/design-patterns/cons
https://effortguy.tistory.com/182

profile
성장을 즐기는 백엔드 자바 개발자

0개의 댓글

관련 채용 정보