본문 바로가기

IT/학습

디자인 패턴

디자인패턴이란건 수많은 개발자들이 개발하면서 발생하는 반복적인 문제들을 어떻게 해결할 것인지에 대한 해결 방안이다.

 

많은사람들이 인정한 모범 사례를 바로 디자인 패턴이라고 한다.

 

이러한 디자인 패턴은 객체지향 4대특성(캡슐화,상속,추상화,다형성)과 설 계원칙(SOLID)을 기반으로 구현 되어있다.

 

디자인 패턴의 장점.

  1. 재사용성 : 반복적인 문제에 대한 일반적인 해결책을 제공하므로, 이를 재사용 하여 유사한 상황에서 코드를 더 쉽게 작성할 수있다.
  2. 가독성 : 일정한 구조로 정리하고 명확하게 작성하여 개발자가 코드를 이해하고 유지 보수하기 쉽게 만든다.
  3. 유지 보수성 : 코드를 쉽게 모듈화 할 수 있으며, 변경이 필요한 경우 해당 모듈만 수정하여 유지 보수가 쉬워진다.
  4. 확장성 :  새로운 기능을 추가하거나 변경할 때 디자인 패턴을 활용하여 기존 코드를 변경하지 않고도 새로운 기능을 통합할 수 있다.
  5. 안정성과 신뢰성 :  수많은 사람들이 인정한 모범 사례로 검증된 솔루션을 제공한다.

 

디자인 패턴의 단점.

  1. 복잡성 증가 : 디자인 패턴은 문제 해결을 위한 특정 구조를 강요 하기 때문에, 문제의 복잡성에 비해 패턴을 적용하는 것이 오히려 코드를 더 복잡하게 만들수 있다. 작은 문제에 과도한 패턴을 적용하면 코드가 지나치게 복잡해져서 이해하기 어려워 질수 있다.
  2. 오용과 남용 :  패턴을 무조건 사용하는 것은 오히려 문제를 초래할 수 있다. 디자인 패턴은 특정 상황에서 유용하지만, 모든문제에 적용할 수 있는 것은 아니다. 예를들어 싱글톤 패턴을 남용하면 전역 상태 관리가 복잡해지고 멀티스레드 환경에서 하나만 있어야할게 여러개 별개로 동작할 경우가있다.
  3. 성능 저하 : 디자인 패턴은 코드의 유연성과 재사용성을 높이지만, 성능 측면에서 오버헤드를 유발할수 있다. 예를들어, 추상 팩토리 패턴은 객체 생성 로직을 캡슐화 하지만, 지나친 추상화로 인해 성능 저하가 발생할수 있다.
  4. 초기 설계 비용 : 디자인 패턴을 적용하려면 초기 설계 단계에서 많은 고민과 계획이 필요하다. 이는 시간과 비용을 증가 시킬수 있으며, 프로젝트의 규모나 요구사항에 따라 너무 복잡한 설계가 될 수 있다. 특히 작은프로젝트에서는 복잡한 패턴을 적용하는 것이 오히려 불필요한 리소스 낭비가 될수 있다.
  5. 유연성의 제한 : 디자인 패턴이 제공하는 구조는 일관성을 높이지만, 유연성을 지나치게 제한할수 있다. 모든 상황에서 패턴이 적합합지 않으며, 패턴에 맞추기위해 지나치게 많은 코드를 작성해야 하는 경우도 발생 할 수 있다.

 

디자인 패턴의 한계

  1. 패턴의 범위 : 디자인 패턴은 특정 문제를 해결하기에 적합한 방식이다. 그러나 모든 문제를 패턴으로 해결할 수는 없다. 일반적으로 구조적 문제를 해결하기 위한 도구이다. 즉, 특이한 문제에 맞닥뜨리면 쓰지 않는게 나을 수도 있다.
  2. 동적 변화에 대한 한계 : 정적 구조를 다루는 경우가 많기 때문에 런타임에 동적으로 변화하는 요구사항 처리하는 데 한계가 있다. 예를들어 런타임에 객체를 동작을 변경해야하는 경우 전략패턴이나 상태패턴을 사용하더라도 모든 변화를 대응하기 어려운 상황이 있을 수 있다.
  3. 새로운 기술과 트렌드에 대한 적응 : 디자인 패턴은 오래된 문제들을 해결하는데 중점을 둔다. 하지만 소프트웨어 개발환경과 기술이 변화함에 따라 새로운 문제들이 등장 할수 있다. 예를들어 클라우드 기반 아키텍쳐나 서버리스 커뮤팅 환경에서는 기존의 패턴이 적합하지 않을 수 있다.
  4. 특정 언어나 플랫폼에 종속적이지 않음 : 언어와 플랫폼에 종속적이지 않지만, 그로인해 특정언어나 환경에서는 비효율적일수 있습니다. 예를들어 , C++에서는 싱글톤 패턴이 언어적 특성으로 인해 메모리 관리 문제가 발생할수 있고, 자바에서는 추상팩토리나 빌더패턴이 코드의 복잡성을 높일수 있다.

 

요약

 

즉,디자인 패턴은 소프트웨어 개발에서 필수적인 도구이긴 하지만, 모든 문제에 적용할수 있는 만능 해결책이 아니다.

장점은 재사용성과 유지보수성의 향상, 코드의 가독성 개선, 유연한 설계등등 있고,

단점은 복잡성 증가, 성능저하, 오용의 위험, 초기 설계 비용 상승 등이 있다.

 

디자인 패턴을 올바르게 사용하려면 문제의 성격과 요구사항을 정확히 파악하고, 그에 맞는 패턴을 선택하는게 중요하다.

패턴을 남용하지 않고, 상황에 맞는 패턴을 사용하고, 상황에 맞는 패턴이없는경우 사용하지 않고 넘어가는게 장점을 최대화 하고 단점을 최소화하는 방식이고 이게 최선인듯하다.

 

'IT > 학습' 카테고리의 다른 글

framework, engine, library 차이점  (1) 2025.01.02
SOILD 원칙  (0) 2024.12.31
캡쳐 클로저  (1) 2024.12.20
Delegate와 Event  (0) 2024.12.20
[C#] DFS 와 BFS  (0) 2024.12.20